ユーザデータからWindowsのホスト名変更とAD参加を同時に行う

2015.12.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

西澤です。相変わらずアカウント管理の周辺について調べています。Windowsサーバのホスト名変更とドメイン参加をコマンドラインから同時に行う方法がわかったので、ご紹介したいと思います。

環境

今回検証した環境は以下の通りです。

  • 参加したADサーバ
    • AWS Directory ServiceのSimple AD
  • ADクライアント
    • Windows Server 2012 R2

※Windows Server 2008 R2をクライアントとしても動作することを確認済

ホスト名変更とAWS Directory ServiceのSimple AD参加を、ADクライアントとしてのEC2 Windows起動時にユーザデータに渡すことで1度に行うことが目標です。

事前準備

事前に下記準備が必要です。

  • Simple AD(AWS Directory Service)
    • simplead.local
    • Simple ADを構築したVPC,Subnetや設定した管理者パスワードを控えておく
  • IAMロール(インスタンスプロファイル)
    • AWSDirectoryServiceReadOnlyAccessを権限としてアタッチ

下記記事ではDHCP Options Setsを利用したDNSサーバ情報の配布する方法が紹介されていますが、今回はAWS Directory Serviceから情報を取得して、そのDNSサーバ情報をサーバ上に設定する方式としました。その為、DHCP Options Sets変更は不要です。

やってみる

上記記事の手順でもドメイン参加そのものは可能なのですが、OSインストール後に自動的に設定されたデフォルト"WIN-xxxxxxxxxxx"というランダムなホスト名でのドメイン参加となってしまいます。これを避ける為に、ホスト名も任意のものに変更しつつ、ADに参加できれば成功です。

ec2-launch1

ユーザデータにpowershellタグを付けて下記スクリプトを実行してもらいましょう。

ec2-launch2

<powershell>
# Set Variables
Set-DefaultAWSRegion -Region us-east-1
$directoryname = "simplead.local"
$password = ConvertTo-SecureString -AsPlainText -Force "Pass1234"
$newname = "newname"

# Change Dns Settings
$directory=Get-DSDirectory | Where-Object -FilterScript {$_.Name -eq $directoryname}
$wmi = Get-WmiObject win32_networkadapterconfiguration -filter "ipenabled = true"
$wmi.SetDNSServerSearchOrder($directory.DnsIpAddrs)

# Rename Computer
Rename-Computer -NewName $newname -Force
sleep 5

# Add Computer to Directory
$credential = New-Object System.Management.Automation.PSCredential "Administrator", $password
Add-Computer -DomainName $directoryname -Credential $credential -Force -Options JoinWithNewName,AccountCreate -restart
</powershell>

ポイントは以下の通りです。

  • DNSはAWS Directory Serviceの情報を取得して設定する
  • Rename-Computerをした後に5秒程度sleepを入れる
  • Add-ComputerにJoinWithNewNameオプション、AccountCreateオプションを指定して実行する
  • スクリプト実行後にリブートされる

Domain Administratorでのログインに成功し、ホスト名変更とドメイン参加が同時にできていることが確認できました!

newname

まとめ

Windowsの自動化を色々と探っていますが、Powershellも進化中の為、OSバージョンによってできること/できないことがあり苦戦しています。Windows環境は検証するにも、ちょっとした起動や反映に時間がかかりコストが高いのですが、それだけ情報を必要とする方もいるということだと思いますので、今後もこまめに情報を発信していけたらと思います。

参考情報