2016-07-26 22 views
0

我需要從Windows 7工作站中提取本地登錄/註銷列表。我以evtx格式獲得了安全事件日誌的保存副本,並且遇到了一些問題。使用PowerShell提取登錄/註銷事件

下面的PowerShell提取所有的事件ID爲46244634

Get-WinEvent -Path 'C:\path\to\securitylog.evtx' | where {$_.Id -eq 4624 -or $_.Id -eq 4634} 

我想那麼只有logon type = 2 (local logon)過濾。配管這:

| where {$_.properties[8].value -eq 2} 

但是似乎刪除所有id=4634(註銷)事件。

即使事件id = 4624事件,也沒有用戶ID存在。例如管道到:

| select-object -property Timecreated,TaskDisplayName,MachineName,userid 

或以其它方式配管Export-Csv,所述userid是空白的。

兩個問題是:

  1. 爲什麼當管道輸送到這裏{$_.properties[8].value -eq 2}與ID 4634滴的事件?
  2. 爲什麼userid是空的?我怎樣才能得到userid

回答

0
  1. 請注意,8不是幻數。它是由4624事件定義的XML中的第9個屬性(索引從0開始)。如果打開Details選項卡並切換到XML視圖,您可以在事件查看器中看到它。在查看4634事件時,您可以看到登錄類型屬性現在是第5個 - 因此您可能希望修改您的查詢,如下所示:

    其中{{.Id -eq 4624-和$的.properties [8] -eq 2} - 或{$ .ID -eq 4634米-and $的.properties [4] -eq 2}}

  2. 用戶ID是不爲這些事件定義。您可能需要查看XML中定義的TargetUserName屬性(第6個屬性)。

+0

感謝您的 - 此命令的工作來提取的事件: GET-WinEvent -Path 'C:\路徑\爲\ securitylog.evtx' |其中{($ _。Id -eq 4624-和$ _。properties [8] .value -eq 2) - 或($ _。Id -eq 4634-和$ _。properties [4] .value -eq 2) } 有沒有辦法通過XML元素名稱來引用屬性元素? 另外,我如何實際打印出屬性數組的值?選擇對象允許我打印屬性(例如select-object -property TTimecreated,TaskDisplayName,MachineName),但我似乎無法弄清楚如何從屬性數組中打印特定的元素。 – cuvy

0

好吧,這就是我最終的結果。它打印出逗號分隔值:

$evts = Get-WinEvent -Path 'C:\path\to\securitylog.evtx' | where {($_.Id -eq 4624 -and $_.properties[8].value -eq 2) -or ($_.Id -eq 4634 -and $_.properties[4].value -eq 2) } 
foreach ($e in $evts) 
{ 
    # get the attributes 
    $ds = $e.TimeCreated 
    $tdn = $e.TaskDisplayName 
    $mn = $e.MachineName 

    # userid will vary depending on event type: 
    if($e.Id -eq 4624) { $userid = $e.properties[5].value } 
    if($e.Id -eq 4634) { $userid = $e.properties[1].value } 

    write-host ("{0},{1},{2},{3}" -f [string]$ds,[string]$tdn,[string]$mn,[string]$userid) 
}