Wie kann ich in PowerShell auf remote Computer zugreifen und Befehle ausführen?
- Einleitung
- Voraussetzungen für PowerShell-Remoting
- Aktivierung von PowerShell-Remoting
- Verbindung zum Remote-Computer herstellen
- Authentifizierung und Sicherheitsaspekte
- Alternative Methoden: CIM-Session und PsExec
- Zusammenfassung
Einleitung
PowerShell bietet leistungsstarke Funktionen, um administrativ auf entfernte Computer zuzugreifen und dort Befehle auszuführen. Dies ist besonders nützlich in Netzwerken zur zentralen Verwaltung mehrerer Rechner. Dabei kommen hauptsächlich Remoting-Techniken zum Einsatz, insbesondere PowerShell-Remoting, das auf dem WS-Management-Protokoll basiert.
Voraussetzungen für PowerShell-Remoting
Bevor man Remote-Befehle ausführen kann, müssen einige Voraussetzungen erfüllt werden. Die Remoting-Funktion muss auf dem Zielrechner aktiviert sein. Unter moderneren Windows-Versionen wie Windows 10 oder Windows Server 2016 ist dies meist standardmäßig der Fall, kann aber mit dem Befehl Enable-PSRemoting -Force manuell eingerichtet werden. Zudem sollten die notwendigen Firewall-Regeln diese Verbindung zulassen.
Aktivierung von PowerShell-Remoting
Um auf einem Remote-Computer PowerShell-Remoting zu aktivieren, startet man dort eine PowerShell-Konsole mit Administratorrechten und führt den Befehl Enable-PSRemoting -Force aus. Das aktiviert den Dienst WinRM (Windows Remote Management), richtet Listener ein und passt die Firewall an. Wenn man auf mehreren Computern Remoting aktivieren möchte, kann man dies auch per Gruppenrichtlinie oder einem Deployment-Tool automatisieren.
Verbindung zum Remote-Computer herstellen
Mit PowerShell kann man verschiedene Methoden für Remotezugriffe nutzen. Die gängigsten sind Invoke-Command und eine interaktive Remotesitzung mit Enter-PSSession. Mit Invoke-Command kann man direkt einen Befehl oder ein Skriptblock an den oder die Zielcomputer senden und die Ausgabe zurückerhalten. Beispiel: Invoke-Command -ComputerName PC01 -ScriptBlock { Get-Process } ruft auf dem Rechner "PC01" die laufenden Prozesse ab.
Falls man eine interaktive Sitzung haben möchte, um mehrere Befehle abwechselnd einzutippen, verwendet man Enter-PSSession -ComputerName PC01. Nach der Sitzung beendet man diese mit Exit-PSSession.
Authentifizierung und Sicherheitsaspekte
Standardmäßig verwendet PowerShell-Remoting integrierte Windows-Authentifizierung (Kerberos), was in Domänennetzwerken gut funktioniert. Wenn sich Quell- und Zielcomputer allerdings in verschiedenen Arbeitsgruppen befinden oder über das Internet kommunizieren, muss man eventuell Credentials explizit übergeben und eventuell HTTPS für sichere Verbindungen konfigurieren. Beispiel für die Übergabe von Credentials bei Invoke-Command:
$cred = Get-CredentialInvoke-Command -ComputerName PC01 -ScriptBlock { Get-Service } -Credential $credWichtig ist, dass man das Sicherheitsmodell beachtet und die Firewalleinstellungen so konfiguriert, dass nur berechtigte Benutzer zugreifen können.
Alternative Methoden: CIM-Session und PsExec
Neben PowerShell-Remoting gibt es weitere Möglichkeiten, Remote-Befehle auszuführen. Die CIM-Session (Common Information Model) bietet Zugriff auf Managementdaten, z.B. mit New-CimSession. Außerdem kann man auch Tools wie PsExec von Microsoft Sysinternals nutzen, um Befehle auf entfernten Rechnern auszuführen, allerdings ist dies kein nativer PowerShell-Weg.
Zusammenfassung
Der Standardweg in PowerShell, um auf Remote-Computer zuzugreifen und Befehle auszuführen, ist PowerShell-Remoting. Hierzu muss auf den Zielcomputern der Dienst aktiviert sein (per Enable-PSRemoting). Anschließend nutzt man Befehle wie Invoke-Command für einzelne Kommandos oder Enter-PSSession für interaktive Sitzungen. Dabei sind Authentifizierung und Firewall-Regeln wichtige Sicherheitsaspekte. Für umfassendere Szenarien sollten zusätzliche Konfigurationen berücksichtigt werden.