Как вы уже поняли, моим хобби является написание скриптов на Powershell для Active Directory 🙂
В этот раз я поделюсь скриптом, который составляет табличку по всем доменным контроллерам, в которой содержится сайт AD, в которой содержится сайт, операционная система с сервис-паком, производитель и модель сервера, количество процессоров и памяти.
Из полезного – еще можно выдернуть наличие на контроллере домена роли глобального каталога, FSMO-ролей, RODC или нет. Плюс убрать саму привязку скрипта к модулю AD for Powershell. Но атрибута “глобальный каталог” или RODC в выводе Get-ADDomainController я не увидел, а FSMO-роли возвращаются в виде массива значений, поэтому в экспорт CSV не попадают.
Get-ADDomainController -Filter * | select hostname, site, operatingsystem, OperatingSystemServicePack, @{name="vendor";expression={(gwmi Win32_ComputerSystem -ComputerName $_.hostname).Manufacturer}}, @{name="model";expression={(gwmi Win32_ComputerSystem -ComputerName $_.hostname).model}}, @{name="CPU, count";expression={(gwmi Win32_ComputerSystem -ComputerName $_.hostname).NumberOfLogicalProcessors}}, @{name="RAM/GB";expression={[math]::round((gwmi Win32_ComputerSystem -ComputerName $_.hostname).Totalphysicalmemory/1GB)}} | sort hostname | Export-
Csv -NoTypeInformation C:\scripts\dclist.csv
Полученный CSV-файл открывается в Excel и обрабатывается с помощью операции “Текст по столбцам”.
[table id=1 /]
Для RODC у Get-ADDomainController есть IsReadOnly. Можно его в фильтре использовать.
Глобальный каталог можно из Get-ADForest выдернуть.
FSMO-роли – в чем сложность обойти массив foreach?
На самом деле, для RODC есть свойство IsReadOnly, для глобального каталога – IsGlobalCatalog. Смотрел невнимательно.
Добавляем эти свойства в Select в виде “select hostname, IsReadOnly, IsGlobalCatalog, …”
—
Сложностей в обходе массива foreach не было – был вопрос в затрачиваемом времени. Мне хватило вывода утилиты netdom query fsmo.
Андрюха, я тебе не завидую :)) тебе скриптами приходится контроллеры домена инвентаризировать :))
Знаешь, мне это нравится куда больше, чем заря моей карьеры и два доменных контроллера, стоящие в моем кабинете 🙂
а как бы туда еще поддомены добавить? 🙂 желательно с полным именем))))
Макс, как-то так
Вместо “Get-ADDomainController -Filter *” используйте
(Get-ADForest).Domains | % { Get-ADDomainController -Discover -DomainName $_ } | % { Get-ADDomainController -server $_.Name -filter *}