2012-08-23 55 views
0

我有腳本:的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在$服務器陣列和顯示狀態的每個服務器。我認爲,Foreach聲明沒有正確使用,但我無法找出問題所在。感謝您的建議

回答

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