Как вы уже поняли, моим хобби является написание скриптов на 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 и обрабатывается с помощью операции «Текст по столбцам».
hostname | site | operatingsystem | ServicePack | vendor | model | CPU, count | RAM/GB |
---|---|---|---|---|---|---|---|
DC1 | site1 | Windows Server 2008 R2 Standard | Service Pack 1 | Hewlett-Packard | HP 500B Microtower | 2 | 2 |
DC2 | site1 | Windows Server 2008 R2 Standard | Service Pack 1 | HP | ProLiant DL360 G5 | 4 | 4 |
DC3 | site2 | Windows Server 2008 R2 Standard | Service Pack 1 | HP | ProLiant DL380 G5 | 4 | 4 |
DC4 | site3 | Windows Server 2012 R2 Standard | Microsoft Corporation | Virtual Machine | 8 | 8 | |
DC5 | site4 | Windows Server 2012 R2 Standard | VMware, Inc. | VMware Virtual Platform | 4 | 8 |
Для 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 *}