# PowerShell Remoting (WinRM): Enterprise-Skalierung & Security

TL;DR / Management Summary Während PSRemoting auf dem Client (Artikel 473) meist für Ad-hoc Support genutzt wird, ist es auf dem Server die primäre Management-Schnittstelle. Senior Admins nutzen Invoke-Command, um identische Konfigurationen auf ganze Cluster auszurollen. Sicherheit wird durch Kerberos constrained delegation und den Verzicht auf Passwörter im Klartext erreicht. PSRemoting ist die Voraussetzung für moderne Infrastruktur-Automatisierung (IaC).


# 1. Einführung & Architektur

Die Multi-Server-Maschine.

WinRM ist der Microsoft-Standard für das Management von Hardware und Software über das Netzwerk. Es nutzt den WS-Management (WS-Man) Standard (SOAP over HTTP/HTTPS).

# Warum PSRemoting statt RDP?

  1. Performance: Objekte statt Pixel. Eine Session verbraucht ca. 20-50 MB RAM, ein RDP-Login 500 MB+.
  2. Skalierbarkeit: Sie können 100 Server gleichzeitig abfragen.
  3. Automatisierung: Ergebnisse kommen als durchsuchbare Objekte zurück, nicht als Text-Logs.

# 2. Server-spezifische Konfiguration

Härtung für das Datacenter.

# HTTPS erzwingen

In einer Enterprise-Umgebung (besonders bei Cross-Domain Zugriffen) ist ein SSL-Zertifikat für WinRM Pflicht.

# Listener auf Port 5986 mit Domain-Zertifikat erstellen
$Cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Subject -like "*$env:COMPUTERNAME*" }
New-Item -Path WSMan:\Localhost\Listener -Transport HTTPS -Address * -CertificateThumbprint $Cert.Thumbprint

# Die TrustedHosts Falle

Vermeiden Sie Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'. Dies untergräbt das Kerberos-Vertrauensmodell. Nutzen Sie stattdessen Zertifikate oder DNS-Einträge.


# 3. Deep Dive: Kerberos Delegierung (Double-Hop)

Die Reise der Identität.

Das größte Problem in großen Umgebungen:

  1. Admin verbindet sich zu Server A.
  2. Script auf Server A soll Daten von Server B holen.
  3. Fehler: “Access Denied” auf Server B (Credential-Verlust).

# Die Lösung: Resource-Based Constrained Delegation (RBCD)

Dies erlaubt es einem Server, die Identität des Users gezielt an einen anderen Dienst weiterzugeben.

# Erlaubt ServerA die Identität des Users an den SMB-Dienst von ServerB weiterzugeben
$ServerA = Get-ADComputer -Identity "ServerA"
Set-ADComputer -Identity "ServerB" -PrincipalsAllowedToDelegateToAccount $ServerA

# 4. Day-2 Operations: Skalierung mit Fan-Out

1 zu n Verbindungen.

# Das Session-Management

Anstatt ständig neue Verbindungen aufzubauen, halten wir Sessions offen:

# Sessions vorbereiten
$ClusterNodes = "NODE01", "NODE02", "NODE03"
$Sessions = New-PSSession -ComputerName $ClusterNodes

# Befehl an alle schicken (Parallel!)
Invoke-Command -Session $Sessions -ScriptBlock { Get-Service VMMS }

# Sessions später schließen
Remove-PSSession $Sessions

# 5. Troubleshooting & “War Stories”

Wenn der Link bricht.

# Top 3 Fehlerbilder

  1. Symptom: “WinRM cannot process the request. The server is not configured…”.

    • Ursache: Der SPN (Service Principal Name) für WinRM fehlt im AD.
    • Lösung: setspn -s HTTP/ServerName ServerName ausführen.
  2. Symptom: Massive Latenz bei Enter-PSSession.

    • Ursache: DNS-Reverse Lookup Fehler am DC.
    • Lösung: PTR-Zonen im DNS prüfen (Artikel 493).
  3. Symptom: Out-of-Memory bei großen Skripten.

    • Lösung: MaxMemoryPerShellMB via WinRM-Config erhöhen (Standard ist oft nur 256 MB).

# “War Story”: Der “Auto-Admin” Loop

Ein Admin schrieb ein Skript, das via Invoke-Command auf 200 Servern den DNS-Dienst neustarten sollte. Das Problem: Das Skript lief auf einem Domain Controller. Als der DNS-Dienst auf den DCs gestoppt wurde, konnte Invoke-Command die restlichen Namen nicht mehr auflösen. Das Skript verlor die Verbindung und hängte sich auf. Lehre: Bei Änderungen an Kern-Infrastruktur (DNS, DHCP, IP) immer via IP-Adresse statt Hostname verbinden und Timeouts großzügig setzen.


# 6. Monitoring & Alerting

Remote-Management auditieren.

# PowerShell Script Block Logging

Aktivieren Sie via GPO das Script Block Logging (Event ID 4104). Es schreibt den exakten Code-Inhalt jedes ausgeführten Befehls ins Log. Unverzichtbar für die Forensik nach einem Einbruch.


# 7. Fazit & Empfehlung

PowerShell Remoting ist die Fernbedienung für das moderne RZ.


# Anhang: Cheatsheet

Aufgabe Befehl
Remoting aktivieren Enable-PSRemoting -Force
Port prüfen Test-NetConnection -ComputerName <Name> -Port 5985
Interaktive Shell Enter-PSSession -ComputerName <Name>
Skript-Datei fernstarten Invoke-Command -ComputerName <Name> -FilePath "C:\script.ps1"

# Referenzen