powershell Foreach-Object用法

时间:2012-08-23 11:45:56

标签: powershell powershell-v2.0

我有脚本:

$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声明没有得到正确使用,但我无法找出问题所在。谢谢你的建议

1 个答案:

答案 0 :(得分:3)

您不应该在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"
       }
     }
}