Иногда может возникнуть такая ситуация, что рабочие станции на WSUS заменяют друг друга. Кто последний отрепортился на сервер WSUS — остается там, другой компьютер пропадает из списка. Ситуация может возникнуть при клонировании ОС. В моем же случае компьютеры уже приехали с предустановленной ОС.
Чтобы устранить данную проблему, на компьютерах необходимо удалить параметр SusClientId отсюда:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate
Либо воспользоваться командой:
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f
Также на всякий случай нужно проверить наличие параметров AccountDomainSid и PingID здесь же, и не совпадают ли они на взаимозаменяемых ПК. Если что, то по аналогии
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f
Заново регистрируем рабочую станцию на WSUS
wuauclt /resetauthorization /detectnow
И запускаем проверку обновлений.
Теперь каждый ПК будет на WSUS отдельно.
Вторник, 12 — Август — 2014
Перемещаясь из одной компании в другую, практически везде вижу одну и ту же картину: клонированные с помощью Acronis или Ghost рабочие станции, а также тиражированные на гипервизоре VMWare сервера не распознаются сервером Windows Server Update Services (WSUS). То есть, компьютеры видят WSUS и ставят с него обновления, на самой же консоли управления WSUS их не видно — из 600 рабочих станций распознаются, к примеру, всего 100.
Причина весьма проста — после первого же визита на Windows Update служба WUAUServ генерирует уникальный идентификатор SusClientId, затем администратор сохраняет образ уже обновленной операционной системы. У всех растиражированных с данного образа копии ОС этот идентификатор будет одинаков.
Заменить SusClientId просто, и статей на эту тему предостаточно. Меня же интересовало написание скрипта, который можно применить в любой компании сразу ко всем машинам. Думается, мне не жалко им поделиться с вами. Сохраните скрипт в шаринг NetLogon контроллера домена, затем сконфигурируйте его запуск в качестве Startup Script для всех компьютеров домена. Для отсылки уведомлений на почту раскидайте на все компьютеры программу BLAT (http://www.blat.net/).
@echo off
set NetworkFolder=\\FileServer\Data\Computer_Reports\SusClientId
set LogFileName=C:\Windows\SusClientId.txt
set MailServer=mail.company.lv
set MailFrom=%ComputerName%@Company.local
set RcptTo=ITSupport@Company.lvset SusClientId=None
if not exist %NetworkFolder% goto End
if exist «%NetworkFolder%\Computer_%ComputerName%.txt» goto End
echo Checking WSUS Client ID on %ComputerName% at %date% %time% > «%LogFilename%»
for /f «tokens=2,*» %%a in (‘reg query HKLM\Software\Microsoft\Windows\Currentversion\WindowsUpdate /v SusClientId 2^>NUL ^| findstr SusClientId’) do set SusClientId=%%b
echo Current ID = %SusClientId% >> «%LogFilename%»
if not exist «%NetworkFolder%\ID_%SusClientId%.txt» goto Update:ResetID
reg delete HKLM\Software\Microsoft\Windows\Currentversion\WindowsUpdate /f /v SusClientId
reg delete HKLM\Software\Microsoft\Windows\Currentversion\WindowsUpdate /f /v SusClientIdValidation
net stop WUAUServ
ping localhost
net start WUAUServ
ping localhost
wuauclt /resetauthorization /detectnowfor /f «tokens=2,*» %%a in (‘reg query HKLM\Software\Microsoft\Windows\Currentversion\WindowsUpdate /v SusClientId 2^>NUL ^| findstr SusClientId’) do set SusClientId=%%b
echo WSUS ID has been updated >> %LogFilename%
echo New ID = %SusClientId% >> %LogFilename%
if exist «%NetworkFolder%\ID_%SusClientId%.txt» goto End
ping localhost
blat.exe %LogFilename% -f %MailFrom% -to %RcptTo% -subject «WSUS Client ID Update Notification» -server %MailServer%:Update
echo %ComputerName% > «%NetworkFolder%\ID_%SusClientId%.txt»
echo %SusClientId% > «%NetworkFolder%\Computer_%ComputerName%.txt»
:End
Как оно работает:
- Отрабатывая впервые, скрипт сохраняет в сетевой папке %NetworkFolder% два файла: %ComputerName%.txt и ID_%SusClientId%.txt. Ну вот так мне захотелось.
- В дальнейшем, если файл с именем компьютера уже есть, скрипт просто заканчивает свою работу. Это означает, что он уже отстрелялся ранее.
- Если же обнаруживается, что файла с именем компьютера нет, а файл с идентификатором есть, выходит, что этот ID уже занят кем-то другим. В этом случае скрипт уничтожает свой текущий SusClientId и генерирует его заново. Новый идентификатор высылается на заданный почтовый адрес для того, чтобы отметить сам факт его успешной замены.
Заметил, что при первой зачистке существует вероятность генерации нового идентификатора, идентичного предыдущему. С остальным, думаю, разберётесь сами.
При вводе в эксплуатацию партии новых рабочих станций HP с предустановленной ОС Windows 7 Pro OEM столкнулись с ситуацией, когда новые клиентские компьютеры успешно обновлялись с локального сервера WSUS, но при этом не появлялись на консоли WSUS. Вернее сказать, на консоли отображался лишь один новый компьютер, который последним обратился на WSUS. Изучив WindowsUpdate.log на нескольких таких клиентских компьютерах, стало очевидно, что каждый из них использует один и тот же SusClientId, что и приводит к цикличному переписыванию на WSUS сведений о новых клиентах.
Информация об уникальном идентификаторе клиента WSUS оказалась идентичной в реестре на всех новых компьютерах из этой поставки.
Сверив SID на этих компьютерах, и убедившись в его идентичности, стало понятно, что «ноги растут» из некорректного разлива образа ОС.
Осознавать то, что один из крупнейших мировых вендоров позволяет себе и сегодня такие промахи, конечно неприятно, учитывая то, что степень фрустрации при этом сгущается ещё и воспоминаниями о Double UUID.
Описанию проблемы на WSUS с клиентами с идентичными SusClientId посвящена статья KB903262 — A Windows 2000-based, Windows Server 2003-based, or Windows XP-based computer that was set up by using a Windows 2000, Windows Server 2003, or Windows XP image does not appear in the WSUS console. Исходя из описанных в ней инструкций, мы можем создать пакетный файл, с помощью которого выполним регенерацию SusClientId и перерегистрацию клиента на WSUS:
rem === Останавливаем службу Windows Update
net stop wuauserv
rem === Удаляем идентификационные данные клиента Windows Update
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v PingID /f
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v AccountDomainSid /f
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientId /f
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientIDValidation /f
rem === Удаляем файловый кэш клиента Windows Update
del /f /s /q %windir%\SoftwareDistribution*
rem === Запускаем службу Windows Update
net start wuauserv
rem === Вызываем форсированную перерегистрацию клиента Windows Update
wuauclt.exe /resetauthorization /detectnow
После выполнения этого пакетного файла на проблемной клиентской системе, через несколько минут клиент должен появиться на консоли WSUS как отдельная самостоятельная сущность.
Для того чтобы избежать подобной проблемы, при подготовке образа для развертывания ОС Windows перед выполнением «запаковки» ОС с помощью средства Sysprep, нужно создать файл Sysprep.inf в каталоге с файлом Sysprep.exe с следующим содержанием:
[GuiRunOnce]
Command0="reg.exe delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v PingID /f"
Command1="reg.exe delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v AccountDomainSid /f"
Command2="reg.exe delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientId /f"
Command3="reg.exe delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientIDValidation /f"
Дополнительные источники информации:
- The WSUS Support Team Blog — Resolving the duplicate SUSClientID issue, or “Why don’t all my clients show up in the WSUS console?”
- TechNet Forum — WSUS — Полезные советы
Время на прочтение2 мин
Количество просмотров33K
Клиенты WSUS не хотят обновляться после смены сервера?
Тогда мы идем к вам. (С)
У всех бывали ситуации, когда что-нибудь переставало работать. В данной статье речь пойдет о WSUS (более подробную информации о WSUS можно получить здесь и здесь). А точнее о том, как заставить клиентов WSUS (т.е. наши с вами компьютеры) заново получать обновления после переноса или восстановления существующего сервера обновлений.
Итак, ситуация следующая
Сдох сервер WSUS. Точнее RAID-контроллер аж 2000 года выпуска. Но радости этот факт не прибавил. После непродолжительной возни (с попытками восстановить RAID, загубленный помирающим контроллером), было принято решение
послать все
развернуть новый WSUS-сервер.
В итоге мы получили работающий WSUS, на который почему-то не коннектились клиенты.
Моменты: WSUS привязан с FQDN через внутренний DNS-сервер, WSUS-сервер прописан в групповых политиках и распространяется на клиентов через AD, настройки для сервера по-умолчанию, перед началом всех действий обновите сам WSUS и выполните синхронизацию обновлений.
После анализа ситуации, было выявлено несколько ключевым моментов
- Клинч клиента (речь о wuauclt) при попытке соединиться с SID старого сервера WSUS.
- Проблема с неустановленными обновлениями, скачанными со старого WSUS-сервера.
- Парковка служб влияющих на работу wuauclt (речь о wuauserv, bits и cryptsvc). Парковка произошла по разным причинам, которые детально не анализировались.
В итоге все решение вылилось в маленький скрипт, который распространяется групповыми политиками через AD или собственными руками (и ногами). Скрипт использует наиболее безопасный вариант починки и не приносил ни одного негативного результата уже на протяжении полугода использования.
Опишу, что делается (для особо любопытных)
Паркуем службу сервера обновлений, чистим дескриптор безопасности службы связи с WSUS, удаляем имеющиеся обновления от предыдущего WSUS, чистим реестр от упоминаний о предыдущем WSUS, стартуем службы автоматического обновления (wuauserv), фоновую интеллектуальную службу передачи (bits) и службу криптографии (cryptsvc), в самом конце принудительно стукаемся в WSUS с обнулением авторизации, обнаружением нового WSUS и генерацией отчета на сервер.
И как всегда: все действия описанные выше и ниже вы выполняете на свой страх и риск. Пожалуйста, удостоверьтесь в том что все необходимые данные сохранены до выполнения скрипта.
Скрипт
net stop wuauserv
sc sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)
del /f /s /q %windir%\SoftwareDistribution\download\*.*
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 && net start bits && net start cryptsvc
wuauclt /resetauthorization /detectnow /reportnow
<#
.SYNOPSIS
Reset-WindowsUpdate.ps1 — Resets the Windows Update components
.DESCRIPTION
This script will reset all of the Windows Updates components to DEFAULT SETTINGS.
.OUTPUTS
Results are printed to the console. Future releases will support outputting to a log file.
.NOTES
Written by: Ryan Nemeth
Find me on:
* My Blog: http://www.geekyryan.com
* Twitter: https://twitter.com/geeky_ryan
* LinkedIn: https://www.linkedin.com/in/ryan-nemeth-b0b1504b/
* Github: https://github.com/rnemeth90
* TechNet: https://social.technet.microsoft.com/profile/ryan%20nemeth/
Change Log
V1.00, 05/21/2015 — Initial version
V1.10, 09/22/2016 — Fixed bug with call to sc.exe
V1.20, 11/13/2017 — Fixed environment variables
#>
$arch = Get-WMIObject —Class Win32_Processor —ComputerName LocalHost | Select-Object AddressWidth
Write-Host «1. Stopping Windows Update Services…«
Stop-Service —Name BITS
Stop-Service —Name wuauserv
Stop-Service —Name appidsvc
Stop-Service —Name cryptsvc
Write-Host «2. Remove QMGR Data file…«
Remove-Item «$env:allusersprofile\Application Data\Microsoft\Network\Downloader\qmgr*.dat« —ErrorAction SilentlyContinue
Write-Host «3. Renaming the Software Distribution and CatRoot Folder…«
Rename-Item $env:systemroot\SoftwareDistribution SoftwareDistribution.bak —ErrorAction SilentlyContinue
Rename-Item $env:systemroot\System32\Catroot2 catroot2.bak —ErrorAction SilentlyContinue
Write-Host «4. Removing old Windows Update log…«
Remove-Item $env:systemroot\WindowsUpdate.log —ErrorAction SilentlyContinue
Write-Host «5. Resetting the Windows Update Services to defualt settings…«
«sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)«
«sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)«
Set-Location $env:systemroot\system32
Write-Host «6. Registering some DLLs…«
regsvr32.exe /s atl.dll
regsvr32.exe /s urlmon.dll
regsvr32.exe /s mshtml.dll
regsvr32.exe /s shdocvw.dll
regsvr32.exe /s browseui.dll
regsvr32.exe /s jscript.dll
regsvr32.exe /s vbscript.dll
regsvr32.exe /s scrrun.dll
regsvr32.exe /s msxml.dll
regsvr32.exe /s msxml3.dll
regsvr32.exe /s msxml6.dll
regsvr32.exe /s actxprxy.dll
regsvr32.exe /s softpub.dll
regsvr32.exe /s wintrust.dll
regsvr32.exe /s dssenh.dll
regsvr32.exe /s rsaenh.dll
regsvr32.exe /s gpkcsp.dll
regsvr32.exe /s sccbase.dll
regsvr32.exe /s slbcsp.dll
regsvr32.exe /s cryptdlg.dll
regsvr32.exe /s oleaut32.dll
regsvr32.exe /s ole32.dll
regsvr32.exe /s shell32.dll
regsvr32.exe /s initpki.dll
regsvr32.exe /s wuapi.dll
regsvr32.exe /s wuaueng.dll
regsvr32.exe /s wuaueng1.dll
regsvr32.exe /s wucltui.dll
regsvr32.exe /s wups.dll
regsvr32.exe /s wups2.dll
regsvr32.exe /s wuweb.dll
regsvr32.exe /s qmgr.dll
regsvr32.exe /s qmgrprxy.dll
regsvr32.exe /s wucltux.dll
regsvr32.exe /s muweb.dll
regsvr32.exe /s wuwebv.dll
Write-Host «7) Removing WSUS client settings…«
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
Write-Host « Resetting the WinSock…«
netsh winsock reset
netsh winhttp reset proxy
Write-Host «9) Delete all BITS jobs…«
Get-BitsTransfer | Remove-BitsTransfer
Write-Host «10) Attempting to install the Windows Update Agent…«
if($arch -eq 64){
wusa Windows8—RT—KB2937636—x64 /quiet
}
else{
wusa Windows8—RT—KB2937636—x86 /quiet
}
Write-Host «11) Starting Windows Update Services…«
Start-Service —Name BITS
Start-Service —Name wuauserv
Start-Service —Name appidsvc
Start-Service —Name cryptsvc
Write-Host «12) Forcing discovery…«
wuauclt /resetauthorization /detectnow
Write-Host «Process complete. Please reboot your computer.«