Блог did5.ru

Про АйТи и около айтишные темы

Сравнение списка ПК во WSUS и в AD

Комментариев нет

Однажды заметил, что не все компьютеры домена есть в списке WSUS. Стал разбирать и оказалось, что в списке AD около 1070 рабочих станций, а в списке WSUS всего 980. Следовательно не обновляется почти десятая часть ПК. Встал вопрос, а как же выяснить каких ПК не в списке, чтобы провести аудит и узнать причину. В интернете наткнулся на скрипт на PowerShell от Ильи Сазонова, который получает с помощью WSUS API список ПК WSUS и сравнивает его со списком ПК из Active Directory. На выходе получаем текстовый файл со списком компьютеров, которые по каким-то причинам на обновляются.

Скачать WSUS_AD_compare.7z

Далее привожу листинг скрипта. Копируем текст и сохраняем в текстовом файле с расширением ps1

#######################################################################################
#
# WSUSAD-Compare.ps1 PowerShell (c) sie
# WSUS - сверка списка компьютеров с AD
# http://sazonov.spaces.live.com/blog/cns!C80884C5BEC6A15D!170.entry
#######################################################################################
# Текущая версия WSUS имеет API, который позволяет удаленное управление сервером.
# Чтобы его задействовать, необходимо установить на компьютер клиентскую часть сервера.
# После чего запускаем оболочку Powershell 2.0 и загружаем WSUS API:

[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") 

# Теперь надо подключаемся к удаленному серверу по имени «WSUS»:
# 8530 - порт

$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("WSUS", $false, 8530) 

# Второй параметр $false говорит о том, что будет использоваться HTTP протокол, а не HTTPS, т.е. не будет шифрования.
# Теперь получаем список всех компьютеров зарегистрированных на WSUS-сервере: 

$WSUScomps = $wsus.GetComputerTargets() 

# Каждый элемент массива $WSUScomps это объект, а нам нужны только имена компьютеров. Получаем FQDN имена компьютеров: 

$WSUSCompNames = $WSUScomps | ForEach { $_.FullDomainName.ToUpper() }
#$WSUSCompNames | Out-File .\WSUScomps.txt -Encoding default 

# Перевод имени в верхний регистр не критичен (по умолчанию Powershell выполняет сравнение строк без учета регистра), но формально все же это надо сделать.
# Следующий шаг – получение списка учетных записей компьютеров из Active Directory: 

$ADcomps = (new-object System.DirectoryServices.DirectorySearcher([ADSI]"LDAP://OU=Рабочие станции,OU=Оборудование,DC=domen,DC=RU","(&(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=2))")).findAll() 

# Тут конструкция !userAccountControl:1.2.840.113556.1.4.803:=2 исключает запрещенные (disabled) учетные записи компьютеров. LDAP://ou=DEPS,dc=DOMAIN,dc=RU задает корень поиска в дереве AD. objectCategory=computer – выбираем только учетные записи компьютеров.
# Из объектов учетных записей компьютеров извлекаем имена компьютеров (также формально переводим их в верхний регистр): 

$ADCompNames = $ADcomps | ForEach {$_.GetDirectoryEntry().dNSHostName.ToString().ToUpper()} 

# Получаем имена компьютеров, которые есть в Active Directory, но отсутствуют в WSUS:
"`n`nИмена компьютеров, которые есть в Active Directory, но отсутствуют в WSUS:`n"
$NoWSUSCompNames = $ADCompNames | Where { $WSUSCompNames -notcontains $_ } | Sort-Object
$NoWSUSCompNames | Out-File .\NoWSUS.txt -Encoding default
#$NoWSUSCompNames
# И последний шаг – получаем имена компьютеров, которые есть в WSUS, но отсутствуют в AD:
"`n`nИмена компьютеров, которые есть в WSUS, но отсутствуют в Active Directory:`n"
$NoADCompNames = $WSUSCompNames | Where { $ADCompNames  -notcontains $_ } | Where {$_ -like "*.vnipiet.ru"} |Sort-Object
#$NoADCompNames | Out-File .\NoADComp.txt -Encoding default
#$NoADCompNames

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

Нашли опечатку в тексте? Пожалуйста, выделите ее и нажмите Ctrl+Enter! Спасибо!


Хотите поблагодарить автора за эту заметку? Вы можете это сделать!


Автор: did5

15 Июн 2011 в 8:05

Рубрика: PowerShell,WSUS

Метки: ,

Ваш отзыв