foreach循环不执行变量

foreach循环不执行变量

问题描述:

我写的几行代码检查一个端口是否打开或不:foreach循环不执行变量

$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" 

我不明白为什么输出是这样的:

enter image description here

脚本实际工作,但它执行时宣布的变量,然后它不if/else

的后使用变量cmdlet只是打印东西到控制台,它不返回任何东西,所以你不能将它分配给$status。相反,你应该做这样的事情:

$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:

当你写或审查PowerShell脚本,我希望你能记住 拇指以下规则:

使用写主机几乎总是错误的。

+0

谢谢@Martin Brandl,我会记住不要使用'Write-Host' –