Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает о запросе информации о DHCP-серверах из контекста конфигурации ActiveDirectory.
Microsoft Scripting Guy, Ed Wilson на связи. Одна из замечательных вещей в Windows Server 2012 и Windows 8 – это, то, что в них доступно множество командлетов и функций. После установки Remote Server Admin Tools (RSAT) на Windows 8 становятся доступны все административные модули Windows PowerShell. Таким образом, кроме командлетов клиента DHCP на моем компьютере присутствуют и командлеты и функции для сервера DHCP.
Определяем местонахождение информации о DHCP-серверах
Итак, первое, что мне нужно сделать, это определить местонахождение информации о DHCP-серверах в Active Directory. Я знаю, что она не находится в контексте по умолчанию, поэтому возможно, что она находится в контексте конфигурации. Для ее поиска я воспользуюсь ADSI Edit. На скриншоте приведен нужный нам контейнер.
Запрашиваем Active Directory об авторизованных DHCP-серверах
Теперь, когда я знаю, где находится информация о DHCP-серверах, я могу с легкостью запросить ее. Для этого я воспользуюсь командлетом Get-ADObject из модуля ActiveDirectory. Поскольку я использую Windows PowerShell 3.0, мне не обязательно предварительно его импортировать. Но, раз я точно знаю, что я буду его использовать, я могу это сделать и вручную.
Import-Module ActiveDirectory
Теперь мне нужно запросить контекст конфигурации. Для этого я использую параметр –SearchBase командлета Get-ADObject.
-SearchBase «cn=configuration,dc=iammred,dc=net»
Если я запущу командлет в таком виде, он вернет огромное количество информации. Мне определенно стоит воспользоваться фильтром. Я могу указать запрос с использование диалекта LDAP, но ведь есть параметр –Filter, который работает ничуть не хуже и кроме того более понятен.
Когда я искал контейнер, содержащий записи о DHCP-серверах, я обратил внимание на значение в столбце Class, поскольку оно пригодится для построения фильтра в моем запросе. Т.е. мне нужны объекты класса DHCPClass. Он указывается в атрибуте ObjectClass. Ниже приведена часть запроса.
-Filter «objectclass -eq ‘dhcpclass’
Также мне не интересен контейнер DHCPRoot, поскольку он не содержит имен DHCP-серверов. Поэтому я добавлю исключение в фильтр при помощи оператора –and.
-AND Name -ne ‘dhcproot'»
Полный текст фильтра приведен ниже:
-Filter «objectclass -eq ‘dhcpclass’ -AND Name -ne ‘dhcproot'»
Вот и все. Полный текст команды (это одна строка):
Get-ADObject -SearchBase «cn=configuration,dc=iammred,dc=net» -Filter «objectclass -eq ‘dhcpclass’ -AND Name -ne ‘dhcproot'»
Когда я запускаю ее на своем компьютере, выводится следующая информация:
14:42 C:\> Get-ADObject -SearchBase «cn=configuration,dc=iammred,dc=net» -Filter «objectclass -eq ‘dhcpclass’ -AND Name -ne ‘dhcproot'»
DistinguishedName Name ObjectClass ObjectGUID
—————— —- ———— ———-
CN=wds1.iammred.ne… wds1.iammred.net dHCPClass 0afcbc79-4268-4a8…
Проанализировав вывод, я понимаю, что мне интересно только значение свойства Name. Для того, чтобы получать только его, я могу воспользоваться командлетом Select-Object.
15:14 C:\> Get-ADObject -SearchBase «cn=configuration,dc=iammred,dc=net» -Filter «objectclass -eq ‘dhcpclass’ -AND Name -ne ‘dhcproot'» | select name
name
—-
wds1.iammred.net
Также я могу воспользоваться техникой, привнесенной Windows PowerShell 3.0 – автоматическим ForEach.
15:20 C:\> (Get-ADObject -SearchBase «cn=configuration,dc=iammred,dc=net» -Filter «objectclass -eq ‘dhcpclass’ -AND Name -ne ‘dhcproot'»).name
wds1.iammred.net
Зачем нужен этот скрипт? В интернете существует множество скриптов на VBScript для нахождения авторизованных DHCP-серверов, но только один из них присутствует в Scripting Guys Script Repositury– и он обладает рейтингом в 5 звезд!
На этом все, что касается запроса Active Directory об авторизованных серверах DHCP.
Автор:
Ed Wilson, Microsoft Scripting Guy
Оригинал:
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell