推荐使用 Get-WinEvent 批量导出事件日志,支持灵活筛选、格式化及导出为 CSV 或 EVTX;需注意权限、编码、性能优化及筛选效率,Security 日志需管理员权限。
可以使用 powershell 的 get-winevent 或 wevtutil 命令批量导出事件查看器日志,推荐用 get-winevent(功能更灵活、支持筛选和格式化),配合 export-csv 或 out-file 保存结果。
导出指定日志(如系统、安全、应用程序)为 CSV
以下命令将“系统”日志中最近 100 条错误和警告事件导出为 CSV 文件:
Get-WinEvent -LogName System -MaxEvents 100 |
Where-Object { $_.LevelDisplayName -eq 'Error' -or $_.LevelDisplayName -eq 'Warning' } |
Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, Message |
Export-Csv -Path "C:\Logs\System_Errors_Warnings.csv" -NoTypeInformation -Encoding UTF8-
-LogName 可替换为
Security、Application、Microsoft-Windows-PowerShell/Operational等具体日志名 -
TimeCreated 默认倒序(最新在前),如需正序可加
| Sort-Object TimeCreated -
Message 字段可能含换行或特殊字符,导出 CSV 时建议用
-Encoding UTF8避免乱码
批量导出多个日志到独立文件
用循环一次性导出常用日志(系统、安全、应用)的最近 500 条信息:
Windows 命令行编码与兼容规范。涵盖 GBK/UTF-8 编码、PowerShell/pwsh 互操作、Python/Node.js、Git 配置及代码生成规则。适用于 Windows 10/11 + MSYS2/Git Bash 环境下的所有命令行操作。
$Logs = @('System', 'Security', 'Application')
$OutputDir = "C:\Logs"
New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null
<p>foreach ($Log in $Logs) {
$Path = Join-Path $OutputDir "$Log-Recent500.csv"
try {
Get-WinEvent -LogName $Log -MaxEvents 500 -ErrorAction Stop |
Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, @{Name='Task';Expression={$<em>.TaskDisplayName}} |
Export-Csv -Path $Path -NoTypeInformation -Encoding UTF8
Write-Host "✓ 已导出 $Log 日志到 $Path"
}
catch {
Write-Warning "⚠ 导出 $Log 失败:$($</em>.Exception.Message)"
}
}- 对
Security日志,普通用户默认无读取权限,需以管理员身份运行 PowerShell - 若遇“拒绝访问”,可先运行:
wevtutil gl Security查看日志状态,必要时用wevtutil sl Security /ca:O:BAG:SYD:(A;;0x1;;;S-1-5-20)调整权限(谨慎操作)
按时间范围 + 关键词导出(精准筛选)
例如导出过去 7 天内包含 “disk” 或 “timeout” 的系统日志:
$StartTime = (Get-Date).AddDays(-7)
Get-WinEvent -LogName System -FilterHashtable @{
LogName='System'
StartTime=$StartTime
Id=7,11,12,51,1001 # 可选:指定事件 ID,如磁盘相关常见 ID
} -ErrorAction SilentlyContinue |
Where-Object { $_.Message -match 'disk|timeout' -or $_.ProviderName -match 'disk|stornvme' } |
Select-Object TimeCreated, Id, LevelDisplayName, ProviderName, Message |
Export-Csv "C:\Logs\Disk_Related_7days.csv" -NoTypeInformation -Encoding UTF8-
-FilterHashtable 比
Where-Object更高效,优先用于时间、ID、级别等原生字段筛选 - 关键词匹配用
-match(正则),不区分大小写;精确匹配可用-like或-eq - 导出大量日志时,避免直接用
Get-WinEvent -LogName System(无限制会卡顿),务必加-MaxEvents或-FilterHashtable
用 wevtutil 导出为 evtx(原始二进制格式)
适合归档或后续用事件查看器打开,速度快、保留全部字段:
# 导出最近 1000 条系统日志为 evtx 文件
wevtutil qe System /q:"*[System[(EventID=100 or EventID=200) and TimeCreated[timediff(@SystemTime) <= 604800000]]]" /lf:true /c:1000 /rd:true /format:evtx /ow:true "C:\Logs\System_Filtered.evtx"
<h1>批量导出多个日志(脚本方式)</h1><p>'Application', 'System', 'Security' | ForEach-Object {
$file = "C:\Logs\$<em>.evtx"
wevtutil epl $</em> $file 2>&1 | Out-Null
if (Test-Path $file) { Write-Host "✅ $file 已保存" }
}-
wevtutil epl= export public log,导出为标准 .evtx 格式,兼容性最好 -
wevtutil qe支持 XPath 查询,适合高级筛选(如多条件组合、时间差毫秒级控制) - evtx 文件不能直接用 Excel 打开,但可用事件查看器双击打开,或用
Get-WinEvent -Path读取分析

















