PortChecker in Powershell

Bei der Einrichtung von neuen Programmen, ist meistens ein Port nötig. Um prüfen zu können, ob ein Port von einem Host erreichbar ist und nicht von einer Firewall blockiert wird, kann dieses einfache Skript helfen. Das Skript kann mit mehreren Hostnamen und Ports aufgerufen werden.

function portChecker {
  param (
    [Parameter(Mandatory=$true, ParameterSetName="Multi")]
    [System.string[]]
    $Hosts,
    [Parameter(Mandatory=$true, ParameterSetName="Multi")]
    [System.string[]]
    $Ports
  )

  foreach ($Client in $Hosts) {
    "`n${Client}:"
    "---------------"

    foreach ($Port in $Ports) {
      $Socket = New-Object Net.Sockets.TcpClient
      $ErrorActionPreference = 'SilentlyContinue'
      $Socket.ReceiveTimeout = 3000;
      $Socket.Connect($Host, $Port)
      $ErrorActionPreference = 'Continue'

      if ($Socket.Connected) {
        "{0,4:#} {1}" -f $Port, ": open"
        $Socket.Close()
      } else {
        "{0,4:#} {1}" -f $Port, ": closed or filtered"
      }

      $Socket.Dispose()
      $Socket = $null
    }
  }
}