2015-06-11 9 views
11

Ich kann Remote-Desktop in eine bestimmte Maschine und führen Sie Svn, ohne Angabe von Authentifizierungsinformationen, und es funktioniert; Meine AD-Authentifizierung ermöglicht mir den Zugriff auf das Repository, das ich möchte.Powershell, svn und Authentifizierung

Ich kann Powershell verwenden, um eine Verbindung zur Maschine herzustellen und auch svn-Befehle auszuführen. Wenn ich das tue, bekomme ich "Zugang verboten". [Environment]::UserName erscheint mit dem Benutzernamen, den ich erwartet habe (mein AD-Benutzername), wenn er über das Skript ausgeführt wird, das remote ausgeführt wird.

Was fehlt mir, damit das funktioniert?

Einige Code:

$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; 

und in switchAllRepositories, habe ich einen Parameter:

Param(
    [string]$branchURL 
) 

eine Reihe von Anrufen wie:

If(Test-Path "C:\webfiles\repositoryname") { 
    Write-Host "Switching repositoryname" 
    SwitchRepo "repositoryname" ($branchURL) "C:\webfiles\repositoryname"; 
} 

, die rufen:

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!" 
    } 
} 

Der genaue Fehler ist:

Svn: E175013: Kann nicht in einem Endlager URL '[snipped] + CategoryInfo verbinden: NotSpecified: (SVN: E175013: U ... Vereinfacht/20150620' : String) [], Remote + FullyQualifiedErrorId: NativeCommandError svn: E175013: Zugriff auf '[snipped] verboten

+1

Hängt davon ab, wie Sie verbinden. –

+0

@ MathiasR.Jessen Was müssen Sie wissen? Ich erstelle eine Remote-Sitzung und rufe ein Skript mit der Sitzung auf. – Yamikuronue

+0

Zeigen Sie den Teil von 'switchAllRepositories.ps1', wo es Parameter akzeptiert (wenn Sie es mit 'Invoke-Command' aufrufen, senden Sie einen Verzweigungsnamen als Argument), sollte es ein param-Block sein, ganz oben in der PS1, denke ich. – briantist

Antwort

4

es würde helfen, den Code Sie verwenden, um zu sehen, aber wenn es ist, was ich vermuten, dann verwenden Sie PowerShell Remoting mit entweder Enter-PSSession oder Invoke-Command.

Da diese standardmäßig die Kerberos-Authentifizierung verwenden und der SVN-Server sich wahrscheinlich auf einer dritten Maschine befindet, stoßen Sie wahrscheinlich auf das Kerberos-Doppelsprung-Authentifizierungsproblem.

Einfach gesagt, Sie können nicht in Maschine B von Maschine A remote, dann von innerhalb dieser Sitzung versuchen, Zugriff auf Maschine C mit dem gleichen Authentifizierungskontext.

Sie können auf einige Weisen Abhilfe schaffen: CredSSP wird oft in diesen erwähnt, aber ich finde, es ist kompliziert und in der Regel ein Umdenken der Workflow wird besser.

So können Sie beispielsweise Anmeldeinformationen für die SVN-Befehle explizit angeben.

Oder Sie können Ihren eigenen Endpunkt auf dem Server erstellen, der einen RunAs-Benutzer verwendet. Dann werden alle Befehle als einen bestimmten Benutzer von Maschine B sein:

+0

Das sieht genau so aus, was ich vermisse :) Aber warum, als ich dann versuchte, den Benutzernamen und das Passwort in mein Skript zu schreiben, funktionierte das auch nicht? Wahrscheinlich etwas über SVN versucht, die Kerberos über die bereitgestellten Anmeldeinformationen oder einige solche bevorzugen. – Yamikuronue

+0

Können Sie Ihre Frage bearbeiten, um den Code einzuschließen? – briantist

+0

Nicht sicher, welche Zeilen Sie möchten, aber ich habe etwas Code bearbeitet. – Yamikuronue