【PowerShell】スクリプトでDNSレコードのIPアドレスを変更する

PowerShell

【PowerShell】スクリプトでDNSレコードのIPアドレスを変更する

2019年3月9日

こんにちは!SE ブログの相馬です。

 

 

 

今回は、PowerShell を使いスクリプトで Windows DNS サーバーの A レコードの IP アドレスを変更してみました。

 

 

殆どの企業には DNS サーバーがあり、PC や サーバーやネットワーク機器などが DNS レコードとして DNS サーバーに登録されているかと思います。

 

 

これらの DNS レコードを変更する際には、基本的には DNS サーバーマネージャーを起動し、該当のレコードがあるゾーンをクリックし、DNS レコードをダブルクリックして IP アドレスを直接入力して手動で変更されるかと思います。

 

 

但し IP アドレスを変更する DNS レコードが大量にある場合はどうしたら良いでしょうか。例えば 100 個ある A レコードの IP アドレスを決められた時間枠で変更しなければならない場合、1 つ 1 つ手動で変更する事は厳しいかと思います。

 

 

この場合、PowerShell を使い一気に変更ができる事が分かりましたので共有させていただきます。

 

 

 

スクリプト例

 

 

まずは完成したスクリプトから見てゆきましょう。例ですが、以下のスクリプトを使えば A レコードの IP アドレスを変更する事ができます。

 

 

複数変更する場合はこれを変更する分だけ増やしてゆけば良いわけです。

 

$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

 

 

 

 

スクリプトの解説

 

 

まずは、スクリプトを実行する DNS サーバーを指定して変数に格納します。それから変更する A レコードがあるゾーン名を指定して変数に格納します。

 

$DnsServer = "DNSサーバー名"
$zoneName = "ゾーン名"

 

 

 

その後に、変更前と変更後の A レコードの情報を変数に格納します。この後に A レコードの変更するコマンドレットで変更前と変更後の情報を指定しなければならない為になります。

 

$oldObject = Get-DnsServerResourceRecord -Name "Aレコード名" -ComputerName $DnsServer -ZoneName $zoneName -RRType "A" 
$newObject = Get-DnsServerResourceRecord -Name "Aレコード名" -ComputerName $DnsServer -ZoneName $zoneName -RRType "A"
$newIp = "変更後のIPアドレス"

 

 

 

その後に、変更後の IP アドレスを変数に格納します。それから上で変更後の A レコード を格納した $newObject のプロパティ (RecordData.IPv4Address) を指定します。

 

$newObject.RecordData.IPv4Address

 

 

[System.Net.IPAddress]::parse($newIp) で IP アドレスに変換したものを、$newObject.RecordData.IPv4Address に格納して、$newObject にまた格納します。

 

$newIp = "変更後のIPアドレス" 
$newObject = $newObject.RecordData.IPv4Address = [System.Net.IPAddress]::parse($newIp)

 

 

 

最後に、Set-DnsServerResourceRecord コマンドレットを使い、変更前と変更後の A レコードの情報を格納した変数を指定して、DNS サーバーとゾーンも指定します。

 

 

これで IP アドレスを変更する事ができます。

 

Set-DnsServerResourceRecord -NewInputObject $newObject -OldInputObject $oldObject -ComputerName $DnsServer -ZoneName $zoneName -PassThru 

 

 

 

まとめ

 

 

以上になります。いかがでしょうか。A レコードの IP アドレスを大量に変更しなければならない時にこの方法は使い回す事ができますのでお役に立つのではないかと思います。

 

 

それでは最後までお読みいただきありがとうございました!

 

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りでマイペースな人です。

人気記事

1

こんにちは!SE ブログの相馬です。       今回は、PC に適用されている GPO を確認する方法について書きました。     グループポリシー ...

2

こんにちは!SE ブログの相馬です。       今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは ...

3

こんにちは!SE ブログの相馬です。       今回は、グループポリシーを使って、特定のコンピューターに対して、ドメインユーザーに Administrators 権限を ...

4

こんにちは!SE ブログの相馬です。       今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 ...

5

こんにちは!SEブログの相馬です。       今回は、ユーザープロファイルを削除する方法について書いてみました。     1 台の PC を複数人で ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!SE ブログの相馬です。       今回は、Windows Server 2016 で NTP サーバーと同期する方法について書きました。   & ...

-PowerShell
-,