2017-01-19 14 views
0

の性質(System.Collections.Generic.IList)から、オブジェクトデータは、私は(1行目は、ちょうどライン2、私はイマイチ権利を知って、結構です)、これを実行しています:Powershell | Get-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 
} 

をしかし、再び、私はどこオブジェクトをその中に活用できるか見当がつかない:

また、私はこの方法で、同じデータへのアクセスを得ることができます。

select-object(foreachループでの処理と比較して)でそのデータを表示する方法を知っている人がいるかどうかも疑問に思っていました。

助けてくれる人には、どうもありがとう!

更新日: 以下の回答に基づいて、このコードを作成することができました。これは完璧なイマイチが、ジョブはかなりよくやっ取得

$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

あなたの最初の行では、 'Properties [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を参照して、必要な単一のデータを抽出して処理することができます。