ドメインメンバーコンピューターとして登録したWindowsパソコンを使って、DNSレコードをActiveDirectoryドメインコントローラ(AD-DC)に一括登録します。【注*1】
ドメインメンバーコンピューターとして登録したWindowsパソコンからは、AD-DCと自分自身はDNSが引けますが、他の機器(FreeBSD/Linux他)でDNSが引けないと何かと不便です(*2)。
次の作業として、エクスポートしておいたDNSレコード[*3]を一括でAD-DCに登録しておきます。
1. csvデータの構造と一括登録方法検討
(1)csvデータの構造
旧AD-DCから、RSAT(Remote Server Administration Tools[*4],[*5])の”ActiveDirectory ユーザーとコンピューター”でエクスポートしたcsvファイルは、単純な構造です。
10行目から「ホスト名」「IPアドレス」が記述されています。

(2)インポート方法検討
DNSのリストをAD-DCに一括登録する方法として、小生が思いつくのは、
- )RSATのコマンド(dnscmd)を使う。
- )ADメンバーLinux/FreeBSD上でsamba-toolを使う。
- )QNAP上でsamba-toolを使う。
- )ドメインメンバーWinマシン上のPowerShelを使う。
といったところです(*6)。
a,)RSATのコマンド(dnscmd)を使う
-
”C:\Windows\System32\dnscmd.exe”は、csvファイルの一括登録を行う機能はないので、Excelなどで”dnscmd”を連続して実行する”バッチファイル”を作成する必要があります。
-
何より、RSATのコマンド(dnscmd)を使う方法”は、DNSサーバーがWindowsServerである必要があります。
-
今回は、QNAPのAD-DCは、samba4ベースなので、dnscmdコマンドではRPCエラーが出て使えません😅。
b.)ADメンバーLinux/FreeBSD上でsamba-toolを使う。
- csvファイルを読み込み、”samba-tool dns・・・”で、逐次、レコードを登録していくスクリプトを作成すれば、可能です。
- ただし、実行するLinux/FreeBSDマシンがAC-DCのメンバーになっている必要があります。
- したがって、ドメインメンバーにしたWinマシンとは別に、FreeBSD/Linuxマシンのドメインメンバー設定が必要になります。
- 何より、今回の作業は、たびたび実施するようなことはない上、スクリプトのデバックも面倒ですので、”汎用的なスクリプト”を作るほどのことではありません😅。
c.)QNAP上でsamba-toolを実行する
- QNAPには”samba-tool”は実装されていません。
- 別除、Linuxパソコン上でarm用にクロスコンパイル環境、もしくはQNAP上にコンパイル環境を準備して、samba4をコンパイルして、amba-toolをQNAPにコピーする必要があります。
d.)ドメインメンバーWinマシン上のPowerShellを使う。
- ”dnscmd”とは別に、PoweShell上では” Add-DNSServerResourceRecordA”というコマンドが使えます。
- このコマンド、通常、WindowsServer上で利用しますが、引数に”-ComputerName "[AD-DCのホスト名]”を与えると、リモートからDNS登録ができます。
そこで、今回は、Windowsのドメインメンバーしかいない環境を前提として、
エクスポート済みのDNSリスト[*7]をExcelで加工し、単純なPowerShellのコマンド一覧を作成し、
ドメインメンバーWindowsパソコン上から登録しようと思います😀。
2. PowerShellスクリプトの準備と一括登録
(1)PowerShellスクリプトの準備
”Add-DNSServerResourceRecordA”によりDNSにレコードを追加する構文は以下になります[*8]。
元のcsvファイルをExcelで開いて新しシートに、文字列式でAdd-DNSServerResourceRecordAコマンドの一覧を作成します。
構造としては、単純で、DNSに登録するコンピュータ1台につき、1行にコマンドを記載したファイルを準備するだけです。
Excelの新しいシートのA1セルに式「="Add-DNSServerResourceRecordA -ZoneName 【ADのFQDN名】-Name "&【csvファイルの登録するホスト名セルへの相対参照】&" -IPv4Address "&【csvファイルの登録するホストのIPアドレスセルへの相対参照】&" -CreatePtr -ComputerName ""【AD-DCのホスト名】"""」を入力します
文字列式中で”-ComputerName”パラメータに与える「ホスト名」の前後にダブルクォーテーション2つ(””)を記載することでしょうか。

元のcsvファイルシートのホスト名の数だけ、A1セルをA2セル以降にコピーします。
この時、AD-DCのDNSに登録済みのホストが混じっていても問題ありません。
当該行の実行時に”登録できない旨のエラー”が吐き出されるだけです😅。
作成したシートを”テキスト(prn)”形式で保存します。
保存したファイルの拡張子を「.ps1」に変更します。
(2)一括登録
”ローカルのAdministoratorグループ”に登録した、”DomainAdmin”なユーザー[*9]でログオンします。
”ローカルのAdministoratorグループ”に登録していないドメインユーザー、または、ローカルアカウントでPowerShellスクリプトを実行した場合の動作は確認していません😅。
小生の推測ですが、登録しようとするホストの数だけ、"DomainAdminなユーザー名"と"そのパスワード"を入力する必要がありそうな気がします😅。


AD-DCのDNSに登録済みのホストがある場合には”登録できない旨のエラー”が吐き出されますが、気にしません😀。
(3)確認
AD-DC(QNAP)にログオンして、DNSを確認します。
【PowerShellスクリプト実行前】

【PowerShellスクリプト実行後】

エクスポートしてあったcsvファイルに記載されていたホストが登録されていれば、DNSへの一括登録は完了です😀。
これで、ホスト名で引けます😅。
【次回に続く予定】