如何使用PowerShell获取过去90天的网络登录历史记录
Windows 过去90天网络登录记录查询解决方案
前置注意事项
- 执行所有命令前,请以管理员身份启动PowerShell
- 若最终查询结果仍不足90天,先确认安全日志保留配置:打开事件查看器→Windows日志→安全→属性,查看最大日志文件大小与覆盖策略,若日志已被循环覆盖则无法恢复已删除的历史记录
可行实现命令
方法1:FilterHashTable写法(可读性更高,适合普通场景)
# 定义90天前的起始时间 $startTime = (Get-Date).AddDays(-90) # 筛选符合条件的登录记录 Get-WinEvent -FilterHashtable @{ ProviderName = 'Microsoft-Windows-Security-Auditing' ID = 4624 # 登录成功事件ID,如需查询登录失败可改为4625 LogonType = 3 # 匹配网络登录类型 StartTime = $startTime }
方法2:XPath写法(查询性能更高,适合日志量极大的场景)
# 转换为UTC时间格式适配XPath语法 $startUtcTime = (Get-Date).AddDays(-90).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.000Z") Get-WinEvent -ProviderName 'Microsoft-Windows-Security-Auditing' -FilterXPath "*[ System[TimeCreated[@SystemTime >= '$startUtcTime']] and EventData[Data[@Name='LogonType']='3'] and System[EventID=4624] ]"
可选优化
如果需要将结果导出到本地CSV文件方便排查,可在命令末尾追加:
| Export-Csv -Path "D:\最近90天网络登录记录.csv" -NoTypeInformation -Encoding UTF8
原命令失效原因说明
- 仅筛选LogonType=3的原命令未添加时间范围限制,且安全日志默认查询仅返回最近部分事件,再加上如果日志开启循环覆盖,更早的记录已被清理,所以只能查到近2天数据
- 调用Get-EventLog的原命令使用的是微软已弃用的旧cmdlet,且筛选的System日志下的Winlogon源仅覆盖本地交互类登录,不会返回全量网络登录事件,因此返回记录数量极少
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

