需要使用 cmd 或 powershell 备份 windows 服务器的整个事件日志

需要使用 cmd 或 powershell 备份 windows 服务器的整个事件日志

我的任务是备份所有服务器上的所有事件日志并保留 30 天。我编写了一个简单的 powershell 来执行此操作。

Get-winevent  -Listlog  * | select  Logname, Logfilepath | ForEach-Object -Process { 
$name = $_.Logname
$path = $_.logfilepath
wevtutil.exe EPL $name  C:\Users\Owner\Desktop\eventlogs\$name.evtx`
}

这仅导出 NTclassic 事件日志的日志文件,对于其余日志,我收到系统无法找到指定路径的错误。我更改了 wevtutil 并包含了 /lf 参数并传递了 $path 变量,它仍然相同。除了经典日志外,对于其他所有日志,以下是我收到的错误。

wevtutil.exe : Failed to export log Microsoft-Windows-WPD-MTPClassDriver/Operational. 
The system cannot find the path specified.
At line:19 char:1
+ wevtutil.exe EPL $name  C:\Users\Owner\Desktop\eventlogs\$name.evtx
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Failed to expor...path specified.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandErrorBlockquote

还有其他更好的方法来完成我想做的事情吗?

答案1

问题在于$name变量。如果您检查哪些导出文件已创建,哪些未创建,您会注意到所有包含正斜杠的日志名称/都会生成错误消息。原因是/文件名中的字符无效(在 Windows 下)。

/您可以通过用有效字符替换来运行导出:

Get-winevent  -Listlog  * | select  Logname, Logfilepath | ForEach-Object -Process { 
$name = $_.Logname
$safename = $name.Replace("/","-")
wevtutil.exe EPL $name  C:\Users\Owner\Desktop\eventlogs\$safename.evtx
}

答案2

您可以安装一个集中式 Syslog 服务器(即格雷洛格)并转发来自每个服务器的所有事件,例如NX日志。这样,您将获得卓越的日志可管理性和安全性……

相关内容