Powershell Windows 로그 조회 방법

5610 단어 Windows로그
포럼 에 서 는 powershell 스 크 립 트 를 사용 하여 파일 수정 감사 로 그 를 조회 하 는 방법 을 묻 는 사람 이 있 습 니 다.콩 서버 는 이 기능 을 열지 않 았 지만 비슷 한 스 크 립 트 를 써 서 로 그 를 조회 하고 xml 내용 을 출력 하려 고 합 니 다.
기본 적 인 방법 은 get-winevent 입 니 다.이벤트 id 를 지정 하여 목록 을 가 져 올 수 있 습 니 다.이 이벤트 의 구체 적 인 내용 을 가 져 오 려 면 이벤트 의 xml 내용 에 따라 달라 져 야 합 니 다.
예 를 들 면

$Events = Get-WinEvent -ComputerName syddc01 -FilterHashtable @{Logname='Security';Id=4771} -MaxEvents 1 
$eventXML = [xml]$Event.ToXml() 
$eventxml.event.event.data 
wKioL1X4-cOxNGptAADLqd6u8fc788.jpg
이 사고방식 에 따 르 면,나 는 최신 4771 개의 이벤트 로 그 를 20 개 얻 고 결 과 를 출력 하고 싶다

$Events = Get-WinEvent -ComputerName syddc01 -FilterHashtable @{Logname='Security';Id=4771} -MaxEvents 20     
       
# Parse out the event message data       
ForEach ($Event in $Events) {       
  # Convert the event to XML       
  $eventXML = [xml]$Event.ToXml()       
  # Iterate through each one of the XML message properties       
  For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) { 
    
       
    # Append these as object properties       
    Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name $eventXML.Event.EventData.Data[$i].name -Value $eventXML.Event.EventData.Data[$i].'#text'      
  }       
}       
  
   
$events | select Message, TargetUserName, ipaddress,timecreated | Out-GridView 
wKioL1X4-iPDwCAuAANhZPcU2WY929.jpg
어떤 때 는 사건 의 수가 매우 많 기 때문에 나 는 이 시간 에 대해 제한 을 하고 싶다.절대 where-object 방식 으로 걸 러 내지 마 세 요.그렇지 않 으 면 땅 이 늙 고 하늘 이 황폐 해 질 때 까지 기다 리 는 것 도 반드시 결과 가 나 오 는 것 은 아 닙 니 다.
우 리 는 해시 표를 통 해 여과 해 야 한다.

$endtime=get-date
$starttime=$endtime.addminutes(-1) 
$eventcritea = @{logname='security';id=4740;starttime=$starttime;endtime=$endtime}
또 다른 일반적인 방법 은 xmlfilter 를 통 해 로 그 를 걸 러 내 는 것 이다.
우선,이벤트 뷰 어 를 통 해 xpath 를 정의 할 수 있 습 니 다.
wKioL1X4-uqzi5EaAADOjL7kW3U689.jpg
wKiom1X4-UWAiui2AAGGHaznvrM148.jpg
wKioL1X4-3yxulR8AAEV0mqB1HM575.jpg
다른 사건 이기 때문에 그의 eventdata 결 과 는 다 르 기 때문에 나 는 약간의 변 화 를 했다.

[xml]$xmlFilter = @" 
<QueryList> 
 <Query Id="0" Path="Application"> 
  <Select Path="Application">*[System[(EventID=1002) and TimeCreated[timediff(@SystemTime) &lt;= 604800000]]]</Select> 
 </Query> 
</QueryList> 
“@ 
#Get-WinEvent -ComputerName $DC.DC -LogName Security -FilterXPath "*[System[(EventID=529 or EventID=644 or EventID=675 or EventID=676 or EventID=681 or EventID=4625) and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]" #-MaxEvents 50 
$Events = Get-WinEvent -ComputerName syddc01 -FilterXML $xmlFilter 
ForEach ($Event in $Events) {       
  # Convert the event to XML       
  $eventXML = [xml]$Event.ToXml()       
  # Iterate through each one of the XML message properties       
  For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) { 
    
       
    # Append these as object properties       
    Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name "App" -Value $eventXML.Event.EventData.Data[5]      
  }       
}   
$Events | select Message, App, providerName, timecreated | Out-GridView 
결 과 는 다음 과 같다.
wKiom1X4-LfAh_1ZAAIHTGF2q2I120.jpg
마지막 으로 예 를 들 어 저 는 lockout 사용자 의 정보 와 그들 이 어디에서 잠 겨 있 는 지 알 고 싶 습 니 다.이 로 그 는 4771 이나 4740 을 살 펴 보 겠 습 니 다.4771 의 로그 가 너무 많 고 조회 가 너무 느 려 서 여기 서 나 는 이미 4740 을 예 로 들 었 다.

eventcritea = @{logname='security';id=4740} 
$Events =get-winevent -ComputerName (Get-ADDomain).pdcemulator -FilterHashtable $eventcritea 
#$Events = Get-WinEvent -ComputerName syddc01 -Filterxml $xmlfilter     
       
# Parse out the event message data       
ForEach ($Event in $Events) {   
    
  # Convert the event to XML       
  $eventXML = [xml]$Event.ToXml()   
      
  # Iterate through each one of the XML message properties       
  For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) { 
    
       
    # Append these as object properties       
    Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name $eventXML.Event.EventData.Data[$i].name -Value $eventXML.Event.EventData.Data[$i].'#text'      
  }       
}       
  
   
$events | select TargetUserName,timecreated, targetdomainname | Out-GridView -Title LockOutStatus 
break; 
Search-ADAccount -LockedOut | ForEach-Object {Unlock-ADAccount -Identity $_.distinguishedname }
wKioL1YCTLTT2ydOAAKYKU8Qewo401.jpg
마파두부

좋은 웹페이지 즐겨찾기