Иногда так случается, что не все компьютеры корректно регистрируются на WSUS сервере и при наличии большого числа ПК выявить косячные не так уж просто. В помощь к нам приходит PowerShell который с радостью нам поможет выявить конспираторов.
Представленный скрипт — это чуточку модернизированный скрипт, взятый из сети.
Запускать скрипт надо от УЗ имеющий права Администратора на серверах WSUS. Оболочка PowerShell х64.
clear
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
# Подключаемся к серверам WSUS с именами SERVER1 -3 и получаем список компьютеров»:
# 8530 - порт
$wsusSRV1 = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("SERVER1", $false, 8530)
$wsusSRV2 = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("SERVER2", $false, 8530)
$wsusSRV3 = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("SERVER3", $false, 8530)
# Второй параметр $false говорит о том, что будет использоваться HTTP протокол, а не HTTPS, т.е. не будет шифрования.
# Теперь получаем список всех компьютеров зарегистрированных на WSUS-серверах:
$WSUScomps = $wsusSRV1.GetComputerTargets()+ $wsusSRV2.GetComputerTargets()+ $wsusSRV3.GetComputerTargets()
# получаем имена компьютеров
$WSUSCompNames = $WSUScomps | ForEach { $_.FullDomainName.ToUpper() }
# получаем список всех компьютеров из АД в определенной OU, выбираем только включенные УЗ.
$ADcomps = (new-object System.DirectoryServices.DirectorySearcher([ADSI]"LDAP://OU=Компы,DC=contoso,DC=com","(&(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=2))")).findAll()
$ADCompNames = $ADcomps | ForEach {$_.GetDirectoryEntry().dNSHostName.ToString().ToUpper()}
# Получаем имена компьютеров, которые есть в Active Directory, но отсутствуют в WSUS:
"`n`nИмена компьютеров, которые есть в Active Directory, но отсутствуют в WSUS:`n"
$NoWSUSCompNames = $ADCompNames | Where { $WSUSCompNames -notcontains $_ } | Sort-Object
# получаем расширенные данные о ПК
$CompsInfo= $NoWSUSCompNames.Replace(".CONTOSO.COM","") | Get-ADComputer -Properties * | FT Name,description,operatingSystem,LastLogonDate,distinguishedName
#Выводим результаты в файл.
$CompsInfo | Out-File d:/NoWSUS.txt -Width 500 -Encoding default
На выходе у нас файл с компьютерами которые есть в Active Directory но нет на серверах WSUS