LoginSignup
10
9

More than 5 years have passed since last update.

コンピュータをバッチファイルでドメインに参加させる

Posted at

コンピュータをドメインに参加させるのって面倒ですよね。
情シスが登録してユーザに引き渡すならともかく、遠隔地のコンピュータをユーザに操作してもらって参加させなきゃいけないときなんて、手順書を渡してあってもミスされることがよくあったり。

Windows 7以降には、コンピュータをオフライン・ドメイン参加させるためのdjoinというコマンドラインツールが備わっています。
このツールでコンピュータをADに事前プロビジョニングしておいて、対象コンピュータでプロビジョニングデータを読み込むことでドメイン参加が完了する仕組みです。

ただこのdjoin、オプション指定が多いのでユーザに実行してもらうには難しいものがあります。
ならば、事前プロビジョニングを実施してプロビジョニングファイルを読み込むためのバッチファイルを生成するバッチファイルを作ればいいんじゃない?
ということで出来上がったのがこちら。

djoin.bat
@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グループに入っているローカルアカウント

ドメイン参加手順

  1. 事前プロビジョニング実施PCでバッチファイルを実行(バッチファイルをダブルクリックでOK)
  2. 登録したいコンピュータ名を聞かれるので入力してEnter
  3. カレントディレクトリにファイル名が「コンピュータ名」で、拡張子が.batと.txtの二つが生成されます
  4. この二つのファイルをプロビジョニング対象PCへコピー
  5. コンピュータ名.batを右クリックして「管理者として実行」を選択
  6. LANケーブルを接続してWindowsを再起動

これでドメインへの参加は完了です。
コンピュータ名は事前プロビジョニング時に指定したものに変更されます。
バッチファイル実行後に.batと.txtは自動的に削除されます。
プロビジョニングファイルはいちど使用されたら再利用できないので、間違って実行されたりしないように削除するようにしました。

バッチファイル解説

5行目: プロンプトを表示して入力を待ちます。
6行目: 入力されたアルファベットを大文字に変換しています。
11〜17行目: コンピュータがADに登録済みかどうかを判定しています。
19行目: 事前プロビジョニングを実施しています。
24〜54行目: バッチファイル生成のヒアドキュメントもどき。
28行目: 「管理者として実行」されているかを判定しています。
32〜46行目: 「管理者として実行」されていなかったらコマンドプロンプトウィンドウをピカピカさせるvbsを作って実行しています。
50〜51行目: 最終ログオンユーザ名を消しています。
52〜53行目: プロビジョニングファイルとバッチファイルを消去しています。

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9