2017-09-21 4 views
1

ich ein paar Zeilen Code geschrieben zu überprüfen, ob ein Port offen ist oder nicht:foreach-Schleife nicht ausgeführt wird die Variable

$ports = @(5353,5672,8080,4443,15672,9200) 

foreach ($port in $ports) 
    { 
    TNC -ComputerName localhost -Port $port -InformationLevel Quiet -WarningAction SilentlyContinue | Tee-Object -Variable CheckPortStatus > $null 
     if ($CheckPortStatus -eq "True") 
      {$status = Write-Host "Open" -ForegroundColor GREEN} 
     else 
      {$status = Write-Host "close" -ForegroundColor RED} 
    echo "the port is $status" 

ich nicht bekommen, warum die Ausgabe ist dies:

enter image description here

Das Skript tatsächlich funktioniert, aber es die Variable ausführen, wenn deklariert und dann ist es nicht die Variable nach dem if/else

Antwort

3

Verwendung Das Write-Host cmdlet nur druckt etwas an die Konsole, es gibt nichts zurück, so dass Sie es nicht $status zuweisen können. Stattdessen sollten Sie etwas tun:

$ports = @(5353,5672,8080,4443,15672,9200) 

foreach ($port in $ports) 
{ 
    TNC -ComputerName localhost -Port $port -InformationLevel Quiet -WarningAction SilentlyContinue | Tee-Object -Variable CheckPortStatus > $null 
    if ($CheckPortStatus -eq "True") 
    { 
     $status = "Open" 
     Write-Host $status -ForegroundColor GREEN 
    } 
    else 
    { 
     $status = "Closed" 
     Write-Host $status -ForegroundColor RED 
    } 

    Write-Host "the port is $status" 
} 

Quote from Jeffrey Snover:

Wenn Sie Powershell-Skripts schreiben oder zu prüfen, würde ich Ihnen mag die Faustregel erinnern:

Die Verwendung von Write-Host ist fast immer falsch.

+0

Vielen Dank @Martin Brandl, ich werde mich erinnern, nicht 'Write-Host' zu verwenden –

Verwandte Themen