2012-08-09 59 views
1

我想使用powershell來測試到服務器列表的網絡連接,然後轉儲到文本文件,只要它返回true。我的代碼會發生什麼情況,它包括沒有ping的服務器。下面是我有:Powershell foreach循環出文件問題

$servers = Get-Content c:\script\servers.txt 
foreach($server in $servers) 
{ 
Test-Connection $server -count 1 -quiet 
    if ($True){out-file -InputObject $server, $True -Encoding ASCII -Width 50 -Append c:\scriptoutput.txt} 
    else { write-host "server $server could not be contacted"} 
} 

現在我在輸出文件中看到的是

server1 
True 
server2 
True 
server3 
True 

但我看到控制檯上是這樣的:

PS C:\> C:\test.ps1 
True 
True 
False 

服務器3沒有按不存在,因此無法ping通,在輸出文件中仍顯示爲True,但在控制檯中讀取False。是什麼賦予了?

+0

$真是永遠是真的.... else語句永遠不會達到! – 2012-08-09 21:17:16

+0

輝煌!我知道這很愚蠢。我使用以下方法修復了它: if($ entry -eq「True」){out-file -InputObject $ server,$ True -Encoding ASCII -Width 50 -Append c:\ scriptoutput.txt} – John 2012-08-09 21:20:20

回答

4

不僅是else語句永遠不會到達,而且您始終將true輸出到文件。試試這個:

$servers = Get-Content c:\script\servers.txt 
foreach ($server in $servers) 
{ 
    $connected = Test-Connection $server -count 1 -quiet 
    if ($connected) { 
     $server,$connected | Out-File -Enc ASCII -Width 50 -Append c:\scriptoutput.txt 
    } 
    else { 
     write-host "server $server could not be contacted" 
    } 
} 
+0

太棒了!我喜歡你的方法。昨晚我意識到我總是輸出真實的,所以我就把它關掉了。你的想法更好! – John 2012-08-10 13:04:11