如何解析 wusa 命令的 evtx 日志输出?

如何解析 wusa 命令的 evtx 日志输出?

弄清楚了如何编写脚本安装密歇根州立大学更新。

$filename = "C:\temp\log\WUInstall_" + $timer + ".evtx"
Start-Process -FilePath wusa -ArgumentList "\\fs1\software\WS2012R2\windows8.1-kb4041693-x64_31e473824b705bf05f3befc423d39fa0c6d0fb49.msu /quiet /norestart /log:$filename" -Wait

使用乌萨使用 Powershell,因为这是避免更新后机器重启的唯一方法——因为我需要等待这个完成并运行几个命令,然后再发出手动重启(也/norestart需要/quiet)。无法将安装结果记录为明文格式,这是.evtx仅有的。

假设更新已经安装(可能是已经修补的操作系统映像,无法控制这一点),然后我运行脚本。它只是运行,没有错误。如果不执行/quiet /norestart它,最终会打印“<..> 已安装在这台计算机上。”此外,在.evtx日志中有几行显示安装过程的状态,包括“InstallWorker.01090:更新已安装”。但我不知道如何解析此日志。我只能解析纯文本日志。

有没有办法解析.evtx日志?这样我就可以把一些逻辑放到我的脚本中来检查状态(更新安装是否正常)并决定采取什么行动?(移动到脚本中的下一步或因错误退出)

或者在 Powershell 5.1 中解决此问题的更好解决方案?应该能够将其应用于 WS 2012 到 2016。

答案1

Get-WinEvent -Path $PathToFile

假设它确实是一个 .evtx 文件,那么应该可以工作。

答案2

首先,我很确定由此生成的日志文件不会是除 ASCII 格式之外的任何其他文件。命名.evtx只会让人感到困惑。

与解析日志文件来查找已知行不同,构建用于判断命令是否成功或失败的函数是 or return codeexit code这应该可以帮助您入门:

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = $commandPath
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = $commandArguments
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
[pscustomobject]@{
    commandTitle = $commandTitle
    stdout = $p.StandardOutput.ReadToEnd()
    stderr = $p.StandardError.ReadToEnd()
    ExitCode = $p.ExitCode  
}
$p.WaitForExit()

获得返回代码后,这可能会有所帮助:

https://support.microsoft.com/en-us/help/938205/windows-update-error-code-list

相关内容