2017-01-19 95 views
0

屬性(System.Collections.Generic.IList)數據我運行這個(1號線是好的,只是第2行,我知道心不是右):Powershell |位置對象從獲取-WinEvent

$specificEvent = Get-WinEvent -FilterHashtable @{"ProviderName"="Microsoft-Windows-Security-Auditing";Id=4648} | select -First 1 
$specificEvent | ? {($_).Properties[1] -eq "whatever"} 

而且它不是加工。沒有感到驚訝,但有沒有一種真正的方法來獲取System.Collections.Generic.IList類型的屬性數據?

我也可以訪問相同的數據是這樣的:

$specificEvent | % { 
    ([xml]$_.ToXml()).Event.EventData.Data 
} 

但同樣我不知道我怎麼可以利用的是,在對象。

我也想知道是否有人知道如何(在foreach循環VS處理)的選擇對象中顯示的數據,所以當我終於得到過濾工作,我可以顯示什麼,我需要回去。

對任何願意幫助的人,非常感謝!

UPDATE: 基於下面我能夠工藝這段代碼提供了答案。它不是完美的,但得到了那份工作做得相當不錯

$EventIDs = (Get-WinEvent -FilterHashtable @{ 
    "ProviderName"="Microsoft-Windows-Security-Auditing"; 
    StartTime=(get-date).AddHours(-24); 
    Id=4625} | select RecordID).RecordID 

Foreach ($r in $EventIDs) { 
    $EvXML = $null 
    [xml]$EvXML = (Get-WinEvent -LogName "Security" -FilterXPath "*[System[EventRecordID=$($r)]]").ToXML() 

    $Events = $null 
    $Events = For ($i=0; $i -lt $EvXML.Event.EventData.Data.Count; $i++) { 
     New-Object -TypeName psobject -Property (
      [ordered]@{Name = $EvXML.Event.EventData.Data[$i].Name 
      Value = $EvXML.Event.EventData.Data[$i].'#text'} 
     ) 
    } 

    write-host ($events | ? {$_.Name -eq "TargetUserName"}).value "|" ($events | ? {$_.Name -eq "TargetDomainName"}).value "|" ($events | ? {$_.Name -eq "IPAddress"}).value ":" ($events | ? {$_.Name -eq "IPPort"}).value 
} 
+0

你的第一行可能會或可能不會選擇一個事件其中'性能[1] -eq「無所謂」'你希望你的下一個步驟到一定的屬性包含一定的值只作用於事件? – Clayton

回答

1

從事件日誌中提取數據時,首先得到我想要的登錄到一個XML類型的變量,則變量數據轉換爲對象,像這樣我做什麼:

[xml]$EvXML = (Get-WinEvent -FilterHashtable @{"ProviderName"="Microsoft-Windows-Security-Auditing";Id=4648} -MaxEvents 1).ToXML() 
$Event = For ($i=0; $i -lt $EvXML.Event.EventData.Data.Count; $i++) { 
    New-Object -TypeName psobject -Property ([ordered]@{Name = $EvXML.Event.EventData.Data[$i].Name 
                 Value = $EvXML.Event.EventData.Data[$i].'#text'}) 
} 

一旦數據是一個對象數組,就可以像任何其他PS對象數組一樣做任何事情。如果你想在系統中的數據,代替$EvXML.Event.EventData$EvXML.Event.System,你可以鍵關機任何您想要的字段。要查看可用於任何事件的引用,請參閱事件查看器中的XML視圖。然後,你就可以提取並通過引用$Event[#].Name$Event[#].Value處理任何單件你想要的數據。