PowerShell审计用户活动需闭环执行:先用auditpol启用登录、特权、对象访问等策略并验证子项生效,再通过Get-WinEvent精准筛选Security与PowerShell日志,最后导出结构化CSV并定期验证权限、日志大小及GPO覆盖情况。
powershell 是 windows 审计用户活动的核心工具,但不是“开箱即用”——需先启用对应审计策略、再采集日志、最后筛选分析。关键不在命令多,而在每一步是否闭环:策略真启用了?日志真写入了?事件真可读了?
先配好审计策略,否则日志为空
Windows 默认不记录大多数用户行为。必须手动开启关键类别的审核,且要细到子项:
- 登录/注销:运行 auditpol /set /category:"Logon" /success:enable /failure:enable
- 特权使用(如提权、服务启动):运行 auditpol /set /category:"Privilege Use" /success:enable
- 对象访问(文件、注册表、打印机等):运行 auditpol /set /category:"Object Access" /success:enable /failure:enable
- 进程创建(防无文件攻击):不仅开父类,还要确认子项生效:auditpol /get /subcategory:"Process Creation" 应显示 “Success and Failure: Yes”
- PowerShell 脚本块日志:启用注册表项 EnableScriptBlockLogging = 1(路径:HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging)
查日志不能只靠事件查看器
安全日志(Security)和 PowerShell 日志(Microsoft-Windows-PowerShell/Operational)是主战场,但直接翻看效率低、易遗漏。推荐用 PowerShell 命令精准提取:
- 查最近1小时所有登录失败:Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625; StartTime=(Get-Date).AddHours(-1)} | Select TimeCreated, Message
- 查某用户(如 alice)的所有文件访问尝试:Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4663; Data='alice'} -MaxEvents 100
- 查 PowerShell 执行的高危命令(如 Invoke-Mimikatz):Get-WinEvent -LogName "Microsoft-Windows-PowerShell/Operational" | Where-Object {$_.Message -match 'Invoke-Mimikatz|Net-User'}
定期导出+结构化才真正可用
人工查一次解决不了问题,要让审计可持续。建议封装为脚本并定时执行:
- 每日导出前24小时所有4624(成功登录)、4625(失败登录)、4672(管理员登录)事件到 CSV:Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624,4625,4672; StartTime=(Get-Date).AddHours(-24)} | Export-Csv "C:\Audit\Login_$(Get-Date -f yyyyMMdd).csv" -NoTypeInformation
- 结合 Search-ADAccount -AccountInactive -TimeSpan "90" 找出长期未登录账号,与登录日志交叉验证是否真实失活
- 将结果存入统一位置,配合 Excel Power Query 或简单脚本做趋势统计(如某OU失败登录激增)
别跳过验证和权限检查
很多脚本跑不出结果,不是命令错,而是基础没到位:
- 确保以本地管理员或域管理员身份运行 PowerShell,否则 Get-WinEvent 可能报“拒绝访问”
- 确认安全日志大小足够(默认仅20MB,几小时就满):wevtutil sl Security /ms:512MB
- 检查日志是否被覆盖:Get-WinEvent -ListLog Security | Select LogMode, MaximumSizeInBytes, IsLogFull
- 域环境务必用 New-MDIConfigurationReport -Mode Domain 生成当前 GPO 实际生效的审计配置报告,避免本地策略被覆盖却不知情

















