Comment vérifier les ports ouverts à l'aide de powershell?

Je voudrais écrire un script pour vérifier radom IP ou le nom d'hôte pour voir si les ports sont ouverts. Voici ce que j'ai jusqu'à présent. Les scripts nom est checkports.

foreach ($xhost in $computername){
    Write-Host $xhost
    foreach ($port in $ports) {
        $Socket = New-Object System.Net.Sockets.TCPClient            
        $Connection = $Socket.BeginConnect($xhost,$port,$null,$null) 

        $Connection.AsyncWaitHandle.WaitOne(5000,$false) | out-null

        if ($Connection -eq $true)
            { write-host = "$xhost port $port is open" }
        else
            { write-host = "port $port is closed" }      

        $Socket.EndConnect($Connection)
        $Socket.Close()
   }
}

Je voudrais les valeurs d'entrée de la manière suivante:
.\checkport '192.186.1.5'
ou
'192.168.1.5', '192.168.1.105', 192.168.1.110' | checkport

Il ne semble pas être la lecture de l'adresse IP ou l'affichage des résultats.

Je me demandais si quelqu'un peut il pourrait me montrer ce que je fais de mal avec ce script?

  • Ceci et ceci peut être d'une certaine aide.
  • Pouvez-vous montrer à votre bloc param pour le script?
  • 1. La valeur de retour de WaitOne est vous dire si l'attente terminée ou a expiré: mais vous êtes de le jeter. 2. Pourquoi ne pas utiliser le blocage Socket.Connect donné que vous allez à bloquer?
  • Voici l'essentiel avec un script powershell qui vérifie les ports ouverts gist.github.com/dhcgn/44acdddbaea24d2f367d85a00389368c