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日志并进行多维度分析。
目录
相关文章
|
2天前
|
存储 人工智能 JSON
RAG Logger:专为检索增强生成(RAG)应用设计的开源日志工具,支持查询跟踪、性能监控
RAG Logger 是一款专为检索增强生成(RAG)应用设计的开源日志工具,支持查询跟踪、检索结果记录、LLM 交互记录和性能监控等功能。
20 7
RAG Logger:专为检索增强生成(RAG)应用设计的开源日志工具,支持查询跟踪、性能监控
|
25天前
|
缓存 安全 网络协议
使用事件日志识别常见 Windows 错误
事件查看器是Windows操作系统中的标准诊断工具,用于记录系统事件,包括硬件问题、软件中断和系统行为等详细信息。通过分析这些日志,管理员能够追踪和解决系统错误。访问方法包括使用快捷键Win + R输入eventvwr.msc,或通过控制面板进入。事件查看器中的每条记录包含事件ID、来源和描述,帮助识别和解决问题。常见错误如蓝屏死机、DLL错误、驱动程序错误等,可通过更新驱动程序、运行系统诊断、使用恢复功能等方式解决。
|
3月前
|
Web App开发 存储 监控
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
本文为 iLogtail 开源两周年的实践案例分享,讨论了 iLogtail 作为日志采集工具的优势,包括它在性能上超越 Filebeat 的能力,并通过一系列优化解决了在生产环境中替换 Filebeat 和 Logstash 时遇到的挑战。
147 14
|
2月前
|
监控 安全 网络安全
使用EventLog Analyzer日志分析工具监测 Windows Server 安全威胁
Windows服务器面临多重威胁,包括勒索软件、DoS攻击、内部威胁、恶意软件感染、网络钓鱼、暴力破解、漏洞利用、Web应用攻击及配置错误等。这些威胁严重威胁服务器安全与业务连续性。EventLog Analyzer通过日志管理和威胁分析,有效检测并应对上述威胁,提升服务器安全性,确保服务稳定运行。
|
4月前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
145 19
|
3月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
104 0
|
4月前
|
Windows
Powershell 重新排列去重 Windows环境变量
【9月更文挑战第13天】本文介绍如何使用PowerShell对Windows环境变量进行重新排列和去重。首先通过`$env:`访问环境变量,接着使用`-split`命令分割路径,再利用`Select-Object -Unique`去除重复项。之后可根据需要对路径进行排序,最后将处理后的路径组合并更新环境变量。注意修改环境变量前应备份重要数据并了解潜在影响。
146 10
|
3月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
5月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
149 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
5月前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题