2015-06-25 69 views
0

我明白任何意見或援助Powershell - 幫助。搜索和名稱文件

我遇到的問題是,我有一個包含所有我目前正在工作的機器的日誌文件的文件夾。我有幾個搜索日誌查找預定字符串的腳本,我有另一個腳本會根據每個結果的計數生成一個報告。但是,另外我想讓它告訴每個字符串結果的機器名稱。此外,如果沒有發現任何東西,則不顯示任何內容幸運的是,我通過計算機名稱命名了每個日誌文件,希望如果它在日誌中找到該字符串,它只需要命名它所在的日誌文件的標題即可。

任何人都可以提供任何幫助用這個腳本?我嘗試過使用GCI的各種腳本,如果語句無濟於事。

謝謝!

$items = get-childitem "path-to-file" 


ForEach ($item in $items) 
{ 

if ($items -contains "SUCCESS") { 
write-host $items.name 
} 

} 
+3

有什麼你試圖得到你想要什麼,你可以_show us_?我們不是一個代碼編寫服務,而是一個幫助程序員和編程愛好者的社區。如果你付出一點努力,我們可以幫助休息。截至目前,這很可能會被關閉。 – Matt

+0

我已經在代碼中添加了,我很抱歉。我曾試圖用各種方式嘗試,但不會把它們扔到那裏。 –

+0

沒問題。感謝您提供一些東西。在大多數情況下,我們需要知道如何處理,因此縮小了解決方案的範圍,並獲得了許多簡單的問題,因此我們不需要浪費每個人的時間。歡迎來到SO。由於問題現在好轉,我除去了我的downvote和近距離投票。 – Matt

回答

0

您應該使用Get-Content查詢文件內容。

foreach ($item in $items) { 
    if ((get-content $item) -match "SUCCESS") { 
     $item.name 
    } 
} 
+0

非常好,謝謝。獲得我想要的內容。我如何以列表格式製作它?它只是混雜了所有的數據,併爲每臺機器寫入描述。 –

+0

這取決於你想在你的列表中做什麼。您可以將'$ item.name'更改爲一個查詢,它將選擇'$ item'(這是一個包含「SUCCESS」行的日誌文件)或'(get-content $ item)'的某些屬性的更好的屬性,它是一個字符串數組(所以如果你想要一個標題,只需輸出'(get-content $ item)[0]' - 它將輸出有問題的文件的第一行,那麼你希望接收什麼格式? – Vesper

+0

一個頭部列表: 成功的機器: -machines –

0

-contains不幸得到了幾個人的名字誤導。它用於查找數組中的匹配元素。而$items是一個數組,它不包含您期望的內容。既然你也在尋找每個字符串結果的機器名稱我想建議Select-String這就像grep如果你熟悉unix的話。

Get-ChildItem "C:\temp" -filter "*.log" | Select-String "SUCCESS" | Select-Object Path,Line 

有一個你可能不需要的過濾器。如果目錄僅包含有問題的文件,請將其刪除。這會告訴你這樣的事情。

Path    Line    
----    ----    
C:\temp\logfile.log computer = success 

匹配的文件名以及匹配的完整行。