コンピュータをドメインに参加させるのって面倒ですよね。
情シスが登録してユーザに引き渡すならともかく、遠隔地のコンピュータをユーザに操作してもらって参加させなきゃいけないときなんて、手順書を渡してあってもミスされることがよくあったり。
Windows 7以降には、コンピュータをオフライン・ドメイン参加させるためのdjoinというコマンドラインツールが備わっています。
このツールでコンピュータをADに事前プロビジョニングしておいて、対象コンピュータでプロビジョニングデータを読み込むことでドメイン参加が完了する仕組みです。
ただこのdjoin、オプション指定が多いのでユーザに実行してもらうには難しいものがあります。
ならば、事前プロビジョニングを実施してプロビジョニングファイルを読み込むためのバッチファイルを生成するバッチファイルを作ればいいんじゃない?
ということで出来上がったのがこちら。
@echo off
set DOMAIN=CONTOSO
set /p PCNAME="ドメインに参加させたいコンピュータ名を入力してください: "
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set PCNAME=%%PCNAME:%%i=%%i%%
echo %PCNAME%を%DOMAIN%ドメインに追加しています。
echo.
djoin.exe /provision /domain %DOMAIN% /machine %PCNAME% /savefile %PCNAME%.txt > NUL
if ERRORLEVEL 2224 (
echo %PCNAME%は%DOMAIN%ドメインに登録済みです。
choice /M "既存のコンピュータを変更してもよろしいですか"
if ERRORLEVEL == 2 (
echo 終了します。
goto END
) else (
djoin.exe /provision /domain %DOMAIN% /machine %PCNAME% /reuse /savefile %PCNAME%.txt > NUL
goto CREATEBAT
)
)
:CREATEBAT
(
echo.@echo off
echo.cd /d %%~dp0
echo. net session ^>nul 2^>^&1
echo. if %%errorLevel%% == 0 ^(
echo. djoin /requestODJ /loadfile %PCNAME%.txt /windowspath %%SystemRoot%% /localos
echo. goto SUCCESSFUL
echo. ^) else ^(
echo. echo wscript.sleep 50 ^> %%TEMP%%\wait.vbs
echo. for /L %%%%i in ^(1,1,5^) do ^(
echo. color cf
echo. cscript /nologo %%TEMP%%\wait.vbs
echo. color fc
echo. cscript /nologo %%TEMP%%\wait.vbs
echo. ^)
echo. del %%TEMP%%\wait.vbs
echo. color cf
echo. echo.
echo. echo 管理権限で実行されていません。
echo. echo 右クリックして「管理者として実行」で実行してください。
echo. echo.
echo. ^)
echo.pause
echo.exit /b
echo.:SUCCESSFUL
echo. reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI /v LastLoggedOnUser /f
echo. reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI /v LastLoggedOnSAMUser /f
echo. del /q %PCNAME%.txt
echo. del /q %PCNAME%.bat
) > %PCNAME%.bat
:END
timeout 5
実行する際はset DOMAIN=
の行を環境に合わせて書き換えてください。
実行要件
以下のものが必要です。
- Windowsドメインネットワーク
- 事前プロビジョニング実施PC: Accout Operator以上の権限をもつユーザ
- プロビジョニング対象PC: Administratorsグループに入っているローカルアカウント
ドメイン参加手順
- 事前プロビジョニング実施PCでバッチファイルを実行(バッチファイルをダブルクリックでOK)
- 登録したいコンピュータ名を聞かれるので入力してEnter
- カレントディレクトリにファイル名が「コンピュータ名」で、拡張子が.batと.txtの二つが生成されます
- この二つのファイルをプロビジョニング対象PCへコピー
- コンピュータ名.batを右クリックして「管理者として実行」を選択
- LANケーブルを接続してWindowsを再起動
これでドメインへの参加は完了です。
コンピュータ名は事前プロビジョニング時に指定したものに変更されます。
バッチファイル実行後に.batと.txtは自動的に削除されます。
プロビジョニングファイルはいちど使用されたら再利用できないので、間違って実行されたりしないように削除するようにしました。
バッチファイル解説
5行目: プロンプトを表示して入力を待ちます。
6行目: 入力されたアルファベットを大文字に変換しています。
11〜17行目: コンピュータがADに登録済みかどうかを判定しています。
19行目: 事前プロビジョニングを実施しています。
24〜54行目: バッチファイル生成のヒアドキュメントもどき。
28行目: 「管理者として実行」されているかを判定しています。
32〜46行目: 「管理者として実行」されていなかったらコマンドプロンプトウィンドウをピカピカさせるvbsを作って実行しています。
50〜51行目: 最終ログオンユーザ名を消しています。
52〜53行目: プロビジョニングファイルとバッチファイルを消去しています。