Windows 7 以降はオフラインドメイン参加の機能が追加されており、オフライン状態でもドメインに参加することができるようになりました。
ステップ バイ ステップ ガイド – オフライン ドメイン参加 (Djoin.exe)
オフラインドメイン参加ですが、展開時の応答ファイルと組み合わせることができます。
冒頭で紹介した、ステップ バイ ステップ ガイドでは [無人オペレーティング システム インストールを使用してオフライン ドメイン参加を実行する] のセクションで記載されている応答ファイルにプロビジョニングデータの内容を埋め込む方法がありますが、今回はセットアップ時に入力されたコンピューター名を使用してロードするプロビジョニングデータを変更する方法を書いてみたいと思います。
最初にドメインコントローラーにコンピューターアカウントの作成とクライアントでロードするためのプロビジョニングデータを作成するために以下のコマンドを実行します。
今回は Windows Server 2012 R2 の DC を使用しています。
また、プロビジョニングのためのコマンドについてはドメインコントローラーの管理者権限のユーザーで実行しています。
djoin /PROVISION /DOMAIN %USERDNSDOMAIN% /MACHINE "PC-01" /SAVEFILE "C:ProvisionFilePC-01" /MACHINEOU "OU=00.OfflineDomainJoin,DC=lab,DC=local" djoin /PROVISION /DOMAIN %USERDNSDOMAIN% /MACHINE "PC-02" /SAVEFILE "C:ProvisionFilePC-02" /MACHINEOU "OU=00.OfflineDomainJoin,DC=lab,DC=local" djoin /PROVISION /DOMAIN %USERDNSDOMAIN% /MACHINE "PC-03" /SAVEFILE "C:ProvisionFilePC-03" /MACHINEOU "OU=00.OfflineDomainJoin,DC=lab,DC=local" djoin /PROVISION /DOMAIN %USERDNSDOMAIN% /MACHINE "PC-04" /SAVEFILE "C:ProvisionFilePC-04" /MACHINEOU "OU=00.OfflineDomainJoin,DC=lab,DC=local" djoin /PROVISION /DOMAIN %USERDNSDOMAIN% /MACHINE "PC-05" /SAVEFILE "C:ProvisionFilePC-05" /MACHINEOU "OU=00.OfflineDomainJoin,DC=lab,DC=local"
今回は PC-01 ~ PC-05 というコンピューターアカウントを作成し、各アカウントのコンピューター名のプロビジョニングデータのファイルを作成しています。
コマンドを実行すると指定した OU にコンピューターアカウントが作成され、プロビジョニングデータのファイルも合わせて作成されます。
ドメインに参加するクライアントでは作成されたプロビジョニングデータのファイルを読み込んでオフラインでドメインに参加をします。
今回はクライアントとして Windows 8.1 Enterprise Edition x86 を使用しています。
このクライアントの [C:WindowstempProvisioningFile] に先ほど DC で作成したファイルをすべて格納しています。
あとはこのファイルを読み込んでオフラインドメイン参加させるためのバッチを用意します。
今回は以下のようなコンピューター名に応じたプロビジョニングデータでオフラインドメイン参加させるバッチを作成しています。
# テスト用なので削除の処理はコメント化しています。
REM SET > c:windowstempSET.txt djoin /REQUESTODJ /LOADFILE C:WindowsTempProvisioningFile%COMPUTERNAME% /WINDOWSPATH C:Windows /LOCALOS > c:windowstempdjoin.txt REM del c:windowsTemp* /S /Q shutdown -r -t 0 -f
このバッチファイルを [C:WindowstempOfflineJoin.cmd] として保存しています。
あとはこのコマンドを実行するように応答ファイル (Unattend.xml) を設定します。
# WindowsPE のセッションは不要ですがなんとなくつけています。
<?xml version="1.0" encoding="utf-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend"> <settings pass="windowsPE"> <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <DiskConfiguration> <Disk wcm:action="add"> <CreatePartitions> <CreatePartition wcm:action="add"> <Order>1</Order> <Size>300</Size> <Type>EFI</Type> </CreatePartition> <CreatePartition wcm:action="add"> <Order>2</Order> <Size>128</Size> <Type>MSR</Type> </CreatePartition> <CreatePartition wcm:action="add"> <Order>3</Order> <Extend>true</Extend> <Type>Primary</Type> </CreatePartition> </CreatePartitions> <DiskID>0</DiskID> <WillWipeDisk>true</WillWipeDisk> </Disk> </DiskConfiguration> <ImageInstall> <OSImage> <InstallTo> <DiskID>0</DiskID> <PartitionID>3</PartitionID> </InstallTo> <WillShowUI>OnError</WillShowUI> </OSImage> </ImageInstall> </component> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SetupUILanguage> <UILanguage>ja-JP</UILanguage> </SetupUILanguage> <InputLocale>ja-JP</InputLocale> <SystemLocale>ja-JP</SystemLocale> <UILanguage>ja-JP</UILanguage> <UserLocale>ja-JP</UserLocale> </component> </settings> <settings pass="generalize"> <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <DoNotCleanUpNonPresentDevices>true</DoNotCleanUpNonPresentDevices> <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> </component> <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SkipRearm>1</SkipRearm> </component> </settings> <settings pass="specialize"> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RunSynchronous> <RunSynchronousCommand wcm:action="add"> <Order>1</Order> <Path>net user &quot;Administrator&quot; /active:yes</Path> </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <CopyProfile>true</CopyProfile> <RegisteredOrganization>OrganizationName</RegisteredOrganization> <RegisteredOwner>OwnerName</RegisteredOwner> <TimeZone>Tokyo Standard Time</TimeZone> </component> <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <DisableAccelerators>true</DisableAccelerators> <DisableFirstRunWizard>true</DisableFirstRunWizard> <DisableOOBAccelerators>true</DisableOOBAccelerators> <GroupTabs>false</GroupTabs> <Home_Page>about:blank</Home_Page> <PlaySound>false</PlaySound> <SuggestedSitesEnabled>false</SuggestedSitesEnabled> </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <InputLocale>0411:00000411</InputLocale> <SystemLocale>ja-JP</SystemLocale> <UILanguage>ja-JP</UILanguage> <UILanguageFallback>ja-JP</UILanguageFallback> <UserLocale>ja-JP</UserLocale> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <OOBE> <HideEULAPage>true</HideEULAPage> <NetworkLocation>Work</NetworkLocation> <ProtectYourPC>1</ProtectYourPC> </OOBE> <UserAccounts> <AdministratorPassword> <Value><パスワード></Value> <PlainText>false</PlainText> </AdministratorPassword> <LocalAccounts> <LocalAccount wcm:action="add"> <Password> <Value><Administrator のパスワード></Value> <PlainText>false</PlainText> </Password> <Name>Administrator</Name> <Group>Administrators</Group> </LocalAccount> </LocalAccounts> </UserAccounts> <RegisteredOrganization>OrganizationName</RegisteredOrganization> <RegisteredOwner>OwnerName</RegisteredOwner> <TimeZone>Tokyo Standard Time</TimeZone> <FirstLogonCommands> <SynchronousCommand wcm:action="add"> <Order>1</Order> <CommandLine>C:WindowstempOfflineJoin.cmd</CommandLine> </SynchronousCommand> </FirstLogonCommands> <AutoLogon> <Password> <Value><Administrator のパスワード>/Value> <PlainText>false</PlainText> </Password> <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Username>Administrator</Username> </AutoLogon> </component> </settings> <cpi:offlineImage cpi:source="wim:c:/temp/install.wim#Windows 8.1 Enterprise" xmlns:cpi="urn:schemas-microsoft-com:cpi" /> </unattend>
実施している内容としては、Administrator を有効にし、これを使用して自動ログオンとログオン時のコマンドとして [OfflineJoin.cmd] を実行するようにしています。
今回は最初はネットワークに接続していないオフラインの状態でどのような挙動になるかを試してみたいと思います。
[C:WindowsSystem32Sysprep] に 上記の Unattend.xml を保存して、以下のオプションで Sysprep を実行します。
c:windowssystem32sysprepsysprep.exe /oobe /generalize /mode:vm /reboot
セットアップ時のコンピューター名だけは自動設定しないようにしていますので、初回起動時のセットアップ時にコンピューター名の入力だけは求められます。そこで、使用するプロビジョニングデータのコンピューター名を指定します。
コンピューター名を入力すると後は自動でオフラインドメイン参加が行われます
以下はネットワークはオフラインの状態となっていますが、ドメインの参加は見た目は行えている状態となっています。
ただし、AD のコンピューターアカウントの情報を見るとドメイン参加は完了していません。
ネットワークに接続すると AD のコンピューターアカウントの情報が変更されドメインに参加された状態となります。
# AD に参加すると、[operatingSystem][operatingSystemVersion] が入りますので、参加されているかどうかはこの属性を確認すると判断できるかと。
今回はプロビジョニングデータを C:Windowstemp の配下においてしまっていますので、マスターイメージとする場合はプロビジョニングデータは固定されてしまいますが、USB メモリ等に配置して、そこから読み込むようにできれば、柔軟性は高くなるかと思います。
Windows 7 のときに同様の仕組みを実装したことがあったのですが、その際は SetupComplete.cmd を使用した記憶があり、Windows 8.1 でもそれで試してみたのですが、SetupComplete.cmd が実行されるタイミングではコンピューター名は指定したものになっていなかったので、以前どうやって実装したのかが謎なままでした…。