wsus_logo

Автоматическая очистка сервера WSUS и переиндексация базы данных SUSDB

Регулярный запуск мастера очистки (Cleanup Wizard) из консоли управления WSUS не всегда удобен. С появлением PowerShell командлета Invoke-WsusServerCleanup в Windows Server 2012 R2, 2016 автоматизация этого процесса стала крайне простой. Больше не нужны громоздкие сценарии с вызовами .NET и прочими сложностями. Теперь весь сценарий очистки сводится к запуску этого командлета с нужными параметрами.
В процессе очистки важен один момент: если у вас настроена иерархия WSUS c вышестоящим и подчинёнными серверами, то очистку необходимо начинать с подчинённых серверов. Если же все WSUS находятся на одном уровне в иерархии, то очистку можно производить одновременно на всех серверах.

Очистка WSUS

Командлет принимает следующие 6 параметров очистки:
-CleanupObsoleteComputers — удаление устаревших компьютеров (obsolete computers) из базы данных;
-CleanupObsoleteUpdates — удаление устаревших обновлений (obsolete updates) из базы данных;
-CleanupUnneededContentFiles — удаление файлов обновлений, которые больше не нужны (unneeded update files);
-CompressUpdates — удаление устаревших ревизий обновлений (obsolete revisions) из базы данных;
-DeclineExpiredUpdates — отклонение истёкших обновлений (expired updates)
-DeclineSupersededUpdates — отклонение заменяемых обновлений (superseded updates)
Все 6 параметров идентичны выбранным параметрам в мастере очистки:
Мастер очистки WSUS (Cleanup Wizard)

$filename = (Get-Date).ToString("yyyy-MM-dd-hh-mm-ss")
Invoke-WsusServerCleanup -CleanupObsoleteComputers -CleanupObsoleteUpdates -CleanupUnneededContentFiles -CompressUpdates -DeclineExpiredUpdates -DeclineSupersededUpdates | Out-File "C:\WSUS\CleanUp\$filename.txt"

Сценарий создаёт лог файлы по датам запуска в таком виде:

Obsolete Updates Deleted:0
Expired Updates Declined: 0
Obsolete Updates Deleted:61
Updates Compressed:816
Obsolete Computers Deleted:18
Diskspace Freed:1175981193

Запуск можно настроить в планировщике задач:

Время очистки не должно совпадать с временем синхронизации WSUS!

Переиндексация базы данных WSUS

В дополнение к процедуре очистки WSUS необходимо также выполнять переиндексацию базы данных SUSDB, чтобы её эффективность не падала со временем. Переиндексация должна выполнятся также в момент наименьшей загрузки базы данных и ни в коем случае не совпадать с временем синхронизации WSUS. Для переиндексации существует замечательный скрипт Re-index the WSUS 3.0 Database, работает он и для Windows Server 2016.
Процедура запуска сценария будет разной для разных вариантов установки SUSDB (Windows Internal Database или SQL Server). Для того, чтобы определить, где развёрнута база данных WSUS необходимо на сервере WSUS проверить значение реестра SQLServerName в разделе HKLM\Software\Microsoft\Update Services\Server\Setup. Если в значении присутствуют ##SSEE или ##WID, то база данных развёрнута на WID, а если вы видите в этом значении имя хоста или имя_сервера\экземпляр, то база данных развёрнута на SQL Server:

Далее, в случае, если база данных развёрнута на WID нам необходимо использовать утилиту sqlcmd и планировщик задач Windows. Если SQL Server — можно запланировать выполнение сценария с помощью планов обслуживания (Maintenance Plans).

Windows Internal Database

Чтобы установить sqlcmd можно скачать и установить SQL Server Management Studio (SSMS) для версии вашей WID. Версию можно определить в лог-файле:

  • В Windows Server 2012 — C:\Windows\WID\Log — открываем error.log, где в самом начале файла указана используемая версия SQL, для которой нам нужно скачать SSMS Express.
  • В Windows Server 2008 R2 и ниже — C:\Windows\SYSMSI\SSEE\MSSQL.2005\MSSQL\LOG — также открываем error.log и в самом начале файла смотрим версию.

Для детальной информации по билдам и версиям SQL рекомендую использовать официальную страницу How to determine the version, edition, and update level of SQL Server and its components

Скачиваем SSMS:
Microsoft SQL Server 2008 Express
Microsoft SQL Server 2008 R2 SP1 Express
Microsoft SQL Server 2008 R2 SP2 Express
Microsoft SQL Server 2012 Express
Microsoft SQL Server 2014 Express

Выбираем только SQLManagementStudio_x64_ENU.exe:

В Server Core SSMS не устанавливается. Для работы sqlcmd необходимо установить:

Microsoft ODBC Driver for SQL Server:
https://www.microsoft.com/en-us/download/details.aspx?id=53339

Microsoft Command Line Utilities for SQL Server:
https://www.microsoft.com/en-us/download/details.aspx?id=53591

После установки всего необходимого сохраняем сценарий в файл Re-Index-SUSDB.sql.
Создаём базовую задачу в планировщике. К Server Core можно подключится удалённо оснасткой Computer Management:

Запуск планируем так, чтобы эта задача не пересекалась с синхронизацией WSUS и с задачей очистки WSUS:

Далее указываем параметры запуска сценария переиндексации. Для начала найдите расположение sqlcmd для вашей установки.

"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S \\.\pipe\Microsoft##WID\tsql\query -i C:\WSUS\CleanUp\Re-Index-SUSDB.sql -o c:\WSUS\CleanUp\Re-Index-SUSDB-LOG.txt

в Windows Server 2008/R2 — \\.\pipe\Microsoft##SSEE\sql\query
в Windows Server 2012/R2 — \\.\pipe\MICROSOFT##WID\tsql\query

Параметр -i указывает путь к сценарию, который мы сохранили ранее. Параметр -o указывает путь до лог-файла:

Соглашаемся с определёнными параметрами:

Открываем свойства созданной задачи и указываем аккаунт от имени которого запускаем задачу:

Запускаем задачу вручную и проверяем лог файл.

SUSDB на SQL Server

В случае, когда SUSDB установлена на полноценном SQL сервере всё немного упрощается.
Открываем SQL Server Management Studio и подключаемся к экземпляру, где находится база SUSDB. Разворачиваем раздел Management и создаём новый Maintenance Plan:

Вводим имя плана:

Выбираем Subplan1 и открываем Toolbox:

Перетаскиваем задачу Execute T-SQL Statement Task в наш план:

Правым щелчком открываем редактирование:

Вставляем сценарий переиндексации в окно редактора:

Создаём расписание запуска. Опять же планируем так, чтобы не пересекаться с заданиями синхронизации WSUS и очистки:

Сохраняем план Ctrl+S. В план обслуживания можно перед переиндексацией включить и резервное копирование базы данных, это будет хорошим дополнением.

Для проверки запустим его вручную:

Добавить комментарий