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"
我不明白为什么输出是这样的:
脚本实际工作,但它执行时宣布的变量,然后它不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"
}
当你写或审查PowerShell脚本,我希望你能记住 拇指以下规则:
使用写主机几乎总是错误的。
谢谢@Martin Brandl,我会记住不要使用'Write-Host' –