Новые возможности управления DHCP & DNS в PowerShell v3

в 12:31, , рубрики: dhcp, DNS, powershell, powershell v3, системное администрирование, метки: , , ,

Доброе время суток уважаемые хабрасоседи.

Только получив на предприятии Windows 8 мы (т.е. я) сразу поставили ее на рабочий компьютер и без тренировки сразу кинулись в бой. Из всех новых интересных вещей Windows 8 меня больше всего интересовал PowerShell версии 3.
Здесь мы не будем рассматривать новые возможности синтаксиса и т.п. вещей. А рассмотрим мы конкретно то, чего ждали многие (надеюсь, не преувеличиваю) системные администраторы любящие AD & PowerShell, а именно модули для управления DNS и DHCP.

Отвертки нет?

Так почему же мы (ну ладно, я) ждали эти командлеты. Что у нас было до этого. Даже если брать время, когда не было даже модуля ActiveDirectory, мы могли управлять (в принципе, и сейчас можем) объектами AD в основном с помощью ADSI. Но я думаю вряд ли кто то будет спорить, что модуль ActiveDirectory удобнее и легче в использовании (кто не согласен, давайте спорить).
Для DHCP был модуль на основе netsh dhcp. При больших областях, даже команда вывести записи в определенной области обрабатывалась у меня минут 10, что в принципе не слишком здорово (это еще мягко сказано).
Что было для DNS, к сожалению, не знаю, но подозреваю что какие-нибудь костыли имели место.

Сейчас же у нас есть средства для автоматизации и упрощения работы с давно знакомыми вещами. Не знаю как вы а я счастлив как школьница на концерте Джастина Тимберлейка.

Модуль DHCP

Больше всего меня интересовал модуль для управления DHCP, так как в оснатску DHCP я заглядываю намного чаще чем в DNS.Называется модуль DHCPServer:

PS [1] > get-command -module DHCPserver | measure

Count    : 103
Average  :
Sum      :
Maximum  :
Minimum  :
Property :

103 командлета предлагает нам новый модуль. Разберем наиболее интересные и, в будущем, часто используемые.
Начнем с самого простого, для начала найдем все DHCP сервера у нас в лесу:

PS [2] > Get-DhcpServerInDC

IPAddress            DnsName
---------            -------
192.168.0.1          DC01.OLOLO.com
192.168.9.1          DC01.Detroit.OLOLO.com
192.168.0.5          WDS.OLOLO.com

Я думаю, комментарии не нужны. Единственное может возникнуть вопрос. почему тут же показывается сервер WDS? DHCP прослушивает 67 UDP порт и до WDS он оставался единственным, кто его слушал. Скорее всего данный командлет с помощью широковещательных пакетов по 67 порту определяет сервера DHCP. Но так как WDS тоже отвечает, по этому он и попал в наш список.

Сервер мы нашли, теперь посмотрим какие у него области. У меня на тестовой машине 1 область, по этому список будет небольшой

PS [3]> Get-DhcpServerv4Scope

ScopeId         SubnetMask      Name           State    StartRange      EndRange        LeaseDuration
-------         ----------      ----           -----    ----------      --------        -------------
192.168.0.0     255.255.255.0   First Scope    Active   192.168.0.100   192.168.0.200   8.00:00:00

Как видим, отображаемая информация полезна при анализах областей. Например 3 последних столбца (начальный и конечный IP, а так же время аренды) лишними никогда не будут. Если сравнивать эту информацию с графической оснасткой, то преимущество данного способа очевидно.

Посмотрим информацию об области

PS [4]> Get-DhcpServerv4ScopeStatistics 192.168.0.0

ScopeId        Free       InUse         PercentageInUse  Reserved     Pending      SuperscopeName
-------        ----       -----         ---------------  --------     -------      --------------
192.168.0.0    87         3             3,333333         1            0

Вообще замечательно! Если областей очень много и необходимо следить за ее заполнением, то это очень помогает. Области можно указывать через запятую или вообще, передать через конвейер из предыдущего командлета (Get-DhcpServerv4Scope).
Здесь стоит отметить, что диапазоны адресов, которые исключены из раздачи, сюда не попадают. Т.е. если у вас область раздает 100 адресов (например с 192.168.0.100 по 192.168.0.200) и при этом диапазон в 50 адресов (с 192.168.0.30 по 192.168.0.80) будут указаны как адреса которые не будут выдаваться в аренду, то, даже если они будут все свободные, они не будут учитываться в предыдущем примере, и Вы не увидите их в следующем примере (Помните об этом).
А следующий пример показывает нам, что теперь есть возможность узнать, какие адреса области свободны

PS [5]> Get-DhcpServerv4FreeIPAddress -ScopeID 192.168.0.0 -NumAddress 5
192.168.0.103
192.168.0.104
192.168.0.105
192.168.0.106
192.168.0.107

Нужен адрес для резервации но не знаешь какой свободен? Вуаля! Можно указывать не только количество необходимых адресов, но и начальный и конечный адреса диапазона. Это было лирическое отступление, вернемся к нашей области.

Дальше, нам интересны непосредственно сами клиенты, поглядим информацию о них

PS [5]> Get-DhcpServerv4Lease -ScopeId 192.168.0.0

IPAddress      ScopeId      ClientId           HostName            AddressState       LeaseExpiryTime
---------      -------      --------           --------            ------------       ---------------
192.168.0.100  192.168.0.0  00-15-5d-0f-e6-0c  PC-NEW27.OLOLO.com  Active             18.12.2012 9:43:15
192.168.0.101  192.168.0.0  00-15-5d-0f-e6-00  PC-NEW20.OLOLO.com  Active             18.12.2012 10:29:59
192.168.0.102  192.168.0.0  00-15-5d-0f-e6-02  PC-NEW25.OLOLO.com  Active             18.12.2012 10:15:45

Данный командлет является аналогом пункта «Арендованные адреса» в графической оснастке. Хочется отметить, что данный командлет отображает все адреса (и резервации и аренды). И далее мы это увидим, после того, как зарезервируем адрес

PS [6]> Add-DhcpServerv4Reservation -IPAddress 192.168.0.120 -ScopeId 192.168.0.0 -ClientId 00-15-5d-0f-e6-02 -Description "My computer"

PS [7]> Get-DhcpServerv4Lease -ScopeId 192.168.0.0

IPAddress      ScopeId      ClientId           HostName            AddressState       LeaseExpiryTime
---------      -------      --------           --------            ------------       ---------------
192.168.0.100  192.168.0.0  00-15-5d-0f-e6-0c  PC-NEW27.OLOLO.com  Active             18.12.2012 9:43:15
192.168.0.101  192.168.0.0  00-15-5d-0f-e6-00  PC-NEW20.OLOLO.com  Active             18.12.2012 10:29:59
192.168.0.120  192.168.0.0  00-15-5d-0f-e6-02  PC-NEW25.OLOLO.com  ActiveReservation

Раз уж заговорили о графическом интерфейсе, то следующая команда является аналогом пункта «Резервации»

PS [8]> Get-DhcpServerv4Reservation -ScopeID 192.168.0.0

IPAddress        ScopeId         ClientId             Name                 Type          Description
---------        -------         --------             ----                 ----          -----------
192.168.0.120    192.168.0.0     00-15-5d-0f-e6-02    PC-New16.catalog.rsl Both          My computer

Мы выбрали показать нам все резервации области (т.к. она там 1, по этому и показал 1). Заметил интересную особенность данного командлета. Если попросить найти его запись аренды, указав IP, он ее покажет, хоть она и не является резервацией.
Сразу понятно, что таким образом искать резервации и аренды гораздо проще и удобнее нежели в графическом интерфейсе.

Напоследок, вспомним о backupах. В данном модуле появились несколько командлетов, которые позволяют сохранять настройки и данные сервера DHCP и восстанавливать их при необходимости. Это две пары командлетов:

  • Export-DHCPServer & Import-DHCPServer
  • BackUP-DHCPServer & Restore-DHCPServer

Все данные команды можно применять к областям IPv4 и IPv6. Для этого есть два разных типа командлетов в этом модуле (например Get-DhcpServerv4Lease и Get-DhcpServerv6Lease).

Модуль DNS

Получение информации и управление DNS не менее важно хотя и не так часто необходимо, как DHCP. Но все же, эта служба требует к себе внимания, и обойти ее мне не позволила совесть.
Начнем с простого, получим информацию о сервере DNS с помощью Get-DNSServer. Вывод того, что мне вышло на экран, я здесь выкладывать не буду, т.к. слишком уж много за раз. Но здесь находится почти вся инфомрация о настройках нашего сервера.
Помимо этого, мы можем посмотреть информацию о зонах DNS

PS [10]> Get-DnsServerZone

ZoneName            ZoneType        IsAutoCreated   IsDsIntegrated  IsReverseLookupZone  IsSigned
--------            --------        -------------   --------------  -------------------  --------
_msdcs.OLOLO.com    Primary         False           True            False                False
0.in-addr.arpa      Primary         True            False           True                 False
127.in-addr.arpa    Primary         True            False           True                 False
255.in-addr.arpa    Primary         True            False           True                 False
OLOLO.com           Primary         False           True            False                False

Заметим, что здесь выводятся как прямые так и обратные зоны. Не стали делать разные командлеты под разные зоны, и это правильно, ведь всегда можно воспользоваться фильтром.

Создадим какую нибудь запись в нашей зоне. Например, создадим псевдоним и сразу посмотрим все наши записи в прямой зоне

PS [11]> Add-DnsServerResourceRecordCName -ZoneName ololo.com -Name NewAlias -HostNameAlias pc-new26.o
lolo.com
PS [12]> Get-DnsServerResourceRecord -ZoneName: ololo.com

HostName                  RecordType Timestamp            TimeToLive  RecordData
--------                  ---------- ---------            ----------  ----------
@                         A          10.12.2012 15:00:00  00:10:00    192.168.0.10
@                         NS         0                    01:00:00    pc-new26.ololo.com.
@                         SOA        0                    01:00:00    [51][pc-new26.ololo.com.][hostm...
_msdcs                    NS         0                    01:00:00    pc-new26.ololo.com.
_gc._tcp.Default-First... SRV        10.12.2012 15:00:00  00:10:00    [0][100][3268][pc-new26.ololo.com.]
_kerberos._tcp.Default... SRV        10.12.2012 15:00:00  00:10:00    [0][100][88][pc-new26.ololo.com.]
_ldap._tcp.Default-Fir... SRV        10.12.2012 15:00:00  00:10:00    [0][100][389][pc-new26.ololo.com.]
_gc._tcp                  SRV        10.12.2012 15:00:00  00:10:00    [0][100][3268][pc-new26.ololo.com.]
_kerberos._tcp            SRV        10.12.2012 15:00:00  00:10:00    [0][100][88][pc-new26.ololo.com.]
_kpasswd._tcp             SRV        10.12.2012 15:00:00  00:10:00    [0][100][464][pc-new26.ololo.com.]
_ldap._tcp                SRV        10.12.2012 15:00:00  00:10:00    [0][100][389][pc-new26.ololo.com.]
_kerberos._udp            SRV        10.12.2012 15:00:00  00:10:00    [0][100][88][pc-new26.ololo.com.]
_kpasswd._udp             SRV        10.12.2012 15:00:00  00:10:00    [0][100][464][pc-new26.ololo.com.]
DomainDnsZones            A          10.12.2012 15:00:00  00:10:00    192.168.0.10
_ldap._tcp.Default-Fir... SRV        10.12.2012 15:00:00  00:10:00    [0][100][389][pc-new26.ololo.com.]
_ldap._tcp.DomainDnsZones SRV        10.12.2012 15:00:00  00:10:00    [0][100][389][pc-new26.ololo.com.]
ForestDnsZones            A          10.12.2012 15:00:00  00:10:00    192.168.0.10
_ldap._tcp.Default-Fir... SRV        10.12.2012 15:00:00  00:10:00    [0][100][389][pc-new26.ololo.com.]
_ldap._tcp.ForestDnsZones SRV        10.12.2012 15:00:00  00:10:00    [0][100][389][pc-new26.ololo.com.]
NewAlias                  CNAME      0                    01:00:00    pc-new26.ololo.com.
pc-new26                  A          0                    01:00:00    192.168.0.10
PC-NEW27                  A          23.11.2012 9:00:00   00:20:00    192.168.0.100

Видимо, что нам решили выводить все записи скопом, а уж какие нас интересуют, сами будем решать.

Еще из «повседневных» команд нам могут пригодиться Show-DnsServerCache и Clear-DnsServerCache. Здесь комментарии излишни.

В конце

Данные два модуля очень облегчили жизнь мне, по этому я призываю Вас обратить на них внимание. Автоматизация важная вещь в нашей работе, так что не поленитесь потратить небольшой кусочек рабочего времени на эти командлеты.
Здесь я не ставил задачу описать все, что есть в этих модулях. Я постарался выделить наиболее важные (по моему скромному мнению) и наиболее часто используемые командлеты (нет, я не устал писать это слово).
С помощью Get-Help вы найдете там намного больше, чем есть тут.

Автор: uksus

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js