In einem älteren Blogartikel (Testen von Netzwerk-Ports) habe ich beschrieben, wie man mit dem Tool "Telnet" prüfen kann, ob die Verbindung zu einem entfernten System auf einem bestimmten TCP/IP-Port möglich ist. Dort steht auch zu lesen, dass seit Windows 7 der Telnet-Client nicht mehr im Standard-Installationsumfang von Windows vorhanden ist und manuell hinzugefügt werden muss.

Seit Windows 8.1 beziehungsweise Windows Server 2012 R2 ist ja nun das Windows Management Framework 4.0 und damit die PowerShell 4.0 mit an Bord und damit auch wieder eine ganze Menge neuer Module und Cmdlets. Eins davon ist das neue Cmdlet Test-NetConnection (oder der - für interaktive Anwendung sehr viel kürzere und praktischere - Alias tnc), mit dem jede Menge "klassischer" Befehle aus dem Bereich der Netzwerkkonnektivität wie Ping, Tracert und eben auch Telnet ersetzt werden können.

Im einfachsten Fall wird durch simplen Aufruf von Test-NetConnection ohne weitere Parameter geprüft, ob eine Verbindung zum Internet besteht. Dabei wird versucht den Microsoft-Edge-Server internetbeacon.msedge.net zu kontaktieren.

b2ap3_thumbnail_Test-NetConnection01.png

Es ist übrigens interessant, dass bei diesem Vorgang ein anderer Server kontaktiert wird, als bei der "Network Awareness", wie im Artikel "Feststellen des Online Status" beschrieben.

Natürlich kann man auch andere Systeme anpingen, indem man Test-NetConnection mit dem -ComputerName Parameter aufruft und darin den Ziel-Host angibt, wobei dieser Parameter der Default-Parameter ist und der Parameter-Name daher weggelassen werden kann. Und da die PowerShell ja grundsätzlich objektorientiert arbeitet, ist das Ergebnis des Cmdlets natürlich auch wieder ein Objekt mit Methoden und Eigenschaften. Beispielsweise hat die Eigenschaft RemoteAddress im Erfolgsfall im zurückgegebenen Objekt etliche Informationen über die Netzwerkeigenschaften des kontaktierten Hosts.

b2ap3_thumbnail_Test-NetConnection02.png

Schließlich kann man über den Parameter -InformationLevel mit dem zugewiesenen Wert Quiet einfach testen, ob der entfernte Host per Ping erreichbar ist, da nur True oder False zurückgeliefert werden.

Neben einem simplen Anpingen eines Remote-Systems kann auch geprüft werden, ob ein bestimmter Port erreichbar ist. Dazu übergibt man dem Cmdlet entweder den Parameter -CommonTCPPort, der einen der vier Werte "SMB", "HTTP", "RDP" oder "PING" annehmen kann oder, für weniger gängige Werte wie beispielsweise den FrontRange Transport Layer, den interessierenden Port im Parameter -Port.

b2ap3_thumbnail_Test-NetConnection03.png

 b2ap3_thumbnail_Test-NetConnection04.png

Wie im obigen Fall zu sehen ist, sollte mansich im Übrigen nicht unbedingt durch die Warnung irritieren lassen, dass der Ping-Test fehlgeschlagen ist, weil der Port wie hier nicht erreichbar war. Im ersten Beispiel wird versucht eine Verbindung auf dem RDP-Port 3389 herzustellen (was fehlschlägt), im zweiten Beispiel wird erfolgreich eine Verbindung auf dem Standardport 5052 des FrontRange Transport Layer etabliert, wie man am Wert True in der Eigenschaft "TcpTestSucceeded" erkennen kann.

Schließlich kann ein Pendant zum Tracert-Befehl kann mit dem Parameter -Tracert erreicht werden.

b2ap3_thumbnail_Test-NetConnection05.png

Übrigens ist Test-NetConnection leider unter Windows 7 oder Windows Server 2008 R2 auch dann nicht verfügbar, wenn auf diesen Plattformen das Windows Management Framework 4.0 nachinstalliert wird.