PowerShell Remoting Cheatsheet

5 Kern-Cmdlets
Die wichtigsten Cmdlets für PowerShell Remoting: Enable-PSRemoting · Enter-PSSession · Invoke-Command · New-PSSession · TrustedHosts PowerShell Remoting ermöglicht die Ausführung von Befehlen auf entfernten Computern – interaktiv oder als Skript. Diese Cmdlets sind unverzichtbar für die Verwaltung von Server-Farmen und verteilten Systemen.

Enable-PSRemoting – Remoting aktivieren

Enable-PSRemoting [-Force]
Enable-PSRemoting -Force

Enable-PSRemoting aktiviert PowerShell Remoting auf einem Computer. Dies umfasst das Starten des WinRM-Dienstes, das Setzen der Firewall-Regeln und die Konfiguration der WS-Management-Einstellungen.

Wichtige Optionen

Option Beschreibung
-Force Überspringt alle Bestätigungsabfragen
-SkipNetworkProfileCheck Erlaubt Remoting auch in öffentlichen Netzwerken
Beispiele
Enable-PSRemoting # Remoting interaktiv aktivieren
Enable-PSRemoting -Force # Ohne Rückfragen aktivieren
Enable-PSRemoting -SkipNetworkProfileCheck # Auch in öffentlichen Netzen
Tipp: Nach der Aktivierung können Sie mit Test-WSMan prüfen, ob der WinRM-Dienst auf einem entfernten Computer erreichbar ist.

Enter-PSSession – Interaktive Remotesitzung

Enter-PSSession [-ComputerName] Name [-Credential]
Enter-PSSession -ComputerName Server01

Enter-PSSession startet eine interaktive PowerShell-Sitzung auf einem entfernten Computer. Alle danach eingegebenen Befehle werden auf dem Remote-System ausgeführt.

Häufige Optionen

Option Beschreibung
-ComputerName Name des Zielcomputers
-Credential Anmeldeinformationen für die Sitzung
-Session Verwendet eine bestehende PSSession
-Port WinRM-Port (Standard: 5985/5986)
Beispiele
Enter-PSSession -ComputerName Server01 # Interaktive Sitzung starten
Enter-PSSession -ComputerName 192.168.1.10 -Credential $cred # Mit Benutzername/Passwort
Exit-PSSession # Sitzung beenden
Typische Ausgabe nach Enter-PSSession:
[Server01]: PS C:\Users\Administrator\Documents>
Tipp: Während einer interaktiven Sitzung sehen Sie den Hostnamen des Remote-Systems in der Eingabeaufforderung. Mit Exit-PSSession oder exit kehren Sie zur lokalen Shell zurück.

Invoke-Command – Befehle remote ausführen

Invoke-Command -ComputerName Name -ScriptBlock { Befehl }
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process }

Invoke-Command führt einen Befehl oder ein Skript auf einem oder mehreren entfernten Computern aus – ohne eine dauerhafte Sitzung zu öffnen.

Häufige Optionen

Option Beschreibung
-ComputerName Ein oder mehrere Zielcomputer (Array)
-ScriptBlock Codeblock mit den auszuführenden Befehlen
-FilePath Pfad zu einem Skript, das ausgeführt werden soll
-Session Verwendet eine bestehende PSSession
-ArgumentList Parameter für den ScriptBlock
-AsJob Führt den Befehl als Hintergrund-Job aus
Beispiele
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Service } # Dienste abfragen
Invoke-Command -ComputerName Server01,Server02 -ScriptBlock { Get-Process | Select Name,CPU } # Auf mehreren Servern
Invoke-Command -ComputerName Server01 -FilePath C:\Scripts\check.ps1 # Lokales Skript ausführen
icm Server01 { Get-Process } # Alias icm
Typische Ausgabe von Invoke-Command:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
812 52 145672 189432 45.32 1234 1 powershell
456 38 98724 112348 12.15 5678 1 chrome
Tipp: Für wiederholte Remote-Ausführungen ist Invoke-Command effizienter als Enter-PSSession, da keine dauerhafte Sitzung aufgebaut wird.

New-PSSession – Persistente Sitzung erstellen

New-PSSession [-ComputerName] Name [-Name] Name
New-PSSession -ComputerName Server01 -Name MeineSitzung

New-PSSession erstellt eine persistente Remotesitzung. Diese kann für mehrere Invoke-Command-Aufrufe wiederverwendet werden – ohne jedes Mal eine neue Verbindung aufzubauen.

Häufige Optionen

Option Beschreibung
-ComputerName Name des Zielcomputers
-Name Eigenen Namen für die Sitzung vergeben
-Credential Anmeldeinformationen für die Sitzung
-SessionOption Zusätzliche Konfigurationen (Timeout, etc.)
Beispiele
$session = New-PSSession -ComputerName Server01 # Sitzung erstellen
Invoke-Command -Session $session -ScriptBlock { Get-Process } # Sitzung verwenden
New-PSSession -ComputerName Server01,Server02 -Name WebServer # Mehrere Sitzungen
Get-PSSession # Alle aktiven Sitzungen anzeigen
Remove-PSSession $session # Sitzung schließen
Typische Ausgabe von Get-PSSession:
Id Name ComputerName State ConfigurationName
1 Session1 Server01 Opened Microsoft.PowerShell
Tipp: Persistente Sitzungen sind ideal für Skripte, die mehrere Remote-Befehle ausführen. Sie sparen die Verbindungsaufbau-Zeit und können den Zustand zwischen den Aufrufen beibehalten.

TrustedHosts – Vertrauenswürdige Hosts

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "Hosts"
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "Server01,Server02"

TrustedHosts ist keine eigenständiges Cmdlet, sondern eine WS-Management-Einstellung. Sie definiert, welche Remote-Computer ohne gegenseitige Authentifizierung (Kerberos) akzeptiert werden – nützlich für Workgroups oder IP-basierte Verbindungen.

Wichtige Konfigurationen

Einstellung Beschreibung
"Server01" Vertraue nur einem bestimmten Host
"Server01,Server02" Mehrere Hosts (kommagetrennt)
"*" Vertraue allen Hosts (unsicher!)
"192.168.1.*" Wildcard für IP-Bereich
Beispiele
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "Server01" # Einen Host vertrauen
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "Server01,Server02,Server03" # Mehrere Hosts
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force # ⚠️ Alle Hosts vertrauen (unsicher!)
Get-Item WSMan:\localhost\Client\TrustedHosts # Aktuelle Einstellungen prüfen
Clear-Item WSMan:\localhost\Client\TrustedHosts # Einstellungen zurücksetzen
Typische Ausgabe von Get-Item WSMan:\localhost\Client\TrustedHosts:
Value : Server01,Server02
PSPath : Microsoft.WSMan.Management\WSMan::localhost\Client\TrustedHosts
⚠️ Warnung: Die Verwendung von "*" als TrustedHosts ist sehr unsicher und sollte nur in abgeschotteten Testumgebungen verwendet werden. Verwenden Sie immer die spezifischen Hostnamen oder IPs.
Tipp: Nach Änderungen an TrustedHosts muss der WinRM-Dienst neu gestartet werden: Restart-Service WinRM.

PowerShell Remoting – Wichtige Konzepte

WS-Management Das Protokoll für PowerShell Remoting (WinRM).
Port 5985 (HTTP) / 5986 (HTTPS)
Kerberos Standard-Authentifizierung im Active Directory.
Kein TrustedHosts nötig
CredSSP Ermöglicht die Übergabe von Anmeldeinformationen.
Für "Double-Hop"-Szenarien
JEA Just Enough Administration – eingeschränkte Remotesitzungen.
Minimalrechte für Benutzer

Quick Summary

Enable-PSRemoting
Remoting aktivieren
Enter-PSSession
Interaktive Sitzung
Invoke-Command
Befehle remote
New-PSSession
Persistente Sitzung
TrustedHosts
Hosts vertrauen
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Service } – Dienste auf Server01 abfragen