Powershell 查询 Windows 日志

简介:

论坛里面有人询问如何使用powershell脚本查询文件修改的审计日志,豆子服务器没开这个功能,不过尝试写了个类似的脚本可以查询日志,并输出对应的xml内容。


基本方法是get-winevent, 可以指定对应的eventid,获取列表。如果想获取这个事件具体的内容,需要根据不同事件的xml内容进行变化。


比如

1
2
3
$Events  Get-WinEvent  -ComputerName syddc01 -FilterHashtable @{Logname= 'Security' ;Id=4771} -MaxEvents 1
$eventXML  [xml] $Event .ToXml()
$eventxml .event.event.data

wKioL1X4-cOxNGptAADLqd6u8fc788.jpg


根据这个思路,我如果想获取最新的20个4771的事件日志,并输出结果


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$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 的方式来过滤,不然等到地老天荒也未必出结果。

我们需要通过哈希表来过滤

1
2
3
$endtime = get-date
$starttime = $endtime .addminutes(-1)
$eventcritea  = @{logname= 'security' ;id=4740;starttime= $starttime ;endtime= $endtime }


另外一种常见的方式是通过xmlfilter来过滤日志


首先,我们可以通过event viewer来自定义一个xpath


wKioL1X4-uqzi5EaAADOjL7kW3U689.jpg

wKiom1X4-UWAiui2AAGGHaznvrM148.jpg

wKioL1X4-3yxulR8AAEV0mqB1HM575.jpg

因为是不同的事件,他的eventdata结果是不一样的,因此我做了些变动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[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为例。



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$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










本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1695288,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
Java 开发工具 Windows
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
|
3月前
|
运维 Linux Windows
[运维技术]PowerShell中实现一个最基本的日志器logger
[运维技术]PowerShell中实现一个最基本的日志器logger
36 1
|
3月前
|
Windows
windows环境下根据端口号查询进程编号并杀掉此进程
windows环境下根据端口号查询进程编号并杀掉此进程
|
4月前
|
存储 监控 安全
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(1)
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(1)
|
4月前
|
SQL 存储 安全
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(2)
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(2)
110 0
|
11天前
|
SQL 监控 安全
Linux&Windows 日志分析 陇剑杯 CTF
Linux&Windows 日志分析 陇剑杯 CTF
|
1月前
|
分布式计算 DataWorks 关系型数据库
DataWorks报错问题之报错“查询运行日志失败"如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
2月前
|
存储 监控 BI
OSS日志查询
实时日志查询功能将OSS与日志服务SLS相结合,允许您在OSS控制台直接查询OSS的访问日志
29 1
|
2月前
|
存储 Prometheus Cloud Native
Grafana 系列文章(十一):Loki 中的标签如何使日志查询更快更方便
Grafana 系列文章(十一):Loki 中的标签如何使日志查询更快更方便
|
3月前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
49 0

热门文章

最新文章