powershell Foreach对象用法

powershell Foreach对象用法,powershell,powershell-2.0,Powershell,Powershell 2.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

我有剧本:

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

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