我可以远程桌面连接到指定的机器并运行svn,而不用提供认证信息,它能够正常工作;我的AD认证允许我访问我想要的仓库。
我也可以使用PowerShell连接到这台机器并执行svn命令。但是当我这样做时,会收到“禁止访问”的错误提示。当从被远程执行的脚本中运行时,[Environment]::UserName
显示了我期望的用户名(我的AD用户名)。
我需要做些什么才能使其正常工作?
一些代码:
$Session = New-PSSession -ComputerName $computerName;
if (-Not ($Session)) {
Write-Host "Did not create session!";
Return;
}
Invoke-Command -Session $Session -FilePath 'switchAllRepositories.ps1' -ArgumentList $branchName;
Remove-PSSession $Session;
并且在switchAllRepositories中,我有一个参数:
Param(
[string]$branchURL
)
一系列类似的电话通话,例如:
If(Test-Path "C:\webfiles\repositoryname") {
Write-Host "Switching repositoryname"
SwitchRepo "repositoryname" ($branchURL) "C:\webfiles\repositoryname";
}
调用哪个函数:
Function SwitchRepo ($repoName, $branchPath, $workingCopy)
{
$to = ("https://[url]/svn/" + $repoName + $branchPath);
Write-Host "to $to";
#debug
$user = [Environment]::UserName
Write-Host "as $user";
$exe = "C:\Program Files\TortoiseSVN\bin\svn.exe";
&$exe switch "$to" "$WorkingCopy" --username [redacted] --password [redacted] --no-auth-cache --non-interactive --trust-server-cert
if ($process.ExitCode -ne 0) {
#$wshell = New-Object -ComObject Wscript.Shell
#$wshell.Popup("Error switching " + $repoName,0,"Done",0x1)
Write-Host "Error detected!"
}
}
具体错误信息如下:
svn: E175013: 无法连接到 URL 上的仓库 '[snipped]' + CategoryInfo : NotSpecified: (svn: E175013: U...eases/20150620':String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError svn: E175013: 对 '[snipped]' 的访问被拒绝
Invoke-Command
的代码到抛出错误的代码看到完整路径。例如,我不知道$branchURL
变量是否对应于通过$branchName
传递的内容。它们的命名方式使它们看起来不相关,但如果是这种情况,那么我就不知道$branchURL
的值来自哪里。通常在SO上,问题是代码太少,而不是太多。 - briantist