2016-07-26 2 views
0

Windows 7 워크 스테이션에서 로컬 로그온/로그 오프 목록을 추출해야합니다. evtx 형식으로 보안 이벤트 로그의 저장된 복사본이 있는데 몇 가지 문제가 있습니다.powershell을 사용하여 로그온/로그 오프 이벤트 추출

다음 PowerShell은 ID 4624 또는 4634 모든 이벤트를 추출합니다

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을 얻으려면 어떻게해야합니까? 8 매직 넘버 아니라고

답변

0
  1. 알 수 있습니다. 4624 이벤트에 의해 정의 된 XML의 9 번째 등록 정보 (0부터 시작하는 색인)입니다. 세부 정보 탭을 열고 XML보기로 전환하면 이벤트 뷰어에서이를 볼 수 있습니다. 4634 행사에서 볼 때, 당신은 로그온 유형 속성은 이제 5 것을 볼 수 있습니다 - 당신이 뭔가에 쿼리를 수정할 수 있도록 :

    {{$ 이 .ID가 4624 - 그리고 $을 -eq

    .properties 파일은 [8] -eq 2} - 또는 {$ .ID -eq 4634 - 그리고 $ .properties의 [4] -eq 2}}

  2. 사용자 ID는 바로 이러한 이벤트를 정의되어 있지 않습니다. XML (6th 속성)에 정의 된 TargetUserName 속성을 살펴볼 수 있습니다.

+0

감사합니다 -이 명령은 이벤트를 추출하기 위해 작동합니다 : 그것은 쉼표로 구분 된 값을 출력 가져-WinEvent를 -Path 'C : \ 경로 \는 securitylog.evtx \하는'| 여기서 {($ _. Id - eq 4624 - $ _. properties [8] .value -eq 2) - 또는 ($ _. Id - eq 4634 - 및 $ _.properties [4] .value -eq 2) } XML 요소 이름으로 속성 요소를 참조 할 수 있습니까? 또한 실제로 속성 배열의 값을 어떻게 인쇄합니까? Select-object를 사용하면 속성을 인쇄 할 수 있습니다 (예 : 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) 
} 
관련 문제