Powershell 查询 Windows 日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

论坛里面有人询问如何使用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日志并进行多维度分析。
目录
相关文章
|
3月前
|
存储 监控 Serverless
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
|
3月前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
12045 106
|
2月前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
122 17
|
1月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
39 0
|
3月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
2月前
|
Windows
Powershell 重新排列去重 Windows环境变量
【9月更文挑战第13天】本文介绍如何使用PowerShell对Windows环境变量进行重新排列和去重。首先通过`$env:`访问环境变量,接着使用`-split`命令分割路径,再利用`Select-Object -Unique`去除重复项。之后可根据需要对路径进行排序,最后将处理后的路径组合并更新环境变量。注意修改环境变量前应备份重要数据并了解潜在影响。
129 10
|
1月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
3月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
131 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
1月前
|
安全 Shell Linux
内网渗透测试基础——Windows PowerShell篇
内网渗透测试基础——Windows PowerShell篇
|
3月前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
下一篇
无影云桌面