あるイベント起動で、「AD統合DNSのCNAMEの指すAレコードを変える」、ということをしたい。
イベントハンドリングはとりあえずおいといて、スクリプトでDNSのCNAMEを変更する方法を探す。

やっぱりというかなんというかWMIにしっかりと用意されていた。
 DNS WMI Classes (Windows)

PowershellはWMIオブジェクトも扱えるので、こんな感じに。

$cnames = gwmi -Class MicrosoftDNS_CNAMEType -Namespace Root\MicrosoftDNS -ComputerName DCコンピュータ名
$cname = $cnames | ? {$_.OwnerName -eq "cname.example.com"}
$cname.Modify($null, "some.example.com.")

 
特定のCNAMEを表すMicrosoftDNS_CNAMETypeだけすぱっと取得したかったが、全CNAMEを取る方法しか分からなかったので場当たり的にWhere-Objectで絞り込む。とても無駄な感じ。

  • CNAMEもAレコードも事前に作成してある前提なので、見つからない場合を考えていない。
  • 適切な権限が必要。

環境:
 Windows XP Pro SP3 x86
  Powershell 1.0
 Windows Server 2008 Standard x64
  Active Directory
  DNS