在本篇文章中,我们将专注于其中一个特定的命令:Get-WinEvent。 什么是Get-WinEvent命令? Get-WinEvent 是PowerShell中的一个cmdlet,用于获取Windows事件日志中的事件。 与它类似的命令还有Get-EventLog,但Get-WinEvent提供了更多的功能,包括对远程计算机的支持、对事件追踪日志的支持,以及更高效的日志过滤。 如何使用Get-WinEvent命令? Get-WinEvent命令可以单独使用,也可以与其他命令结合使用,例如过滤命令、排序命令等。 无论是在调试问题、监视系统状态,还是在自动化任务时,Get-WinEvent都是一个非常有用的工具。
Windows事件日志查看命令通常有2种:Get-WinEvent和Get-EventLog,那么二者之间的区别是什么?应用场景又是什么呢? Get-WinEvent是从Windows Vista才开始引入的,比Get-EventLog晚很多; image.png 通过下图命令可以看出,Get-EventLog可以查看7个日志文件;而Get-WinEvent Get-EventLog只能处理Online日志,不能处理archived(offline)日志,会出现提示无法访问;而Get-WinEvent则没问题,即:Get-WinEvent既支持.evt/.evtx 当查询语句中带有Date时,Get-WinEvent的效率会大大降低,所以,建议优先考虑Get-Eventlog。 总之,各有利弊,跨网络优先Get-WinEvent,本地优先Get-EventLog,要查看更细致的应用和服务日志,只能选择Get-WinEvent。
) 异常举例:smss.exe → autochk.exe → smss.exe → csrss.exe 这个过程中,从autochk.exe → smss.exe耗费了将近5分钟 #查开机耗时 Get-WinEvent ProviderName -eq "User32" -or $_.ProviderName -eq "EventLog" } |Sort-Object -Property TimeCreated #查开机各阶段耗时 Get-WinEvent ProviderName -eq "Microsoft-Windows-Security-Auditing"} |Sort-Object -Property TimeCreated 以上2句命令还可以合并成一句 (Get-WinEvent Microsoft-Windows-Kernel-General" -or $_.ProviderName -eq "User32" -or $_.ProviderName -eq "EventLog"}) + (Get-WinEvent Session Manager\Memory Management" /v "ClearPageFileAtShutdown" /d 0 /t REG_DWORD /f #查最近1天的开关机、重启记录 Get-WinEvent
"Audit")] [String] $HunType="ALL" ) switch ($HunType) { All { $output = Get-WinEvent the SID, to have the username, we need to translate this value: # The userid is a propriety of Get-WinEvent the SID, to have the username, we need to translate this value: # The userid is a propriety of Get-WinEvent " ======= This is the list of BLOCKED events of Applocker.=======" } Allow { $output = Get-WinEvent the SID, to have the username, we need to translate this value: # The userid is a propriety of Get-WinEvent
$_.EventID -eq "4231" -or $_.EventID -eq "4266"} |FT TimeGenerated,EventID,EntryType,Source,Message Get-WinEvent StartTime=(Get-Date).AddDays(-10)} -ErrorAction SilentlyContinue |Sort-Object -Property TimeCreated Get-WinEvent StartTime=(Get-Date).AddDays(-10)} -ErrorAction SilentlyContinue |Sort-Object -Property TimeCreated Get-WinEvent ';id=@(12,6005,6006,13,6008,41,1074);StartTime="2021-07-27 00:00:00";EndTime="2021-07-28 00:00:00"} Get-WinEvent Get-Date).AddDays(-1)} -ErrorAction SilentlyContinue |Sort-Object -Property TimeCreated #查最近1天的暴力破解记录 Get-WinEvent
如果因为各种原因没法通过可视化界面操作,那就只能命令行检查 排查Windows日志命令 PowerShell Get-WinEvent命令 列出所有事件 Get-WinEvent -ListLog * 获取Security.evtx的日志: Get-WinEvent -FilterHashtable @{LogName='Security'} 获取事件ID为4624的Security日志: Get-WinEvent -FilterHashtable @{LogName='Security';ID='4624'} powershell今天操作日志的最近10条,注意这里的logname必须是loglist中得到的: Get-WinEvent -Hour 00 -Minute 00 $EndTime=Get-Date -Year 2023 -Month 1 -Day 30 -Hour 23 -Minute 59 Get-WinEvent view=powershell-5.1 基本都可以用Microsoft Message Analyzer代替,可能在内网机子现场应急的时候需要用Get-WinEvent 排查Windows用户命令
Windows系统,获取最新开机事件12和6005的时间差 简版 # 获取事件ID 12的最新事件 $event12 = Get-WinEvent -FilterHashtable @{LogName = "System"; ID = 12} -MaxEvents 1 # 获取事件ID 6005的最新事件 $event6005 = Get-WinEvent -FilterHashtable @{LogName - $event12.TimeCreated # 输出结果 $timeDifference # 输出结果为秒 $timeDifference.TotalSeconds 健壮版 $event12 =Get-WinEvent EventLog" } | Sort-Object -Property TimeCreated -Descending:$true|Select-Object -First 1 $event6005 =Get-WinEvent Sort-Object -Property TimeCreated -Descending:$true |Select-Object -First 2 > c:\12_6005_timediff.txt #Get-WinEvent
版本的命令 $PSVersionTable image.png 以下都是特别有用的powershell常用命令 【获取日志】 Get-EventLog -LogName security //安全相关 Get-WinEvent -FilterHashtable @{LogName='Security'} //安全相关 Get-WinEvent -FilterHashtable @{LogName='Security';Id= 4625} //帐户登录失败 Get-WinEvent -FilterHashtable @{LogName='Security';Id=4624} //已成功登录账户 Get-WinEvent -FilterHashtable
以下是查询最近登录记录的示例命令: 查询最近 100 条成功登录记录: Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 100 | Select-Object TimeCreated, Id, Message 查询最近 50 条失败登录事件: Get-WinEvent -FilterHashtable @{LogName Select-Object TimeCreated, Message | Format-Table -Wrap 查询过去24小时内所有失败的登录: $StartTime = (Get-Date).AddHours(-24) Get-WinEvent Sort-Object TimeCreated -Descending | Format-Table -AutoSize -Wrap 查询来自特定IP地址(例如 192.168.0.217)的登录事件: Get-WinEvent
输入以下命令以列出最近的安全事件: Get-WinEvent -LogName Security | Format-Table TimeCreated, ID, Message -AutoSize如果需要查找特定类型的事件 例如,查找登录事件(事件ID为4624): Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624} | Format-Table TimeCreated
输入以下命令以查看成功登录记录: Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624} | Format-Table TimeCreated , Message -AutoSize输入以下命令以查看失败登录记录: Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625} | Format-Table
3.访问方法:Get-WinEvent(PowerShell)(AccessMethod3:Get-WinEvent)Get-WinEvent是PowerShell中用于处理事件日志的核心cmdlet,
较大自定义镜像批量新购机器出现进入系统慢的情况,转圈时间太长 图片.png 图片.png 对于这种情况,辅助判断的话,可以powershell执行这句命令 Get-WinEvent -FilterHashtable
Get-WinEvent -FilterHashtable @{logname='System';id=@(12,22,29,35,36,37,47,144,131);StartTime=(Get-Date
$filter['EndTime'] = $starttime } $events = Get-WinEvent
前提目标是 system 权限 eventvwr PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}" Get-WinEvent
bufferSize = $Host.UI.RawUI.BufferSize $bufferSize.Width = 1024 $Host.UI.RawUI.BufferSize = $bufferSize Get-WinEvent .ProviderName -eq "User32" -or $_.ProviderName -eq "EventLog" } |Sort-Object -Property TimeCreated Get-WinEvent
此步骤非常关键 重启后执行powershell检查事件ID 12和6005的时间差,纯净版系统一般会稳定在15秒以内,带环境的一般会稳定在30秒以内,一般不超过35秒 #ps1 $event12 =Get-WinEvent EventLog" } | Sort-Object -Property TimeCreated -Descending:$true|Select-Object -First 1 $event6005 =Get-WinEvent
而下面的 Powershell 就可清除相关日志: PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}" Get-WinEvent
winevt\Logs, 在文件夹中上图的各个选项分别有一个日志文件.evtx, 而Microft则是有多个日志文件 使用powershell查看所有应用程序的日志: powershell.exe -c "Get-WinEvent