WinRM-Ports: Standardeinstellungen und Anpassungsanleitung

WinRM und PowerShell Remoting sind wichtige Funktionen für das Verwalten von entfernten Windows-Computern. Ähnlich wie andere Dienste lauscht WinRM unter bestimmten Umständen auf bestimmten Ports. In diesem Tutorial erfahren Sie, welche WinRM-Ports verwendet werden und wie Sie sie bei Bedarf ändern können.

Verwandt: PowerShell Remoting: Der ultimative Leitfaden

Der WinRM-Listener

Einer der wichtigsten Teile von WinRM (und den Ports, auf denen es läuft) ist der WinRM-Listener.

Der WinRM-Listener ist im Grunde ein Webserver. Er kommuniziert über HTTP und HTTPS und in der Zeit vor Windows 7 verwendete er standardmäßig die gleichen Ports 80 und 443 wie die meisten Webserver.

Der Listener läuft als Dienst auf Ihrem Computer und wartet darauf, dass Verbindungen hergestellt werden, ähnlich wie ein normaler Webserver.

A WinRm listener can listen two different ways; HTTP or HTTPS. The WinRM port for HTTP is 5985 while the WinRm port for HTTPS is 5986, by default.

  • HTTP – Port 5985
  • HTTPS – Port 5986

Verwandt: PowerShell Remoting: Der ultimative Leitfaden

Fehler bei der Verbindung mit falschen Ports

Und wenn Sie die Firewall-Regel nicht hinzufügen, wenn Sie den Port ändern, erhalten Sie dieselbe Meldung, auch wenn Sie den Port angeben.

Ändern der WinRM-Ports

Obwohl Microsoft empfiehlt, aus Kompatibilitäts- und Benutzerfreundlichkeitsgründen bei den standardmäßigen Hörports zu bleiben, können Sie sie ändern. Dies kann hilfreich sein, wenn es Konflikte mit den standardmäßigen Ports oder Einschränkungen durch eine Firewall gibt, die die Verwendung dieser Ports blockiert.

Vielleicht haben Sie ein System eingerichtet, das so konfiguriert ist, dass es über benutzerdefinierte Ports eine Verbindung zu WinRM herstellt. Wenn Sie versuchen, wie gewohnt eine Verbindung herzustellen, erhalten Sie folgende Fehlermeldung:

Failed WinRM connection due to wrong port

Wenn dies der Fall ist, ist es an der Zeit, den WinRM-Port auf der Serverseite zu ändern!

Um die WinRM-Ports zu ändern, müssen Sie zunächst herausfinden, ob bereits ein Dienst auf diesen Ports lauscht.

Bestehende Verbindungen verfolgen

Der einfachste Weg, um herauszufinden, welche Ports auf einem Windows-Computer verwendet werden, besteht darin, das Tool netstat zu verwenden. Netstat überprüft alle aktiven Ports auf Ihrem System und gibt bei aktiven Verbindungen die Quell- und Ziel-IP sowie den verwendeten Port zurück.

Um lauschende Ports vor der Änderung der WinRM-Ports zu ermitteln, führen Sie netstat -aon aus. Die Schalter -aon:

  • zeigen alle aktiven Verbindungen an (a)
  • zeigen die Prozess-ID für den Prozess an, der die Verbindung geöffnet hat (o)
  • versuchen nicht, DNS-Namen der Ziel-IPs aufzulösen (n)
Running netstat to find listening connections

Wenn beispielsweise ein Webserver auf Port 80 lauscht, sehen Sie eine Zeile, in der die lokale Adresse mit :80 unter der Spalte Lokale Adresse endet. In dieser Zeile sehen Sie die PID oder Prozess-ID, die für die Verbindung verwendet wird.

Sobald Sie die PID kennen, können Sie die PID verwenden, um den Prozessnamen mithilfe des PowerShell-Cmdlets Get-Process zu finden.

Running Get-Process to find process name

In diesem Fall können Sie jedoch oben sehen, dass der Prozessname einfach „System“ ist. Dies bedeutet, dass der Prozess stark in das Betriebssystem integriert ist und wahrscheinlich in Windows eingebaut ist.

Einstellen der WinRM-Kompatibilitätsports

WinRM verfügt über eine Funktion namens „Kompatibilitätsports“. Kompatibilitätsports dienen der Abwärtskompatibilität mit einigen Legacy-Systemen, die nur auf den Ports 80 für HTTP und 443 für HTTPS funktionieren. Wenn Sie WinRm so konfigurieren möchten, dass es auf diesen Ports lauscht, aktivieren Sie die Kompatibilitätslistener.

Sobald Sie sicher sind, dass auf den Ports 80 und 443 nichts anderes läuft, legen Sie die WSMan-Listener so fest, dass sie die Kompatibilitätsports verwenden (80 für HTTP und 443 für HTTPS).

Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener -Value $true
 Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener -Value $true

Einstellen von WinRM zum Lauschen auf einem beliebigen Port

Wenn Sie aus irgendeinem Grund WinRM so konfigurieren müssen, dass es auf einem nicht standardmäßigen Port lauscht, können Sie dies auch tun. Gehen Sie dazu wie folgt vor:

  1. Finden Sie den Listener-Namen. Sie können dies tun, indem Sie alle WinRM-Listener mit dem Get-Item-Cmdlet auflisten. Der folgende Befehl listet alle (*) derzeit installierten Listener auf.
Get-Item WSMan:\localhost\Listener*
Getting all existing WinRm listeners

2. Konfigurieren Sie anschließend mit dem oben angezeigten Listener-Namen jeden Listener mit Set-Item, indem Sie den Pfad des Listeners und die Portnummer angeben, auf die er geändert werden soll.

Set-Item WSMan:\localhost\Listener\\Port -Value 

3. An diesem Punkt lauschen die WinRM-Listener auf den richtigen Ports. Die Windows-Firewall blockiert wahrscheinlich Verbindungen zu diesen Ports. Sie müssen diese Ports öffnen. Führen Sie dazu den folgenden Befehl aus. Die New-NetFirewallRule unten erstellt eine Windows-Firewall-Regel, um alle eingehenden TCP-Verbindungen zu einem benutzerdefinierten Port zuzulassen.

$FirewallParam = @{
     DisplayName = 'Custom WinRM Port Rule'
     Direction = 'Inbound'
     LocalPort = 
     Protocol = 'TCP'
     Action = 'Allow'
     Program = 'System'
 }
 New-NetFirewallRule @FirewallParam

Verwandt: Windows Firewall deaktivieren: Entdecken Sie die vielen Möglichkeiten

Wenn Sie den entsprechenden Windows-Firewall-Port nicht geöffnet hätten, würden Sie beim Versuch der Verbindung folgende Meldung erhalten:

Failed WinRM connection due to Windows firewall

Verbindung zu einem benutzerdefinierten Port mit PSRemoting

Jetzt, da Sie WinRM erfolgreich auf dem WinRM-Server eingerichtet und konfiguriert haben, müssen Sie die Verbindung mit dem WinRM-Client testen. Dafür ist nur ein zusätzlicher Parameter erforderlich: Port.

Verwenden Sie bei Verwendung von PSRemoting-Befehlen wie Invoke-Command oder Enter-PSSession den Parameter Port und den erfolgreich eingerichteten Port, um eine Verbindung herzustellen.

Enter-PSSession -ComputerName <hostname> -Port 1111
Successful WinRm connection

Verwandt: Invoke-Command: Der beste Weg, um Remote-Code auszuführen

Source:
https://adamtheautomator.com/winrm-port/