2016-04-21 23 views
0

因此,對於@Frode F.給我的腳本,我將如何進一步解析它?
這裏是@Frode F.給了我 -Powershell更進一步解析select-object

Get-WinEvent -FilterHashtable @{ 
LogName = 'Security' 
ID = 4688 
} | Select-Object TimeCreated,@{name='NewProcessName';expression={ $_.Properties[5].Value }}, @{name='CommandLine';expression={ $_.Properties[8].Value }} 

現在我該如何解析下來,除去某些事件?這是我的代碼 -

$search = @("C:\*") 
Get-WinEvent -FilterHashtable @{ 
LogName = 'Security' 
ID = 4688 
} | Select-Object TimeCreated,@{name='NewProcessName';expression={ $_.Properties[5].Value }}, @{name='CommandLine';expression={ $_.Properties[8].Value } 
} | Where-Object -FilterScript { $_.Properties[8].Value -notlike $search} 

這不斷給我一個不能索引到一個空數組。

+0

'select'語句應該幾乎總是管道中的最後一個命令...除非你想將結果導出到一個文件中....'command | Where-object | select-object' – Kiran

+0

你可以在'select-object'之前的where語句中使用'$ _。Properties [8] ....',就像@Negorath和@kiran解釋的那樣,但我實際上會這麼做'select |在那裏'就像你已經做了,以避免寫可怕的'..Propeties [8] ....'代碼兩次。 :-) –

回答

2

Where-Object cmdlet正在從先前的Select-Object cmdlet管道輸出的結果上運行。

嘗試更換:

$_.Properties[8].Value -notlike $search 

有:

$_.CommandLine -notlike $search 

編輯:@Negorath和@Kiran是正確的。如果您重新安排管道以在您選擇的之前過濾,那麼您最終可能會獲得性能更好的解決方案。

+0

這可行,但我會建議將'Where-Object -FilterScript {$ _。Properties [8] .Value -notlike $ search}'移到管道中的'Select-Object'前面。 – Negorath

+0

這絕對有效,沒有意識到CommandLine會成爲變量。我嘗試過在Select-Object前放置Where-Object過濾器,並且無法使其工作。我們假設沒有任何Get-WinEvent返回的東西可以使用。非常感謝!! – Dpitt1968