如何在Windows 10/Windows Server 2015上查看和解析WindowsUpdate.log?
历史上," WindowsUpdate.log"纯文本文件已用于分析Windows Update代理和服务的操作。但是,Windows 10(Windows Server 2015/2019)中的Windows Update日志以Windows事件跟踪文件格式(ETW)而不是普通文本文件的形式保存。通过这种操作,Windows开发人员计划提高日志子系统的性能,并减少磁盘上文本文件所占用的空间。
因此,Windows Update事件不再实时写入"%windir%\ WindowsUpdate.log"文件。即使该文件仍然存在于Windows文件夹的根目录中,它仅表示ETW格式现在用于收集WU日志。
Windows Update日志现在使用ETW(Windows事件跟踪)生成。在Windows Server 2015中,当我们运行Get-WindowsUpdateLog cmdlet时,我们可能会收到错误SymSrv.dll丢失的错误:
请运行Get-WindowsUpdateLog PowerShell命令将ETW跟踪转换为可读的WindowsUpdate.log。
有关更多信息,请访问http://go.microsoft.com/fwlink/?LinkId=518345
现在,我们无法快速分析Windows Update代理服务的新日志记录方法的缺点,无法在WindowsUpdate.log文本文件中找到错误代码(请参阅Windows Update错误代码的完整列表),检查WSUS代理设置并分析更新安装历史记录。
我们可以将ETW事件转换为纯文本WindowsUpdate.log文件,以更方便地分析更新服务事件。为此,请使用PowerShell cmdletGet-WindowsUpdateLog
。该cmdlet允许我们从所有.etl
文件(它们存储在C:\WINDOWS\Logs\WindowsUpdate中)收集信息,并创建一个WindowsUpdate.log文本文件。
要生成WindowsUpdate.log文件并将其保存在C:\PS\Logs中,请在PowerShell控制台中运行以下命令:
Get-WindowsUpdateLog -logpath C:\PS\Logs\WindowsUpdate.log
分析ETL文件的另一种方法是使用Tracefmt.exe实用程序从.etl接收数据,但这种方法有些复杂。
Copy-Item : Cannot find path 'C:\Program Files\Windows Defender\SymSrv.dll' because it does not exist. At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\WindowsUpdate\WindowsUpdateLog.psm1:56 char:5
如果服务器上未安装Windows Defender,则通常缺少文件C:\Program Files\Windows Defender\SymSrv.dll。
要修复该错误,我们可以安装Windows Defender,从另一个Windows Server 2015/Windows 10复制SymSrv.dll文件或者在本地WinSxS文件夹中搜索文件SymSrv.dll(在我的情况下,该目录称为C:\Windows\WinSxS\amd64_windows-defender-service-cloudclean_),然后将其复制到C:\Program Files\Windows Defender文件夹。
在较早的Windows 10版本中,首次运行Get-WindowsUpdateLog cmdlet时,它将下载并安装Microsoft Internet符号存储。 Windows 10的最新版本可在线访问Azure中的Microsoft Character Server。然后,该cmdlet:
- 从所有.etl文件中读取数据;
- 数据将转换为CSV(默认情况下)或者XML格式;
- 来自文件的中间格式的数据将被转换并添加到LogPath参数中指定的日志文本文件中(如果未指定LogPath中的参数,则会在运行该命令的用户的桌面上创建WindowsUpdate.log)
提示。请注意,创建的WindowsUpdate.log文件是静态的,不会像以前的Windows版本中那样实时更新。若要更新文件,我们需要再次运行Get-WindowsUpdateLog cmdlet或者创建一个脚本,该脚本将以一定频率自动更新文件(文件被覆盖)。
使用以下PowerShell命令打开日志文件:
Invoke-Item -Path C:\PS\Logs\WindowsUpdate.log
这意味着我们没有安装Windows Symbol服务器(今天我们无法下载单独的Windows Symbol安装程序,因为它是从Azure中的符号存储中自动下载的)。对于隔离的环境,我们可以根据文章Windows Update的脱机符号使用脱机版本的符号服务器。
分析生成的WindowsUpdate.log文件非常困难,因为它从许多事件源收集数据:
- 代理Windows Update代理事件;
- AU自动更新;
- AUCLNT用户交互;
- HANDLER更新安装程序管理;
- MISC通用WU信息;
- PT与本地数据存储区同步更新;
- REPORT报告收集;
- SERVICE wuauserv服务启动/停止事件;
- SETUP安装新版本的Windows Update客户端;
- DownloadManager使用BITS将更新下载到本地缓存;
- 处理程序,安装程序安装程序头文件(CBS等);
- 和许多其他。
我们可以使用简单的正则表达式从Windows Update代理(代理)中选择最后30个事件:
Select-String -Pattern '\sagent\s' -Path C:\PS\Logs\WindowsUpdate.log | Select-Object -Last 30
我们可以通过几种来源过滤WindowsUpdate.log中的事件:
Select-String -Pattern '\sagent\s|\smisc\s' -Path c:\PS\Logs\WindowsUpdate.log | Select-Object -Last 50
同样,我们可以通过KB号,错误(失败,退出代码,致命)来解析文本文件中的事件。
我们还可以为远程计算机或者服务器生成WindowsUpdate.log文件:
Get-WindowsUpdateLog -ETLPath \ny-srf-1\C$\windows\Logs\WindowsUpdate -LogPath C:\PS\Logs\windowsupdate-ny-srf-1.log
我们还可以使用事件查看器日志来分析Windows Update服务的操作。展开以下"事件视图"部分:"应用程序和服务日志-> Microsoft-> Windows> WindowsUpdateClient->操作中"。
我们可以使用PSWindowsUpdate模块来管理PowerShell cli中的更新。