Netzwerkprobleme mit der PowerShell lösen So testen Sie Verbindungen und verfolgen Routen nach

Autor / Redakteur: Thomas Joos / Dipl.-Ing. (FH) Andreas Donner

Mit PowerShell-Cmdlets und Skripts können Netzwerkprobleme eingegrenzt und behoben werden. Es lohnt sich, die Möglichkeiten der verschiedenen Netzwerk-Cmdlets zu kennen, um Fehlerquellen zu erkennen und Probleme zu lösen.

Firma zum Thema

Zum Testen von Verbindungsproblemen müssen es nicht immer "ping" und "tracert" sein – oft leistet die PowerShell hier viel bessere Dienste.
Zum Testen von Verbindungsproblemen müssen es nicht immer "ping" und "tracert" sein – oft leistet die PowerShell hier viel bessere Dienste.
(Bild: Joos / Microsoft)

Wenn Netzwerkverbindungen nicht funktionieren oder Pakete verloren gehen und dadurch die Leistung von Servern und Workloads einbricht, ist die PowerShell ein guter Weg, um Fehler zunächst einzugrenzen. Häufig können Fehler auf diesem Weg sogar behoben oder zumindest zu dem Gerät nachverfolgt werden, bei dem sie entstehen.

Get-NetIPAddress und Get-NetIPConfiguration

Für eine Nachverfolgung von Datenpaketen spielen natürlich auch die lokalen IP-Adressen des Computers eine Rolle, von dem die Befehle ausgeführt werden. Informationen zu den lokalen IP-Adressen werden mit „Get-NetIPAddress | Format-Table“ angezeigt. Informationen zu den verbauten Netzwerkadaptern werden mit „Get-NetAdapter“ angezeigt. Um die Netzwerkgeschwindigkeit eines Adapters anzuzeigen, kann „Get-NetAdapter | select interfaceDescription, linkSpeed“ verwendet werden. Dadurch wird schnell ersichtlich, ob Leistungsprobleme durch eine fehlerhafte Verbindung verursacht werden.

Bildergalerie
Bildergalerie mit 5 Bildern

Um die IP-Konfiguration der verschiedenen Netzwerkschnittstellen anzuzeigen kann „Get-NetIPConfiguration -All“ verwendet werden. Wer noch mehr Informationen benötigt, ruft diese mit „Get-NetIPConfiguration -Verbose“ ab.

Test-NetConnection: Routen nachverfolgen und Verbindungen überprüfen

In der Befehlszeile wird häufig auf „TraceRT“ oder „Pathping“ gesetzt, um Routen nachzuverfolgen. Die PowerShell-Cmdlets in diesem Bereich bieten aber einige Vorteile. Zunächst werden hier wesentlich mehr Informationen angezeigt als in der Befehlszeile. Vor allem bei der Behebung von komplexen Netzwerkproblemen spielt das eine wichtige Rolle. Dazu kommt die Möglichkeit mit Pipelines mehrere Cmdlets miteinander zu verknüpfen, um Fehler zu filtern.

Um Netzwerkverbindungen zu einem Netzwerkgerät zu prüfen, wird in der PowerShell zunächst auf „Test-NetConnection“ gesetzt. Mit „Get-Help Test-NetConnection -Detailed“ wird eine Hilfe für das Cmdlet angezeigt.

Ein erster Verbindungstest wird mit „Test-NetConnection <IP-Adresse>“ durchgeführt, zum Beispiel „Test-NetConnection 192.168.1.1“. Der Befehl zeigt zunächst Namen und IP-Adresse des Netzwerkgerätes an, die verwendete Netzwerkschnittstelle auf dem Computer sowie die Quell-IP-Adresse. Die erfolgreiche Ping-Verbindung wird genauso angezeigt, wie die Antwortzeit. Für eine erste Analyse sind diese Informationen auf jeden Fall hilfreich.

Erweiterte Verbindungsinformationen anzeigen

Um mehr Informationen zu erhalten, kann das Cmdlet mit Parametern erweitert werden. Mit „Test-NetConnection www.microsoft.de -InformationLevel Detailed“ werden ausführlichere Informationen für die Verbindung angezeigt. Hier können auch Routen und die Verbindungen genauer gemessen werden. Neben Namen und Adressen werden hier auch die Hops angezeigt.

Um die Route der Pakete nachzuverfolgen steht der Parameter „-TraceRoute“ zur Verfügung, zum Beispiel mit „Test-NetConnection www.microsoft.de -TraceRoute“. Hier zeigt der Befehl alle Hops an, die das Paket durchläuft, sowie die Ping-Informationen dazu. Eine noch genauere Analyse von Routen kann mit den folgenden Parametern von Test-NetConnection erreicht werden:

Test-NetConnection -ComputerName www.contoso.com -DiagnoseRouting -InformationLevel Detailed

Get-NetRoute: Routingtabelle in der PowerShell anzeigen

In diesem Zusammenhang kann natürlich auch die lokale Routingtabelle eine Rolle spielen. Diese kann in der PowerShell mit dem Cmdlet „Get-NetRoute“ angezeigt werden. Ausführlichere Informationen werden mit „Get-NetRoute | Format-List -Property *“ angezeigt. Sollen nur IPv6-Routen angezeigt werden, ist der Befehl „Get-NetRoute -AddressFamily IPv6“ sinnvoll. Das funktioniert natürlich auch für IPv4. Um den nächsten Hop der Standard-Router anzuzeigen wird „Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Select-Object -ExpandProperty "NextHop"“ verwendet.

Get-NetTCPConnection: Ports und TCP-Verbindungen testen

In der PowerShell kann auch überprüft werden, ob die Verbindung zu einem bestimmten Port aufgebaut werden kann. Dadurch können Fehler gut eingegrenzt werden, da hier genau getestet werden kann, ob eine Verbindung vom Quell- zum Ziel-Computer über einen bestimmten Port funktioniert:

Test-NetConnection www.microsoft.de -Port 80 -InformationLevel "Detailed"Test-NetConnection -ComputerName "www.contoso.com" -ConstrainInterface 5 -DiagnoseRouting -InformationLevel "Detailed"

Um aktuelle TCP-Verbindungen auf dem Computer anzuzeigen, wird „Get-NetTCPConnection“ verwendet. Hier sind auch die geöffneten Ports zu sehen.

Get-NetFirewallRule: Windows-Firewall-Regeln überwachen

Wenn Netzwerkverbindungen nicht funktionieren, kann es auch daran liegen, dass die Windows-Firewall auf einem Computer oder Server nicht korrekt konfiguriert ist. Hier kann mit der PowerShell eine Anzeige der vorhandenen Regeln angezeigt werden, inklusive der verwendeten Quell- und Ziel-IP-Adressen:

Get-NetFirewallRule -Action Allow -Enabled True -Direction Inbound |Format-Table -Property Name,@{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},@{Name='LocalPort';Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}},@{Name='RemotePort';Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},@{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},Enabled,Profile,Direction,Action

Mehr zu diesen Möglichkeiten ist auf der Seite „Configuring Windows Firewall Rules with PowerShell“ zu finden.

Um Fehler mit der Windows-Firewall auf einem Computer zu beheben, kann es notwendig sein, kurz die Windows-Firewall zu deaktivieren, um zu überprüfen, ob Verbindungsprobleme durch die Windows-Firewall verursacht werden. Auch dieser Vorgang kann in der PowerShell durchgeführt werden:

Set-NetFirewallProfile -Enabled False

Natürlich sollte die Firewall danach schnellstmöglich wieder aktiviert werden. Auch das kann in der PowerShell durchgeführt werden:

Set-NetFirewallProfile -Enabled True

Die einzelnen Profile können auch unabhängig voneinander deaktiviert werden:

Windows Firewall Domänen-Profil: Set-NetFirewallProfile -Profile Domain -Enabled FalseWindows Firewall Privates Profil: Set-NetFirewallProfile -Profile Private -Enabled FalseWindows Firewall Öffentliches Profil: Set-NetFirewallProfile -Profile Public -Enabled False

(ID:47006484)

Über den Autor

 Thomas Joos

Thomas Joos

Freiberuflicher Autor und Journalist