2017-05-31 16 views
1

我想提取特定文本文件中有錯誤的計算機的列表。我做了以下內容:Powershell從不同計算機上的文本文件中提取錯誤

$computernames = Get-Content C:\PC.txt 
foreach ($server in $computernames) 
{ 
    $filepath = Test-Path "\\$server\c$\" 


    if ($filepath -eq "True") { 

     Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server 
    } 
} 

即返回我的第一臺使用了一個錯誤,那麼只有一些空行,在命令窗口。

如果我試圖將它與文件或解壓縮或其他任何文件,我有一個空白文件。

在此事先感謝您的任何線索。

問候。

+0

*期望的結果是什麼?你對錯誤信息感興趣嗎?或者只是計算機名稱? – vonPryz

+0

目前只有電腦的名字。解釋整個事情。 此日誌文件與服務相關,只能生成2個錯誤,這些錯誤可以通過修復或通過重新啓動第一種情況的服務,或通過刪除第二種情況的數據庫中的重複項來實現。 目前的想法是讓計算機出現錯誤,然後嘗試改進以自動執行解決方案,因此如果錯誤500 - >重新啓動服務,如果ducplicate提取GUID並從數據庫中刪除。 但我正在一點一點的採取:) – Blodka

回答

0

你可以用這個做很多事情。讓我先告訴你你在找什麼:

因此,讓我們說你有一個錯誤,爲了捕捉你應該使用try/catch。

更換

Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server 

隨着這

 try 
     { 
     Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server 
     } 
     catch 
     { 
     $Error >> ErrorFile.txt 
     } 

第二件事,我建議是。假設你有10臺電腦,並假設第8臺電腦有一些錯誤。但是你仍然不希望停止循環,並繼續循環的其餘計算機。在這種情況下,你應該使用2 try/catch語句是這樣的:

$computernames = Get-Content C:\PC.txt 
try 
{ 
    foreach ($server in $computernames) 
    { 
     $filepath = Test-Path "\\$server\c$\" 
     try{ 

      if ($filepath -eq "True") { 
       try 
       { 
       Get-Content "\\$server\c$\file.log" | Select-String "Error" -quiet | Select-Object $server 
       } 
       catch 
       { 
       $Error >> ErrorFile.txt 
       } 
      } 
     } 
     catch 
     { 
     $_.Exception.Message >> Errorfile.txt 
     } 
    } 
} 
catch 
{ 
$_.Exception.Message >> Errorfile.txt 
} 

所以方法是,如果在foreach內的任何錯誤,那麼內部catch塊將捕捉它和錯誤信息會被解析到errorfile.txt保持循環運行並將繼續處理其餘的計算機。

如果有一些問題與主$ computernames同時獲得該文件的內容,那麼它會到主catch塊與分析,並附加在errorfile.txt

希望它相應的錯誤信息幫助您瞭解try/catch的有效性

+0

這不是我如何理解這個問題。有日誌文件包含一些錯誤消息,問題是如何搜索文件。 – vonPryz

+0

我現在正在測試,它或多或少的200臺計算機,所以是我有足夠的:),這個想法是搜索錯誤的日誌文件,並獲取錯誤的計算機的名稱。 – Blodka

+0

我以爲他想捕捉循環中的錯誤 –

相關問題