Powershell 查询 Windows 日志的方法

 更新时间:2020年6月30日 23:52  点击:3235

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

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

比如

$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的事件日志,并输出结果

$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来过滤日志

首先,我们可以通过event viewer来自定义一个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

本文出自 “麻婆豆腐” 博客

[!--infotagslink--]

相关文章

  • Windows VPN服务器配置图文教程 超详细版

    VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
  • Windows批量搜索并复制/剪切文件的批处理程序实例

    这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
  • Laravel 调试工具 laravel-debugbar 打印日志消息

    laravel-debugbar 调试工具的教程小编整理了几篇不错的教程,今天我们来看一篇Laravel 调试工具 laravel-debugbar 打印日志消息例子,希望文章对各位有帮助。 其实不...2016-11-25
  • C#创建简单windows窗体应用(加法器)

    这篇文章主要为大家详细介绍了C#创建一个简单windows窗体应用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • Powershell 查询 Windows 日志的方法

    这篇文章主要介绍了Powershell 查询 Windows 日志的方法,需要的朋友可以参考下...2020-06-30
  • 对MySQL日志操作的一些基本命令总结

    MySQL日志主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句...2015-11-24
  • C#实现windows form限制文本框输入的方法

    这篇文章主要介绍了C#实现windows form限制文本框输入的方法,涉及C#限制文本框输入的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • JS实现不使用图片仿Windows右键菜单效果代码

    本文实例讲述了JS实现不使用图片仿Windows右键菜单效果代码。分享给大家供大家参考,具体如下:这里演示JS不使用图片仿Windows右键菜单效果,这款代码灵活使用了文鼎字,配合CSS和JS做出了这个和系统右键菜单很相似的东东。...2015-10-23
  • C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法

    这篇文章主要介绍了C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法,结合实例形式分析了GetDesktopWindow函数用于获取窗口句柄的具体使用方法与相关注意事项,需要的朋友可以参考下...2020-06-25
  • Linux与Windows喜结连理

    作为一个新生事物,Linux吸引了不少眼球,但是它能否快捷、方便地与Windows资源共享,是一个很重要的问题。大家知道,Windows之间可以利用“网络邻居”来实现资源共享,而Linux...2016-11-25
  • C#实现线程安全的简易日志记录方法

    这篇文章主要介绍了C#实现线程安全的简易日志记录方法,比较实用的功能,需要的朋友可以参考下...2020-06-25
  • 利用C#修改Windows操作系统时间

    这篇文章主要介绍了利用C#修改Windows操作系统时间,帮助大家更好的利用c#操作系统,感兴趣的朋友可以了解下...2020-12-08
  • 详解Windows下安装Nodejs步骤

    本篇文章主要介绍了详解Windows下安装Nodejs步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-05-22
  • c# 用Dictionary实现日志数据批量插入

    这篇文章主要介绍了c# 用Dictionary实现日志数据批量插入的步骤,帮助大家更好的理解和使用c#中的Dictionary类,感兴趣的朋友可以了解下...2021-02-01
  • C#3.0使用EventLog类写Windows事件日志的方法

    这篇文章主要介绍了C#3.0使用EventLog类写Windows事件日志的方法,以简单实例形式分析了C#写windows事件日志的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Java SSM框架如何添加写日志功能

    这篇文章主要介绍了Java SSM框架如何添加写日志功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-25
  • c#快速写本地日志方法

    下面小编就为大家分享一篇c#快速写本地日志方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • sql server日志处理不当造成的隐患详解

    这篇文章主要给大家介绍了关于sql server日志处理不当造成的隐患的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用sql server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-11
  • Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1的解决方法

    这篇文章主要为大家详细介绍了Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-07-06
  • C#实现控制Windows系统关机、重启和注销的方法

    这篇文章主要介绍了C#实现控制Windows系统关机、重启和注销的方法,涉及C#调用windows系统命令实现控制开机、关机等操作的技巧,非常简单实用,需要的朋友可以参考下...2020-06-25