Powershell-Kurztipp: Portscan-Funktion hinzufügen

1. Juli 2019

Serveradressen und Ports lassen sich mit der Windows-Powershell in einem „Rutsch“ scannen – passende Funktionen vorausgesetzt.

In der Windows Powershell können die Systembetreuer Server mit dem Cmdlet „Test-NetConnection“ ansprechen. Im Idealfall liefert der jeweilige Server eine entsprechende Antwort, auf diese Weise können die Systembetreuer sicherstellen, dass ein bestimmtes System oder ein Dienst verfügbar ist. Leider lassen sich bei dem Cmdlet „Test-NetConnection“ beim entsprechenden Parameter „-Port“ keine mehrfachen Werte für die Ports angeben. Somit lässt sich pro Abfrage nur eine einzige Portnummer abfragen. Das ist ärgerlich, wenn etwa die Erreichbarkeit unterschiedlicher portscannDienste (etwa Druck-, Datei-, Email- und Webserver) zu Diagnosezwecken geprüft werden soll.

Alternativ zur Powershell stehen den Systembetreuern diverse Port-Scanner-Tools von Drittanbietern zur Verfügung. Hier lassen sich beispielsweise entsprechende TXT-Dateien mit den zu testenden Ports importieren, oder die Ports direkt in der grafischen Oberfläche des Tools eingeben. Doch falls die Administratoren lieber die Windows-Bordmittel einsetzen möchten, muss zunächst ein entsprechender Parameter oder eine passende PS-Funktion erzeugt werden. Das ist etwa mit dem folgenden Skript möglich. So fügen die Systembetreuer eine entsprechende Funktion hinzu, und sehen sich danach in der Lage, gleich mehrere Ports in einem Cmdlet-Aufruf zu scannen:


function Test-Port

{$computer=Read-Host "Computername | IP Address?"

 $port=Read-Host "Port Numbers? Separate them by comma"

 $port.split(',') | Foreach-Object -Process {If (($a=Test-NetConnection $computer -Port $_ -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true) {Write-Host $a.Computername $a.RemotePort -ForegroundColor Green -Separator " ==> "} else {Write-Host $a.Computername $a.RemotePort -Separator " ==> " -ForegroundColor Red}}

 }

Rufen die Systembetreuer nun das neu hinzugefügte Cmdlet „Test-Port“ auf, frägt die Powershell nach dem Servernamen beziehungsweise der IP-Adresse. Zudem lassen sich nun mehrfache Portnummern kommagetrennt angeben. Die Powershell schickt nun entsprechende Anfragen an den jeweiligen Server, und präsentiert im Anschluss das Ergebnis. An dieser Stelle ist es auch möglich, die Ausgabe in eine entsprechende Datei aufzugeben oder für die weitere Verarbeitung in die Windows-Pipeline zu laden.

Florian Huttenloher

Lesen Sie auch