2012-11-27 5 views
6

Ich versuche, ein Powershell-Skript auf einem Remotecomputer (Windows 2008 Server R2) auszuführen. Der folgende Code funktioniert hervorragend, wenn er direkt von der Powershell ausgeführt wird. (Dh alles ist korrekt eingerichtet, WinRM - Dienste laufen, Hosts vertrauen einander, Login ist korrekt ...)Remotezugriff mit Powershell und Jenkins

Allerdings, wenn ich den exakt gleichen Code von einer Jenkins - Instanz ausführen (läuft auf der gleichen Maschine, wo ich getestet) Ich bekomme eine PSSessionStateBroken Verbindungsfehler,. (Kein vollständiger Fehler, weil es in Deutsch auf meinem Gerät ist.)

Ich nehme an, dass Jenkins Powershell anders verwendet oder hat andere Powershell/Winrm-Einstellungen oder unzureichende Berechtigungen. Irgendwelche Ideen?

$computer = "<some ip>" 
$user = "Administrator" 
$password = "<secretpassword>" 
$securepassword = ConvertTo-SecureString -String $password -AsPlainText -Force 
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $securepassword 
Invoke-Command -ComputerName $computer -ScriptBlock { Get-ChildItem C:\ } -Credential $cred 

Edit: Managed es zu beheben, indem jenkins Dienst als Administrator ausgeführt wird. Funktioniert für mich, fühlt sich aber nicht richtig an ...

Antwort

1

Verfügt Ihr Jenkins-Serviceaccount berechtigt, sich remote am Zielcomputer anzumelden?

Ich würde ProcMon verwenden, um das Zielsystem zu beobachten, wenn vom Administratorkonto und vom regulären Dienstkonto zugegriffen wird. Sie werden einen Unterschied sehen, und ich wette, es wird offensichtlich sein! Viel Glück!

3

Seit März 2014 installiert Jenkins den Jenkins-Dienst, der als LocalSystem-Benutzer ausgeführt werden soll (d. H. NT AUTHORITY\SYSTEM). Das LocalSystem-Konto accesses the network using the computer account.

Beispiel: Jenkins auf einem Host mit dem Namen JENKINSSERVER stellt eine Verbindung zu Remotecomputern her, die das Computerkonto MYDOMAIN\JENKINSSERVER$ in der Active Directory-Domäne MYDOMAIN verwenden.

Das heißt, Sie müssen das MYDOMAIN\JENKINSSERVER$ Konto als Mitglied der BUILTIN\Administrators lokale Gruppe auf dem TARGETSERVER hinzuzufügen:

NET LOCALGROUP "Administrators" "MYDOMAIN\MYSERVER$" /add

Caveat Emptor: Dies gewährt einen Code als Localservice oder Network auf die Ausführung MYSERVER-Host zum Ausführen von Remote-Befehlen unter TARGETSERVER als Administrator. Es kann besser sein, einen bestimmten Domänenbenutzer nur für diesen Dienst zu erstellen, um die Administratorrechte auf den einzelnen Jenkins-Dienst zu beschränken.