Microsoft Deployment Toolkit (MDT) シリーズの前回の記事では、展開リポジトリを保存する共有ドライブへのアクセスを制御するファイルである Bootstrap.ini の使い方について説明しました。Bootstrap.ini の仕組みと、Lite-Touch Interface (LTI) を使用した自動展開プロセスを実現するために Bootstrap.ini をどのように変更できるかについても説明しました。
この記事では、MDT の機能を拡張し、CustomSettings.ini ファイルを使用して自動展開シナリオを実現することで、この取り組みをさらに進めます。このファイルは、展開プロセスにおけるスクリプトの実行順序を管理するだけでなく、スクリプト化されたイベントへの応答を提供することで、真に手間のかからない展開を実現します。
まず要件を簡単に見てみましょう:
- Windows Server 2008 (またはそれ以降) を実行しているサーバー
- Windows展開サービスがサーバーにインストールされ構成されている
- サーバーに Microsoft Deployment Toolkit がインストールおよび構成されている
- サーバーへの管理者アクセス
- 設定ファイルを編集するためのテキストエディタ
- ネットワーク図 (これはオプションですが、複数のサイトで作業する場合や、複数のサーバー間で負荷を分散する場合に非常に役立ちます。)
Bootstrap.ini と同様に、このファイルは設定、カスタム、デフォルトの 3 つのセクションに分けられます。
参照: Microsoft Deployment Toolkit のセットアップ方法: ステップバイステップ
設定
「設定」セクションの「優先度」ヘッダーは、展開フェーズでスクリプトが実行される際に、後続のセクションとそこに含まれる行の処理順序に影響します。これらのエントリを並べ替えることで、展開フェーズの実行を制御できます。この機能を活用することで、Systems Center Configuration Manager (SCCM) にアップグレードすることなく、多くの同じタスクを実行でき、生産性をさらに向上させることができます。
[Settings]
Priority=Init,DefaultGateway,ClientType,Model,Default
Properties=MyCustomProperty;BIOSVersion;SMBIOSBIOSVersion;ProductVersion,ComputerSerialNumber
Bootstrap.ini ファイルと同様に、CustomSettings.ini (CS) を編集することで、展開プロセスを開始する前に考慮したい情報(必要に応じて呼び出せる変数として存在するデータなど)を追加できます。これは、複数のサイトを扱う場合や、デスクトップには特定の設定を適用し、モバイルデバイスには異なる設定を適用したい場合などに非常に便利です。
上記のスニペットを見ると、「Priority」の下に「Properties」という追加のヘッダーがあることがわかります。「Priority」には、CSファイル内に存在するセクションと、MDTがそれらを読み取る順序が含まれます。「Properties」はCSファイルで使用されている変数を指し、MDTは展開プロセス全体を通してこれらの変数を認識します。
変数を操作し、Priorityヘッダーを変更する際には、CSファイルの各コンポーネントを本番環境に導入する前に、十分な注意を払い、テストを実施することが不可欠です。最後に覚えておくべきことは、CSファイル内の情報は先着順で処理されるということです。2つ以上のエントリが競合している場合、最初に検出されたエントリが書き込まれ、その他のエントリは破棄されます。
参照: Windows 10 スポットライト: 準備、修復、回復 (Tech Pro Research)
カスタム
CSファイル内のカスタムエントリは、自動化レベルでの動作に必須ではありません。ただし、環境のニーズに応じて、MDT設定の管理を簡素化するために、いくつかのカスタムエントリを実装することをお勧めします。
よくリストされるセクションの一つに[Init]があります。これは「initialization(初期化)」または「initialize(初期化)」の略です。このセクションのエントリは通常、最優先事項として配置され、最初のデプロイメントスクリプトが実行される前のデプロイメントプロセスの開始時に存在する必要があるデータが含まれています。
[Init]
ComputerSerialNumber=#Right("%SerialNumber%",7)#
MDTOU=OU=New,OU=Computers
OUPath=OU=Sites,DC=THEMACJESUS,DC=COM
このタイプのセクションが必要な理由はさまざまですが、一般的にはコンピューターのシリアル番号の判別に使用されます。たとえば、CS ファイルで使用されているコンピューターの命名スキームを考えてみましょう。LocationName 変数 (DefaultGateway に一致) を名前の最初の 3 文字として入力し、その後に「-」とコンピューターのシリアル番号を入力する必要があります。シリアル番号が 11 文字未満のコンピューターでは、これは問題になりません。ただし、シリアル番号が 11 文字を超えるコンピューターの場合、MDT で生成されたコンピューター名は切り捨てられ、Active Directory (AD) に事前設定された名前と一致しなくなる可能性があります。これにより、スクリプトがドメイン参加コマンドを実行して AD で一致するものが見つからず失敗すると、将来的に問題が発生する可能性があります。その結果、展開プロセス全体が失敗します。
[DefaultGateway]
192.168.1.1=NYC
192.168.2.1=LAX
[ニューヨーク]
LocationName=ニューヨーク
MachineObjectOU=OU=%MDTOU%,OU=%LocationName%,OU=%OUPath%
[LA]
LocationName=ロサンゼルス
MachineObjectOU=OU=%MDTOU%,OU=%LocationName%,OU=%OUPath%
上記のデフォルト ゲートウェイでは、192.168.2.1 は LAX に関係します。これは、LocationName=Los Angeles という追加変数を含む同じ名前のセクションにリンクされ、ロサンゼルス ブランチの AD に新しいコンピュータ オブジェクトを作成するための OU へのパスを提供する略語です。
デフォルトのキーボード レイアウトの言語を設定する KeyboardLocalePE= を指定するなど、他のエントリを含めることもできます。これは、他のサイトとは異なる言語レイアウトを必要とする他の国の場所を管理する場合に最適です。
次は [ClientType] セクションです。これはオプションですが、デスクトップ、ラップトップ、サーバーなどの複数の種類の機器を管理するときに、展開が非常にスムーズに進むことがわかります。
[ClientType]
SubSection=Server-%IsServer%
[Server-True]
TaskSequenceID=WIN2012_X64
[Server-False]
サブセクション=Desktop-%IsDesktop%
[デスクトップ-True]
TaskSequenceID=WIN10_X64
[Desktop-False]
サブセクション=Laptop-%IsLaptop%
[Surface Pro 3]
DriverGroup001=Windows 10\x64\%Model%
DriverSelectionProfile=nothing
DeploymentType=NEWCOMPUTER
これらのエントリを連結することで、CSファイルはWMIスクリプトに、まずイメージ作成対象のデバイスのハードウェアタイプをチェックするよう指示しています。IsDesktopという値が返された場合、デスクトップコンピューターが正しく識別されているため、スクリプトにTaskSequenceID=WIN10_X64という変数が書き込まれ、そのデバイスのOSとしてWindows 10 – 64ビット版がインストールされます。ハードウェアチェック中に別の値(IsServerなど)が検出された場合、割り当てられた変数は動的に変更され、TaskSequenceID=WIN2012_X64が割り当てられます。これにより、スクリプトはサーバーハードウェアのOSとしてWindows Server 2012 – 64ビット版をインストールするよう指示されます。
ヘッダーを対象デバイスの製品名に変更することもできます。これにより、スクリプトはハードウェアIDの種類を推測するのではなく、内部製品名に基づいて1つ以上の変数を割り当てることができるため、より正確なマッチングが可能になります。
注: コンピューター上の製品名を確認する最も簡単な方法の 1 つは、コマンド ラインを起動し、次のコマンドを入力して Enter キーを押すことです。
wmic get product name
デフォルト
3つ目、そして最後のセクション、そしておそらく最も重要なセクションは「デフォルト」セクションです。デフォルトではすべてのエントリがここに配置され、すべてのデバイスのすべての展開セッションに適用されるため、このセクションが最も重要視されることがよくあります。サイト全体で同じメーカー/モデルの機器、同じバージョンのWindows、そしてすべての設定が同一であれば、このコンセプトは完璧に機能するように見えますが、現実にはそうはいきません。
そのため、デフォルト セクションは、すべてのデバイスに対して静的なままになる設定と変数を適用するだけでなく、展開プロセス全体を通じて MDT スクリプトを指示する設定の主なソースとして機能するため、「すべてを網羅する」ものと見なされることがよくあります。
[Default]
_SMSTSORGNAME=MAC|JESUS: %OSDComputername%
OSInstall=Y
DoNotCreateExtraPartition=YES
TimeZoneName=Eastern Standard Time
AdminPassword=password
OSDComputername=%DefaultGateway%-%SerialNumber%
すべてのデバイスが同じタイムゾーン内にある場合、TimeZoneName=などの特定のエントリをここに配置できます。この設定は、OSInstall=Yや_SMSTSORGNAME=などの設定の中でも、MDTによるオペレーティングシステムのインストール(展開プロセスの中核機能)を可能にし、展開プロセス中に会社名などのタイトルを提供します。また、%OSDComputerName%などの変数を使用することもできます。これにより、イメージ作成中のコンピューターの名前がそのフィールドに動的に入力されるため、どのコンピューターであるかを一目で確認できます。
;JoinWorkgroup=WORKGROUP
JoinDomain=THEMACJESUS.COM
DomainAdmin=administrator
DomainAdminDomain=THEMACJESUS.COM
DomainAdminPassword=password
MachineObjectOU=OU=Unknown Computers,OU=%OUPath%
DomainErrorRecovery=AUTO
Administrators001=THEMACJESUS\user
上の図では、まだデフォルトセクションの一部であるこれらのエントリは、JoinWorkgroup= または JoinDomain= エントリを使用して参加するワークグループまたはドメインの名前を指定することで、ワークグループまたはドメインへの参加などの機能を実行するために変更できる設定の更なる例として役立ちます。プロセスをさらに自動化するには、DomainAdmin=、DomainAdminDomain=、および DomainAdminPassword= エントリを追加して、ドメイン権限を持つアカウント名、このアカウントのパスワード、およびアカウントが属するドメイン名を含める必要があります。
注: CSファイルに含まれるすべてのエントリはプレーンテキストで記述されていることに注意してください。ベストプラクティスとしては、これらの設定を空白のままにしておく(MDTが展開プロセスを開始する前に資格情報を要求するようにする)か、ADにアカウントを作成し、この単一の管理タスクを実行するために必要な権限のみを委任することで、コンピューターをドメインに参加させるだけのアカウントを作成することが挙げられます。こうすることで、アカウントが侵害された場合でも、パスワードをリセットして脅威を軽減することが比較的容易になります。
Microsoft(MS)は、昇格された権限を持つ標準アカウントを使用してコンピューターオブジェクトをドメインに参加させる際に、デフォルトのマシンクォータをリセットすることを推奨します。MSは、このクォータを10台に設定しています。このクォータを超えると、そのアカウントはそれ以上のデバイスをドメインに参加させることができません。このクォータを拡張したり、大規模ネットワークの場合は完全に削除したりするには、Active Directory Service Interfaces(ADSI)を少し編集するだけで簡単に行えます。
SkipAdminPassword=YES
SkipApplications=YES
SkipBDDWelcome=YES
SkipBitLocker=YES
SkipComputerBackup=YES
SkipComputerName=YES
SkipDeploymentType=YES
SkipDomainMembership=YES
SkipUserData=YES
SkipFinalSummary=YES
SkipLocaleSelection=YES
SkipPackageDisplay=YES
SkipProductKey=YES
SkipRoles=YES
SkipSummary=YES
SkipTaskSequence=YES
SkipTimeZone=YES
上記は、ウィザード ペインの表示を無効にして、同時にウィザード ペインの質問に答えることで、MDT スクリプト プロセスの大部分を自動化する設定の核心です。
DeploymentType=NEWCOMPUTER
SkipCapture=YES
終了アクション=再起動
EventService=http://192.168.1.1:9800
SLShareDynamicLogging=\\1192.168.1.1\DeploymentShare$\Logs\%COMPUTERNAME%
HideShell=YES
最後に、これらの最後の設定はオプションですが、CSファイルに含めることを強くお勧めします。これらの設定は、FinishAction=RebootやHideShell=Yesなどのセキュリティ設定を処理し、デプロイメントの終了時に、新しくインストールされたマシンで最初のブートを実行するために再起動コマンドを実行するように指定します。また、この最初のブート中はエクスプローラーシェルを非表示にする必要があります。これは、システムがローカル管理者として自動的にログオンするため、デプロイメント後のプロセスが完了するまで、エクスプローラーシェルが誰でも使用できる状態になってしまうためです。
EventService= 設定により、ここで入力したサーバーおよび共有パスでのシステム ログが有効になり、MDT が正しく実行されない原因となる特定の障害や問題のトラブルシューティングに役立ちます。
最後に、MDTではCustomSettings.iniファイル全体を通して数百近くの設定が利用可能です。複数の回答が可能なフォークを持つものもあれば、単純な「はい」または「いいえ」の入力のみのものもあります。残念ながら、ここですべてを網羅するには多すぎます。ただし、特定の設定について、またそれらを他の設定と連携させて環境をより良く機能させる方法についてさらに詳しく知りたい場合は、MicrosoftがTechNetでドキュメントを公開しています。
こちらもご覧ください…
- Microsoft Deployment Toolkit を構成する方法 (TechRepublic)
- PowerShell を使用して WDS でのアカウントの事前ステージングを自動化する方法 (TechRepublic)
- DaRT を Microsoft Deployment Toolkit と Windows Deployment Services に統合する方法 (TechRepublic)
- MDT と WDS を使用して Windows を展開する方法 (TechRepublic)
- Microsoft Deployment Toolkit を使用してアプリケーションを展開する方法 (TechRepublic)
あなたの考え
CustomSettings.ini ファイルを使用して展開プロセスを自動化しましたか?TechRepublic の他のメンバーとアドバイスや経験を共有してください。