Если приходится поддерживать несколько DNS-зон, то можно это делать вручную, так как много времени их поддержка занимать не будет. А что делать если таких зон несколько сотен? Сидеть и вручную их перебирать может занять очень много времени, а следовательно нужно как-то автоматизировать процесс. Задачу упростим следующим образом. Предположим, нам надо получить с нашего DNS-сервера все MX-записи, находящиеся в DNS-зонах которые поддерживаются этим сервером.
К сожалению стандартного командлета для доступа к DNS-серверу я не нашёл. После некоторых поисков нашёл сторонний командлет Get-Dns, который устанавливается как отдельная оснастка в PoSh. Сам командлет можно взять здесь. Установка происходит следующим образом:
PS D:\distr\PoshNet\>Extract-Archive PoshNet.zip PS D:\distr\PoshNet\>.Install.ps1 PoshNet.dll PS D:\distr\PoshNet\> Add-PSSnapin PoshNet PS D:\distr\PoshNet\> Get-Command -PSSnapin PoshNet CommandType Name Definition ----------- ---- ---------- Cmdlet Get-Dns Get-Dns [-Name] [[-Type] ]...
Теперь осталось попробовать получить список только своих (не факт, что в поддерживаемых зонах используются свои почтовые серверы) mx-серверов. У меня это получилось примерно следующим образом:
(dir dns-serverc$windowssystem32dns*.dns -Name) | ForEach-Object { $_ -replace ".dns", "" } | Get-Dns -Type MX -DnsServers dns-server | select -expand Answers | Where-Object {$_.record.exchange -like "*main-domain.com."} | ft Name, Type, Record -auto
Как известно DNS-сервер от Microsoft хранит зоны в виде файлов в папке %systemdrive%windowssystem32dns с именем совпадающим с именем домена и с расширением dns. В первой части мы получаем от нашего DNS-сервера (dns-server) имена всех этих файлов, затем убираем у них расширение .dns и получаем имена зон, которые поддерживает сервер. Далее начинает работать наш новый командлет, который подключается к нашему DNS-серверу и для полученных на первых шагах зонах получает MX-записи и оставляет только те, которые находятся в нашем основном домене. И в конце выводит их в виде таблички. Что здесь важно. Первую часть надо обязательно поставить в скобки, так как процес считывания имён файлов обязательно должен дойти до конца, прежде чем скрипт продолжит работать дальше, и нужно иметь ввиду, что имена серверов пишутся обязательно с точкой на конце.
Спасибо за подробный инструктаж. Пользовался вашими советами…проблем при просмотре не возникло.