Заметки IT Менеджера

22.06.2012

Как починить Windows Update?


Эта статья объединяет известные мне способы починки агента WSUS.

Ранее, я уже писал, как сверить список компьютеров, которые есть в AD с теми, которые есть во WSUS. Если эти списки не совпадают, то у вас проблема и часть компьютеров не обновляется.

В самом простом случае, вы забыли сделать групповую политику, которая настраивает клиентские компьютеры и серверы на обновление со WSUS, или сконфигурировали ее так, что она не применяется. Ручная настройка параметров через gpedit.msc тоже допустима, но только для тех компьютеров, которые не входят в домен.

Итак, политика применяется, но все равно компьютер не обновляется. Что делать и как лечить?

Если у вас Windows Vista, Windows Server 2008, Windows 7 или Windows Server 2008 R2, то самым первым способом будет скачать с сайта Microsoft утилиту System Update Readiness Tool и запустить ее. Если это не поможет, то нижу приведены различные способы, которые могут помочь вам восстановить работоспособность.

На серверах Windows Server 2008 R2 и Windows Server 2008 стала проявляться следующая проблема. Windows Update показывает, что нужно обновить агента: 

Install new Windows Update software

Мы пытаемся это сделать, но в результате получаем ошибку:

Error Code 80070005

В логе %systemroot%\WindowsUpdate.log обнаружтваются следующие сообщения:

2012-06-20    14:04:12:198     912    698    Setup    FATAL: WuSetupV.exe process ended prematurely, err = 0x80070005
2012-06-20    14:04:12:198     912    698    Setup    WARNING: SelfUpdate install failed, error = 0x80070005
2012-06-20    14:04:17:166     912    b54    Report    REPORT EVENT: {857B6F41-5A79-470E-9DCA-7749D23682E6}    2012-06-20 14:04:12:198+0300    1    182    101    {61CA813A-7585-442E-A66B-B0D15CE6BDC0}    1    80070005    SelfUpdate    Failure    Content Install    Installation Failure: Windows failed to install the following update with error 0x80070005: Windows Update Setup Handler.
2012-06-20    14:04:17:182     912    b54    Report    CWERReporter::HandleEvents — WER report upload completed with status 0x8
2012-06-20    14:04:17:182     912    b54    Report    WER Report sent: 7.5.7601.17514 0x80070005 61CA813A-7585-442E-A66B-B0D15CE6BDC0 Install 101 Managed
2012-06-20    14:04:17:182     912    b54    Report    CWERReporter finishing event handling. (00000000)

WARNING: WU client fails CClientCallRecorder::RemoveService with error 0x80248014

2012-06-21    12:06:26:649    3020    13ec    Setup    Performing SelfUpdate installation
2012-06-21    12:06:26:665    3020    13ec    Setup    WARNING: Failed to stop the WU service, error = 0x80070005
2012-06-21    12:06:26:665    3020    13ec    Setup    WuSetup has finished.  Exit code is 0x00000005
2012-06-21    12:06:26:665     968    f84    Setup    FATAL: WuSetupV.exe process ended prematurely, err = 0x80070005
2012-06-21    12:06:26:665     968    f84    Setup    WARNING: SelfUpdate install failed, error = 0x80070005

Следует проверить разрешения в групповой политике для сервиса "Windows Updates”

Startup Mode: Automatic и разрешения:
 
Type    Name    Permission
Allow   Everyone        Read, Delete
Allow   Everyone        Change template, Start, Stop, Pause and continue

 
Если установка таких разрешений не принесет результата, попробуйте следующий вариант:
 
a) Поменять параметры для “Windows Updates" сервиса в "not defined" и для старта и разрешения
 
b) Удалить ключ в реестре:

HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\Security
 
После следующего обновления групповой политики проблема должна устраниться. gpupdate /force

Для простоты, для следующих способов, выкладываю все эти скрипты в уже готовом виде: Wsus-fix

1. Первый скрипт самый простой, и, на самом деле, даже не для лечения используется, а для того, чтобы принудительно запустить проверку на обновление, ну и, заодно, чистит папку, в которой накапливаются дистрибутивы уже установленных обновлений:

wsus_detect_manual.cmd

net stop wuauserv && net stop bits && net stop cryptsvc

del /f /s /q %windir%\SoftwareDistribution\download\*.*

net start wuauserv && net start bits && net start cryptsvc

wuauclt.exe /detectnow exit

2. Второй скрипт нужен для того, чтобы “оживить” неработающий сервис WSUS. В нем идет чистка от старых обновлений, после чего папки SoftwareDistribution и Catroot2 переименовываются, что при перезапуске сервиса приведет к их пересозданию. Затем системные dll библиотеки перерегистрируются.

fix_wsus_service.cmd

net stop bits
net stop wuauserv
net stop cryptsvc

del /f /s /q %windir%\SoftwareDistribution\download\*.*

ren %systemroot%\System32\Catroot2 Catroot2.old
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old

REM del /f /s /q %windir%\SoftwareDistribution\*.*

del /f /s /q %windir%\windowsupdate.log

%windir%\system32\regsvr32.exe /U /s %windir%\system32\vbscript.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\mshtml.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\msjava.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\msxml.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\actxprxy.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\shdocvw.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Mssip32.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wintrust.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\initpki.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\dssenh.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\rsaenh.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\gpkcsp.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\sccbase.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\slbcsp.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\cryptdlg.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Urlmon.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Oleaut32.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\msxml2.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Browseui.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\shell32.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Mssip32.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\atl.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\jscript.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\msxml3.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\softpub.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wuapi.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wuaueng.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wuaueng1.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wucltui.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wups.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wups2.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wuweb.dll

%windir%\system32\regsvr32.exe /s %windir%\system32\vbscript.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\mshtml.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\msjava.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\msxml.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\actxprxy.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\shdocvw.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Mssip32.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wintrust.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\initpki.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\dssenh.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\rsaenh.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\gpkcsp.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\sccbase.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\slbcsp.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\cryptdlg.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Urlmon.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Oleaut32.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\msxml2.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Browseui.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\shell32.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Mssip32.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\atl.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\jscript.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\msxml3.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\softpub.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wuapi.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wuaueng.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wuaueng1.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wucltui.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wups.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wups2.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wuweb.dll

net start bits
net start wuauserv
net start cryptsvc

wuauclt /detectnow

exit

3. Этот скрипт применяется в тех случаях, когда компьютер был недавно клонирован, или в тех, когда регистрации в WSUS у компьютера так и не произошло. Он отличается от предыдущего только предпоследней строчкой, в которой производится обнуление авторизации с перегенерацией идентификатора. Приведу только эту строчку:

wsus_resetaut_detect_manual.cmd

wuauclt.exe /resetauthorization /detectnow

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

AU_Clean_SID.cmd

@echo on
net stop wuauserv
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f
net start wuauserv
wuauclt /resetauthorization /detectnow

5. Иногда, для того, чтобы все заработало нужно переустановить агента WSUS. Вначале нужно скачать latest Windows Update Agent, ну а затем установить соответствующую редакцию

для x32 версий Windows

windowsupdateagent30-x86.exe /wuforce

для x64 версий Windows

windowsupdateagent30-x64.exe /wuforce

Если вы счастливый обладатель Itanium – догадаетесь сами :-)

После установки агента нужно обязательно перезагрузиться.

6. Для “лечения” ошибок 0x80070005, т.е. ошибок доступа может пригодиться нижеприведенный скрипт. Он восстанавливает доступы для администраторов и системы к реестру и системным папкам.

Для выполнения этого скрипта понадобится майкрософтовская утилита subinacl.exe. Она входит в resource kit для Windows Server 2003, но пользоваться той версией, что входит туда не стоит, т.к. там неприятные ошибки. Следует скачать subinacl.exe версии 5.2.3790.1180.

Restore_registry_and_system_permission.cmd

@echo off
REM Применять при ошибках 0x80070005 Windows Update
subinacl /subkeyreg HKEY_LOCAL_MACHINE /grant=administrators=f
subinacl /subkeyreg HKEY_CURRENT_USER /grant=administrators=f
subinacl /subkeyreg HKEY_CLASSES_ROOT /grant=administrators=f
subinacl /subdirectories %SystemDrive% /grant=administrators=f
subinacl /subkeyreg HKEY_LOCAL_MACHINE /grant=system=f
subinacl /subkeyreg HKEY_CURRENT_USER /grant=system=f
subinacl /subkeyreg HKEY_CLASSES_ROOT /grant=system=f
subinacl /subdirectories %SystemDrive% /grant=system=f

Скрипт был найден в статье базы знаний Microsoft

Все эти скрипты можно выполнять практически автоматически, в случае возникновения проблем. Если в результате проблема таки не решена, то приходится разбираться уже плотнее. И тут нам пригодится тот самый windowsupdate.log, который лежит в корне папки Windows. Если компьютер проблемный, то файл этот большого размера. Для простоты, желательно его удалить перед тем как запускать скрипты. Почти во всех скриптах предусмотрена команда его удаления, но не все так просто. Не смотря на остановку сервиса wuauserv, обычно, его продолжают держать открытые IE и т.п. Поэтому, есть хитрый способ. Запускаю

notepad.exe %windir%\windowsupdate.log

Выделяю весь текст, удаляю его и сохраняю вместо старого файла (не забыть в диалоге сохранения поменять тип файла на *.*, а то по умолчанию – *.txt)

Итак, вернемся к логу, коды ошибок WSUS 3 могут помочь в разбирательстве.

Одна из распространенных проблем со wsus клиентом на серверах может заключаться в том, что сам сервис может подключаться к WSUS через прокси, а этого не нужно и наоборот. Манипулировать этим поведением можно с помощью команды proxycfg

Доступ без прокси: proxycfg –d
Доступ через прокси с опциональным указанием байпас листа: proxycfg –d
Проимпортировать пользовательские настройки: proxycfg –u

В новых версиях Windows используется другой способ — Настройка прокси для сервисов на Windows 7/Windows Server 2008

Стоит заметить, что есть случаи, когда заставить клиента обновляться со wsus так и не получается. У меня есть прецеденты с парочкой Windows Server 2003 R2, которые мне побороть так и не удалось. Поэтому я их обновляю через интернет :-)

Свежие операционные системы типа Windows 7, Windows 2008 иногда “заводятся” с трудом. Для таких случаев, эмпирическим путем, был найден алгоритм типа:
1. Обновляемся первый раз с сайта microsoft с обновлением агента
2. Потом обновляем агента уже локально
3. А потом все начинает работать

Надеюсь, что плоды наших трудов кому-нибудь помогут.

Для простоты, выкладываю все эти скрипты в уже готовом виде: Wsus-fix

Реклама

8 комментариев »

  1. […] Как починить WSUS agent на клиентской машине Filed under: администрирование,оптимизация,Windows,Windows 2003,Windows 7,WSUS — itpadla @ 09:26 Tags: администрирование, скрипт, script, Windows, Windows 2003, windows 2008, Windows 7, windows update service, Windows XP, WSUS, wsus agent 21.06.2012 – Пожалуйста, ищите последнюю версию этого документа по ссылке Как починить Windows Update? […]

    Уведомление от Как починить WSUS agent на клиентской машине « Заметки IT Менеджера — 22.06.2012 @ 10:15 | Ответить

  2. скрипты неплохие, у меня похожее написано,
    в fix_wsus_service.cmd можно еще добавить (на всякий случай)

    sc config wuauserv start= auto
    sc config BITS start= auto
    sc config cryptsvc start= auto

    комментарий от Станислав — 25.06.2012 @ 09:25 | Ответить

    • Можно, просто подразумевается, что это, как и параметры WSUS, прилетает по GP

      комментарий от itpadla — 25.06.2012 @ 09:26 | Ответить

  3. […] Пробовал разное, и autofix от Microsoft “How do I reset Windows Update components?” и рекомендациями от WSUS team – “WSUS KB2720211 : Common issues encountered and how to fix them”, и “How do I reset Windows Update components”, и “Error: 0×80070005 when you try to install updates using Microsoft Update or Windows Update” и еще много чего, включая свой же “Как починить Windows Update?” […]

    Уведомление от Ошибка 0×80070005 при обновлении агента WSUS « Заметки IT Менеджера — 24.07.2012 @ 10:06 | Ответить

  4. Добрый день, не сталкивались ли вы с проблемой с отчетами?

    Развернул на WS 2012R2 WSUS. Получаю от сервера реплики обновления, все необходимое получаю и ставлю. Но душа требует красоты) В дереве меню «Обновления» можно увидеть диаграммы обновления. У каждого графика есть 4 позиции:
    1) Обновления с ошибками установки
    2) Необходимые обновления для компьютеров
    3) Обновления уже установлены или неприменимы
    4) Обновления без информации о состоянии.

    На диаграмме отображается только 2 и 4 пункт. Хочется отображения количество установленных обновлений (3 пункт). Подскажите в чем может быть проблема или откуда капать? Может Report Viewer гонит?

    комментарий от Сергей — 24.02.2016 @ 08:50 | Ответить

    • У меня отображается 1,2 и 4 :-)
      Я даже как-то не задумывался по поводу этой диаграммы, т.к. меня всегда интересовали 1 и 2 пункты

      комментарий от itpadla — 24.02.2016 @ 09:46 | Ответить

  5. Подскажите как бороться с ошибкой 80070002 на клиенте (Windows 7), Не могу подключить его к WSUS. Заранее спасибо.
    Утилиты и инструкции от микрософта не помогают.

    комментарий от Сергей — 25.02.2016 @ 09:08 | Ответить

    • Если я правильно понимаю, то способы, которые я перечислил выше вы уже пробовали?

      Я не припомню именно таких ошибок у себя, то, что я сходу нахожу как причину — проверка правильности синхронизации даты времени на проблемном компьютере, это стоит проверить тщательно, т.к. может вызывать кучу проблем.
      Второе — очистка всех темпов, например disk cleaner из комплекта MS и пересоздание папки Software Distribution (остановить сервис, переименовать существующую папку, создать сервис)

      комментарий от itpadla — 26.02.2016 @ 16:17 | Ответить


RSS feed for comments on this post. TrackBack URI

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Блог на WordPress.com.

%d такие блоггеры, как: