1. Skip to Menu
  2. Skip to Content
  3. Skip to Footer

Скрипт очистки WSUS от ненужных обновлений

 

Для осуществления автоматической очистки базы обновлений WSUS нам понадобится следующий PowerShell скрипт, который вы можете найти также на сайте-первоисточнике:

[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
$cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope;
$cleanupScope.DeclineSupersededUpdates = $true
$cleanupScope.DeclineExpiredUpdates = $true
$cleanupScope.CleanupObsoleteUpdates = $true
$cleanupScope.CompressUpdates = $true
$cleanupScope.CleanupObsoleteComputers = $true
$cleanupScope.CleanupUnneededContentFiles = $true
$cleanupManager = $wsus.GetCleanupManager();
$cleanupManager.PerformCleanup($cleanupScope);

 

Давайте более детально рассмотрим имеющиеся опции скрипта, а также варианты его запуска по расписанию.

1) DeclineSupersededUpdates

Опция позволяет отклонять те обновления, которые в последующем были заменены более новыми версиями или же включены в пакеты обновлений (заменяемые обновления). Так, например, hotfix KB2403218 включен в накопительное обновление 6 для SQL Server 2008 R2 и будет отклонен при включенной опции Decline Superseded Updates. Кроме того, отклоняются обновления, которые не были подтверждены в течение 30 и более дней, а так же не востребованы ни одним клиентом.

2) DeclineExpiredUpdates

Позволяет отклонить просроченные обновления. Как правило, Microsoft выпускает новые обновления взамен просроченным, а просроченные - удаляет со своих потоковых серверов загрузки.

3) CleanupObsoleteUpdates

Удаляет из базы неиспользуемые и устаревшие обновления, включая все их ревизии. Удаляются те обновления и ревизии, которые не были подтверждены в течение 30 и более дней.

4) CompressUpdates

Удаляет из базы устаревшие ревизии обновлений.

5) CleanupObsoleteComputers

Удаляет из базы устаревшие компьютеры, которые не контактировали с сервером 30 и более дней.

6) CleanupUnneededContentFiles

Удаляет ненужные файлы обновлений. Включение этой опции позволяет освободить максимальный объем места на диске.

 

Итак, мы разобрались со всеми возможными опциями, используемыми для очистки базы службы WSUS через PowerShell скрипт. Осталось понять, в каком порядке лучше их указывать? Сперва, нам надо очистить список всех устаревших компьютеров, затем отклонить все заменяемые и просроченные обновления, и только лишь потом удалить их из базы. Таким образом, желательный порядок указания опций будет следующим:

$CleanUpScope.CleanupObsoleteComputers = $true
$CleanUpScope.DeclineSupersededUpdates = $true
$CleanUpScope.DeclineExpiredUpdates = $true
$CleanUpScope.CleanupObsoleteUpdates = $true
$CleanUpScope.CleanupUnneededContentFiles = $true
$CleanUpScope.CompressUpdates = $true

 

Я предлагаю использовать вам скрипт, в котором мы соблюдаем правильную последовательность указания опций и не используем две из них (CleanupObsoleteComputers и DeclineSupersededUpdates):

[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
$cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope;
 
#$cleanupScope.CleanupObsoleteComputers = $true
#$cleanupScope.DeclineSupersededUpdates = $true
$cleanupScope.DeclineExpiredUpdates = $true
$cleanupScope.CleanupObsoleteUpdates = $true
$cleanupScope.CleanupUnneededContentFiles = $true
$cleanupScope.CompressUpdates = $true
 
$cleanupManager = $wsus.GetCleanupManager();
$cleanupManager.PerformCleanup($cleanupScope);

 скачать powershell скрипт

Последнее, что нам осталось сделать, это автоматизировать процесс выполнения имеющегося powershell скрипта. Для этого предлагаю создать cmd файл, который надо скопировать в ту же папку, что и сам скрипт. Содержимое cmd файла:

@echo off
@echo Starting WSUS cleanup: %date% %time% >> d:\scripts\WSUS_Cleanup.log
powershell.exe d:\scripts\WSUS_Cleanup.ps1 >> d:\scripts\WSUS_Cleanup.log
@echo Finished WSUS cleanup: %date% %time% >> d:\scripts\WSUS_Cleanup.log
 

скачать cmd файл

Здесь замените пути к файлам скрипта и лога, текст которых выделен красным цветом.

Всё! Теперь можно запускать этот cmd файл через Планировщик заданий по нужному вам графику.

 

Комментарии   

 
0 #11 Алексей 14.01.2015 11:34
Дмитрий, ваша проблема описана тут: https://social.technet.microsoft.com/Forums/windowsserver/en-US/1f5acf3f-2e1e-4aae-9df3-d491f60d63ac/wsus-getadminserver-fails-to-connect-when-run-locally-on-wsus-server?forum=winserverpowershell
Уточните пожалуйста, вы запускаете скрипт на самом WSUS сервере?
Цитировать
 
 
0 #10 Dmitry 12.01.2015 15:21
Добрый день.
При выполнении скрипта выдает ошибку.

Исключение при вызове "GetUpdateServe r" с "0" аргументами: "Выдано исключение типа "Microsoft.UpdateServices.Administra
tion.WsusInvalidServerException"."
строка:1 знак:78
Цитировать
 
 
0 #9 Алексей 30.12.2014 23:24
Михаил, Александр.
В вашем случае имеет место или медленный сервер, или большой размер базы обновлений (или всё перечисленное вместе). Вот тут люди пишут, как можно решить проблему. Как вариант, попробуйте несколько раз запустить скрипт - он выдаст ошибку, запускайте опять и опять. Быть может на 10-ый раз он всё же отработает полностью.
Цитировать
 
 
0 #8 Александр 30.12.2014 11:26
Цитирую Михаил:
Исключение при вызове "PerformCleanup" с "1" аргументами: "Истекло время ожидания (Timeout). Время ожидания истекло до
завершения операции или сервер не отвечает.
Change:Successfully deployed deployment(Decline) of Definition Update 1.159.2215.0 for MSEv2 (BDD 1.159.1951.0 X86) by
CISSTADA\sc6680_adm UpdateID:B69B6C6A-0C36-40E1-B91F-671022896E04 Revision Number:202 "
C:\1\WSUS_Cleanup.ps1:17 знак:1
+ $cleanupManager.PerformCleanup($cleanupScope);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException

Эта же ошибка что делать ? Тоже самое и при использовании визарда.
Цитировать
 
 
0 #7 Михаил 09.12.2014 14:05
Исключение при вызове "PerformCleanup " с "1" аргументами: "Истекло время ожидания (Timeout). Время ожидания истекло до
завершения операции или сервер не отвечает.
Change:Successfully deployed deployment(Decl ine) of Definition Update 1.159.2215.0 for MSEv2 (BDD 1.159.1951.0 X86) by
CISSTADA\sc6680_adm UpdateID:B69B6C 6A-0C36-40E1-B9 1F-671022896E04 Revision Number:202 "
C:\1\WSUS_Cleanup.ps1:17 знак:1
+ $cleanupManager.PerformCleanup($cleanupScope);
+ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocatio nException
+ FullyQualifiedE rrorId : SqlException
Цитировать
 
 
0 #6 rostik 23.05.2014 14:07
спасибо, очень выручил
Цитировать
 
 
0 #5 Алексей 09.01.2014 17:38
Поправил. Спасибо за замечание )
Цитировать
 
 
-1 #4 Евгений 08.01.2014 09:38
При загрузке PS скрипта грузится батник ;-)
Цитировать
 
 
0 #3 Алексей 29.11.2013 13:56
Иван, для вашего удобства добавил ссылки на скачивание powershell скрипта и cmd файла. Спасибо за ваш комментарий!
Цитировать
 
 
0 #2 Иван 28.11.2013 08:23
Здравствуйте!
Не могу скачать скрипт по указанной ссылке. Описание скрипта там есть, а кнопки Download так и не нашел...
Можете скинуть мне скрипт на почту или выложить куда-нибудь?
Заранее благодарен.
Цитировать
 

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