Перегляд журналу оновлень WindowsUpdate.log в Windows 10 / Windows Server 2016

Історично для аналізу роботи агента і служби поновлення Windows використовується текстовий файл WindowsUpdate.log. Однак в Windows 10 (Windows Server 2016/2019) замість звичного текстового файлу логи Windows Update ведуться в форматі Event Tracing for Windows (ETW). За рахунок цього збільшується швидкодія підсистеми записи логів і економиться місце на диску.

Таким чином, події Windows Update тепер більше не записуються в реальному часі в файл % Windir% \ WindowsUpdate.log. І хоча сам файл все ще присутній в корені папки Windows, в ньому лише зазначено, що для збору логів тепер застосовується формат ETW.

Windows Update logs are now generated using ETW (Event Tracing for Windows). % MINIFYHTML94c94c461bdbf801ea1528dc9c5b1f4e5% Please run the Get-WindowsUpdateLog PowerShell command to convert ETW traces into a readable WindowsUpdate.log. For more information, please visit http://go.microsoft.com/fwlink/?LinkId=518345

Головна незручність для адміністраторів - тепер ви не можете швидко проаналізувати текстовий файл WindowsUpdate.log, знайти помилки в службі агента оновлень Windows (див. Повний список помилок Windows Update), перевірити настройки WSUS і проаналізувати історію установки оновлень.

Ви можете конвертувати події ETW в звичний текстовий формат WindowsUpdate.log для більш зручного аналізу подій служби оновлень. Для цього використовується командлет PowerShell - Get-WindowsUpdateLog. Даний командлет дозволяє зібрати інформацію з усіх .etl файлів (зберігаються в каталозі C: ​​\ WINDOWS \ Logs \ WindowsUpdate) і сформувати один файл WindowsUpdate.log.

Щоб сформувати файл WindowsUpdate.log і помістити його в каталог C: \ PS \ Logs, виконайте наступну команду в консолі PowerShell:

Get-WindowsUpdateLog -logpath C: \ PS \ Logs \ WindowsUpdate.log

У Windows Server 2016 при запуску командлета Get-WindowsUpdateLog може з'явитися помилка відсутнього файлу SymSrv.dll:

Copy-Item: Can not 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

Файл "C: \ Program Files \ Windows Defender \ SymSrv.dll" зазвичай відсутня, якщо на сервері не встановлено антивірус Windows Defender.

Щоб виправити помилку, ви можете встановити Defender, скопіювати файл SymSrv.dll з іншого Windows Server 2016 / Windows 10 або пошуком знайти його в каталозі "C: \ Windows \ WinSxS \" (у мене каталог називався C: \ Windows \ WinSxS \ amd64_windows -defender-service-cloudclean_ ...) і скопіювати його в папку C: \ Program Files \ Windows Defender.

У старих версіях Windows 10 при першому запуску командлет Get-WindowsUpdateLog завантажить і встановить сервер символів Microsoft (Microsoft Internet Symbol Store). В останніх версіях Windows 10 виконується онлайн доступ до сервера символів Microsoft в Azure. Потім командлет:

  1. Збирає дані з усіх .etl файлів;
  2. Перетворює дані в CSV (за замовчуванням) або XML формат;
  3. Переконвертує дані з проміжних файлів і додає їх в текстовий файл журналу, наданого в секції LogPath (якщо параметр LogPath не заданий, файл WindowsUpdate.log створюється на робочому столі користувача, що запустив команду).
У деяких випадках в журналі WindowsUpdate.log ви бачити такі рядки

Unknown (10): GUID = 5e0ee4cc-3618-f43a-06ca-9d3b0dabc11a (No Format Information found).

Це означає, що у вас не встановлений сервер символів Windows Symbol (зараз можна скачати окрему програму установки Windows symbols, тому що вони автоматично завантажуються зі сховища символів в Azure). Для ізольованих середовищ ви можете використовувати офлайн версію сервера символів згідно зі статтею Offline Symbols for Windows Update.

Відкрийте файл журналу за допомогою такої команди PowerShell:

Invoke-Item -Path C: \ PS \ Logs \ WindowsUpdate.log

Порада. Зверніть увагу, що створений файл WindowsUpdate.log є статичним і не оновлюється в реальному часі, як в попередніх версіях Windows. Щоб оновити дані журналу оновлень, потрібно ще раз запустити командлет Get-WindowsUpdateLog, або створити скрипт, автоматично оновлює файл з якоюсь періодичністю (файл перезатірается).

Аналізувати файл, WindowsUpdate.log досить складно, тому що в ньому збираються дані з багатьох джерел:

  • AGENT- події агента Windows Update;
  • AU - автоматичне оновлення;
  • AUCLNT- взаємодія з користувачем;
  • HANDLER- управління монтажником оновлень;
  • MISC- загальна інформація;
  • PT- синхронізація оновлень з локальним сховищем;
  • REPORT- збір звітів;
  • SERVICE- запуск / вимикання служби wuauserv;
  • SETUP- установка нових версій клієнта Windows Update;
  • DownloadManager - завантаження оновлень в локальних кеш;
  • Handler, Setup - заголовки установників (CBS і т.п.);
  • І т.д.

Ви можете вибрати останні 30 подій від агента оновлення Windows (agent) за допомогою простого регулярного виразу:

Select-String -Pattern '\ sagent \ s' -Path C: \ PS \ Logs \ WindowsUpdate.log | Select-Object -Last 30

Можна відфільтрувати події в балці за кількома джерелами:

Select-String -Pattern '\ sagent \ s | \ smisc \ s' -Path c: \ PS \ Logs \ WindowsUpdate.log | Select-Object -Last 50

Аналогічно ви можете шукати події за номером KB, помилка (рядки FAILED, Exit Code, FATAL).

Також ви можете сформувати файл WindowsUpdate.log для віддаленого комп'ютера / сервера:

Get-WindowsUpdateLog -ETLPath \\ PC221 \ C $ \ windows \ Logs \ WindowsUpdate -LogPath C: \ PS \ Logs \ windowsupdatePC221.log

Також для аналізу роботи служби оновлень Windows може бути корисні журнали Event Viewer в розділі Applications and Services Logs -> Microsoft -> Windows -> WindowsUpdateClient -> Operational.

Для управління оновленнями з PowerShell ви можете використовувати модуль PSWindowsUpdate.