powershell Foreach对象用法



我有脚本:

$servers = "server01", "s02", "s03"
foreach ($server in $servers) {
$server = (New-Object System.Net.NetworkInformation.Ping).send($servers)
if ($server.Status -eq "Success") {
Write-Host "$server is OK"
}
}

错误消息:

An exception occured during a Ping request.

我需要ping$servers数组中的每个服务器并显示状态。我认为,Foreach的说法使用不当,但我无法找出问题出在哪里。感谢您的建议

您不应该在foreach循环中修改$server的值。声明一个新变量(例如$result)。此外,Ping.Send采用单个服务器名称,而不是服务器名称的数组作为参数。以下代码应该可以工作。

最后,如果主机无法访问,您需要捕获将抛出的PingException,否则您的脚本将打印出一个大的红色错误以及预期的结果。

$servers = "server1", "server2"
foreach ($server in $servers) {
   & {
       trap [System.Net.NetworkInformation.PingException] { continue; }
       $result = (New-Object System.Net.NetworkInformation.Ping).send($server)
       if ($result.Status -eq "Success") {
         Write-Host "$server is OK"
       }
       else {
         Write-Host "$server is NOT OK"
       }
     }
}

最新更新