Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
こんにちは!そーまんです。
今回は、Windows DNS サーバーの大量の A レコードの IP アドレスを PowerShell を使い一括で変更してみました。
殆どの企業には Windows の DNS サーバーがあって、PC や サーバーやネットワーク機器などが DNS レコードとしてサーバーに登録されているかと思います。
これらの DNS レコードを変更する際には、基本的には DNS サーバーマネージャーを起動し、該当のレコードがあるゾーンをクリックし、DNS レコードをダブルクリックして IP アドレスを直接入力して手動で変更されているかと思います。
但し、IP アドレスを変更する DNS レコードが大量にある場合はどうしたら良いでしょうか?
例えば 100 個ある A レコードの IP アドレスを決められた時間枠で変更しなければならない場合、1 つ 1 つ手動で変更する事は厳しいかと思います。
この場合、PowerShell を使い一気に変更ができる事が分かりましたので共有させていただきます。
スクリプト例
まずは完成したスクリプトから見てゆきましょう。例ですが、以下のスクリプトを使えば A レコードの IP アドレスを変更する事ができます。
複数変更する場合はこれを変更する分だけ増やしてゆけば良いわけです。
1 2 3 4 5 6 7 8 |
$DnsServer = "devdc01" $zoneName = "soma-engineering.local" $oldObject = Get-DnsServerResourceRecord -Name "devpc01" -ComputerName $DnsServer -ZoneName $zoneName -RRType "A" $newObject = Get-DnsServerResourceRecord -Name "devpc01" -ComputerName $DnsServer -ZoneName $zoneName -RRType "A" $newIp = "192.168.100.200" $newObject = $newObject.RecordData.IPv4Address = [System.Net.IPAddress]::parse($newIp) Set-DnsServerResourceRecord -NewInputObject $newObject -OldInputObject $oldObject -ComputerName $DnsServer -ZoneName $zoneName -PassThru |
スクリプトの解説
1. まずは、スクリプトを実行する DNS サーバーを指定して変数に格納します。それから変更する A レコードがあるゾーン名を指定して変数に格納します。
1 2 |
$DnsServer = "DNSサーバー名" $zoneName = "ゾーン名" |
2. その後に、変更前と変更後の A レコードの情報を変数に格納します。この後に A レコードの変更するコマンドレットで変更前と変更後の情報を指定しなければならない為になります。
1 2 3 |
$oldObject = Get-DnsServerResourceRecord -Name "Aレコード名" -ComputerName $DnsServer -ZoneName $zoneName -RRType "A" $newObject = Get-DnsServerResourceRecord -Name "Aレコード名" -ComputerName $DnsServer -ZoneName $zoneName -RRType "A" $newIp = "変更後のIPアドレス" |
3. その後に、変更後の IP アドレスを変数に格納します。それから上で変更後の A レコード を格納した $newObject のプロパティ (RecordData.IPv4Address) を指定します。
1 |
$newObject.RecordData.IPv4Address |
4. [System.Net.IPAddress]::parse($newIp) で IP アドレスに変換したものを、$newObject.RecordData.IPv4Address に格納して、$newObject にまた格納します。
1 2 |
$newIp = "変更後のIPアドレス" $newObject = $newObject.RecordData.IPv4Address = [System.Net.IPAddress]::parse($newIp) |
5. 最後に、Set-DnsServerResourceRecord コマンドレットを使い、変更前と変更後の A レコードの情報を格納した変数を指定して、DNS サーバーとゾーンも指定します。
1 |
Set-DnsServerResourceRecord -NewInputObject $newObject -OldInputObject $oldObject -ComputerName $DnsServer -ZoneName $zoneName -PassThru |
これで大量の A レコードの IP アドレスを一括で変更する事ができます。
まとめ
いかがでしょうか。A レコードの IP アドレスを大量に変更しなければならない時にこの方法は使い回す事ができますのでお役に立つのではないかと思います。
それでは最後までお読みいただきありがとうございました!