PowerShell Remoting ermöglicht es PowerShell Skripte auf entfernten Computern ausführen. Innerhalb einer Domäne ist dies relativ schnell und unkompliziert möglich. Die entsprechenden Ports müssen Freigegeben sein und das Windows Remote Management (winrm) muss konfiguriert sein. Die Authentifizierung findet über Kerberos statt. Beispiel zum Erstellen einer PowerShell Remote Sitzung:
$session = new-pssession –computername <DNS-Name>
Enter-pssession $session
Klappt die Verbindung nicht sollte sichergestellt werde da auf dem Zielsystem das Windows Remote Management konfiguriert ist. Über den Befehl „winrm qc“ wird die Standardkonfiguration initialisiert. Der Parameter „qc“ steht für „Quick Config“. Neben der Konfiguration des Windows Remote Managements sollte zudem der Verkehr auf den Ports 5985 (HTTP) und/oder 5986 (HTTPS) gestattet werden.
Ist ein anderer Port für die Kommunikation gewünscht kann dieser über „set-item wsman:\localhost\listener*\port –value <Portnummer>“ konfiguriert werden. Es ist zu beachten das bei dem Erstellen einer PSRemoting Sitzung dann auch der Paramter „-Port“ mit angeben werden muss:
$session = new-pssession –computername <DNS-Name> -Port <Portnummer>
Damit PowerShell Remoting auch über Domänengrenzen hinaus funktioniert ist auf dem Client Computer eine „Trusted Host“ Liste zu definieren.
Set-Item wsman:\localhost\client\TrustedHosts -Value * -force
Der hier mit „*“ deklarierte Parameter kann auch eine „,“ separierte Liste mit Hosts und/oder Domänen sein (z.B.: „server-01.domain.de,*.domain.net“ ). Da wir in diesem Beispiel von einer nicht Vertrauenswürdigen Umgebung ausgehen funktioniert jedoch die Kerberos Authentifizierung zum Remote Host nicht. Damit dies auch funktioniert müssen bei der Verbindung die Credentials mit übergeben werden.
$cred = get-credential
$session = new-pssession –computername <DNS-Name> -authentication negotiate –credential $cred Enter-pssession
Hinweis
Sollen Skripte automatisch und im Hintergrund ausgeführt werden ergibt sich jetzt die Schwierigkeit das Benutzername und Kennwort im Skript verwendet werden. Um nicht bei jedem Aufruf die Credentials eingeben zu müssen könnten diese auch automatisiert übergeben werden. Jedoch muss dazu das Passwort irgendwo hinterlegt werden. Ich versuche solche Dinge wenn möglich zu vermeiden. Sollte es wie in meinem Fall nur eine geringe Anzahl an Hosts geben die erreicht werden müssen können diese im Windows Credential Manager hinterlegt werden. Dadurch wird vermieden das Kennwörter irgendwo in Klartext abgelegt werden müssen. |