Windows Server DNS — Пакетное создание А-записей с помощью WMI и PowerShell

Если возникает необходимость создания большого количества статических записей типа A в зоне прямого просмотра DNS воспользуемся мощью PowerShell. Для этого предварительно подготовим файл в формате CSV.

Файл DNS-Create-A-Records-from-File.csv:

HostName;HostIP
KOM-TCIN-ILO08;192.168.0.50
KOM-TCIN-AP001;192.168.2.10
KOM-TCIN-MC001;192.168.3.40
KOM-TCIN-PR018;192.168.5.11
KOM-TCIN-PR019;192.168.5.12

Содержимое файла считаем с помощью нижеприведённого скрипта PowerShell и, подключившись через WMI к удалённому серверу DNS, создадим соответствующее количество A-записей. 

Скрипт DNS-Create-A-Records-from-File.ps1

# Блок переменных
# $DNSServer - NetBIOS имя сервера DNS
# $DNSFZone - DNS зона прямого просмотра
# $DataFile - Путь к файлу CSV с входными данными
#
$DNSServer = "DC01"
$DNSFZone = "holding.com"
$DataFile = "C:\Tools\Scripts\DNS-Create-A-Records-from-File.csv"
#
# Подключение к удалённому экземпляру WMI
# и обработка входных данных файла 
#
$DNSRR = [WmiClass]"\\$DNSServer\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
$ConvFile = $DataFile + "_unicode"
Get-Content $DataFile | Set-Content $ConvFile -Encoding Unicode
Import-CSV $ConvFile -Delimiter ";" | ForEach-Object { 
$FQDN = $_.HostName + "." + $DNSFZone
$IP = $_.HostIP
$TextA = "$FQDN IN A $IP"  
[Void]$DNSRR.CreateInstanceFromTextRepresentation($DNSServer,$DNSFZone,$TextA)
}
Remove-Item $ConvFile

Дополнительные источники информации:

Всего комментариев: 11 Комментировать

  1. Алексей /

    Работает отлично! Жаль, не могу найти похожее решение на обратную зону.

  2. Алексей /

    НЕ работает, вываливается ошибка:
    Set-Content : Не удается найти параметр, соответствующий имени параметра «Encoding».
    C:1adddns.ps1:10 знак:60
    + Get-Content $DataFile | Set-Content $ConvFile -Encoding <<<< Unicode
    + CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingExcepti
    on
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SetCon
    tentCommand

  3. Алексей Максимов /

    Алексей :

    …Set-Content : Не удается найти параметр, соответствующий имени параметра “Encoding”…

    Вероятно вы используете древнюю версию PowerShell
    http://social.technet.microsoft.com/Forums/windowsserver/en-US/ffe67dca-8e68-4b94-96a1-227870bb62f5/problem-with-setting-encoding-for-sc-setcontent

  4. Обратная ссылка: Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 | Блог IT-KB /

  5. Обратная ссылка: App-V 5 for RDS — Разворачиваем инфраструктуру повышенной доступности | Блог IT-KB /

  6. Обратная ссылка: App-V 5 for RDS — Разворачиваем инфраструктуру повышенной доступности | vMind.ru /

  7. Lvbnhbq /

    не работает. Пишет
    Method invocation failed because [System.Management.ManagementClass] does not contain a method named ‘CreateInstanceFromTextRepresentation’.
    Там действительно такого метода нет. Есть только CreateInstance. Версия powerShell 4.0

  8. Дмитрий /

    Заработало. Путь там неправильный написан в WmiClass. Слэши поубирались. Вот так должно быть.
    «\\$DNSServer\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord»
    Надо как-то теперь в обратную зону добавлять.

    1. Алексей Максимов / Автор записи

      Исправил форматирование

  9. Я конечно дико извиняюсь. Но разве Add-DnsServerResourceRecord уже отменили? =) Или просто влом устанавливать модуль для DNS? =) К слову, PTR тоже можно будет этим же командлетом добавлять. ;-)

    1. Алексей Максимов / Автор записи

      Александр, это старая запись. Я просто исправил побившееся форматирование. Не волнуйся так :)

Добавить комментарий