2014-03-27 140 views
1

我用下面的代碼獲取機器的具有IP地址的列表。它打印出主機名和IP地址。如果主機處於脫機狀態,則表示「$ computername處於脫機狀態」。下面是代碼:寫入所有輸出到文件

$csv = Get-Content TEST_MACHINES.csv 

foreach ($computer in $csv) 
{ 
    try 
    { 
     Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address 
    } 
    catch 
    { 
     "$computer is offline" 
    } 
} 

它的偉大工程和輸出,像這樣的數據:

地址IPV4Address

------- -----------

TESTMACHINE 192.168.1.1

TESTMACHINE2 192.168.1.2

TESTMACHINE3處於脫機狀態。

但是沒有弄虛作假的量讓我這一切寫入文件,即使它顯示像在控制檯中。它寫入空白文件或只寫入異常。

我怎樣才能準確地捕獲該輸出,因爲它是什麼?

回答

2

您可以使用相同的字段名稱爲您選擇的測試連接字段創建自定義的PowerShell對象,然後導出成功和失敗,以CSV。請參閱下面的例子:

$csv = Get-Content TEST_MACHINES.csv 

foreach ($computer in $csv) 
{ 
    try 
    { 
     Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address | Export-Csv -Path .\ConnectionTest.csv -Append 
    } 
    catch 
    { 
     $Output = New-Object PSObject -Property @{ 
      Address = $computer 
      IPV4Address = "Offline" 
     } 

     $Output | Export-Csv -Path .\ConnectionTest.csv -Append 
    } 
} 
+0

也只寫了腳本的第一部分。它真的在控制檯中顯示得很完美,但是如果我像「./script.ps1> results.txt」那樣運行腳本,則results.txt文件是空白的。我怎樣才能把它輸出到結果文件? – Pickle

+0

對不起,這個回覆有點晚了。上面的代碼在編寫時不會產生任何標準輸出,因此使用> results.txt重定向它確實會導致一個空的results.txt文件。 所有標準輸出從碼上面管道輸送到出口-CSV,這將置於導出-CSV -Path參數指定的文件中的所有輸出所得。我希望這有幫助。 –

1

在我創作劇本的風格我會用簡單的if..then..else循環。這對我來說似乎最合乎邏輯。您曾嘗試管後出「沒有文件」開關,不是嗎?......我剛纔在本地主機和一些隨機的名字運行的下方,並且工作得很好...

$csv = Get-Content TEST_MACHINES.csv 

foreach ($computer in $csv) 
{ 
    if (Test-Connection $computer -Count 1 -Quiet) 
    { 
    Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address | Out-file -append "SomeFile.txt" 
    } 
    else 
    { 
    "$computer is offline" | Out-File -Append "SomeFile.txt" 
    } 
} 
+0

對我來說,這會產生一個空的「somefile.txt」 – Pickle

+0

當我發佈命令我嘗試了一些輸入...我把「本地主機」和「www.google.com 「在一個csv文件裏面,它給了我輸出很好的PS4.0你可以先說一下CSV文件的前三行嗎?或者嘗試一個正常的文件,每行只包含1個條目? 編輯:怪你收到布蘭登腳本中的空白文件,以及... – Koliat

1

嘗試這樣的:

$csv = Get-Content TEST_MACHINES.csv 
'' > foo.log 
foreach ($computer in $csv) 
{ 
    try 
    { 
     Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address >> foo.log 
    } 
    catch 
    { 
     "$computer is offline" >> foo.log 
    } 
}