何でも屋: 1 つのイメージを作成する
WDS ドライバー データベースを使用すると、イメージ ベースの Windows 展開戦略に磨きをかけて洗練された技術に昇格させることができます。
Greg Shields
私は約 15 年前に、初めて Windows 展開イメージを作成しました。あのころを懐かしく思います。当時、イメージ ベースの展開の最大の難関は、DOS ブート ディスクに適切な NDIS ネットワーク ドライバーを見つけることでした。
それから数年後の 1999 年、私の勤務先のチーフ エンジニアは苦境に立たされていました。非常に短期間で、まとまった数の新しいデスクトップを構築する必要に迫られていました。リソースが不足していましたし、私は何でも挑戦してみたいと思っていたので、チーフ エンジニアにある賭けを申し出ました。それは、1 か月以内に 300 台のデスクトップを構築できたら、自分をサーバー管理者にして欲しいというものでした。Symantec の Ghost イメージング テクノロジという秘密兵器を持っていたので、期日の 1 週間前に構築が完了しました。それから間もなく、私は会社創業以来の最年少サーバー管理者になりました。
多くの IT プロフェッショナルにとって、デスクトップを構築する手法は当時からそれほど進化していません。しかし、イメージ展開の自動化によって、そのプロセスは劇的に速くなりました。何千台とまではいかなくても、何百台ものデスクトップを、導入するのとほぼ同じ速さで展開できます。このテクノロジは変化しているため、皆さんは、さらに複雑になることに恐れを感じるかもしれませんが、同時に新しいレベルの自動化に感銘を受けることでしょう。
こうした変化には顕著なものが 2 つあります。1 つは、従来の一体型の Windows イメージ作成のアプローチからの進化です。階層型アプローチが従来のアプローチに取って代わっています。このアプローチについては、約 2 年前の 2009 年 12 月号のコラム「階層型アプローチを使用して Windows デスクトップを展開する」で紹介しました。
階層型アプローチでは Windows OS のコンポーネントを個別の階層に分散するため、すべての必要な構成を柔軟に組み込めます。実際に、この作業を正しく行うと、デスクトップに関連するトラブルシューティングを行う必要がなくなるという可能性がもたらされます。適切な自動化により、デスクトップをトラブルシューティングするよりも再構築した方が速く問題を解決できるようになります。2010 年 8 月号のコラム「トラブルシューティングの特異点」で説明したように、マイクロソフトが無償で提供する展開ツールを使用すると、この目的をほぼ完全に果たすことができます。
2 つ目の変化は、階層型アプローチの基礎で、どこにでも展開できる 1 つのイメージを使用するようになりました。
ドライバーの違い
1 つのイメージを使用して展開できる手法にたどり着くまでには長い時間がかかり、その道のりは平坦ではありませんでした。多くの問題は、さまざまなデスクトップとラップトップで使用するドライバー セットの違いによるものでした。たとえば、HP Pavilion Elite デスクトップと HP Pavilion dv7t ラップトップでは、使用するドライバーが異なります。そのため、OS の展開には複数のイメージが必要でした。つまり、ドライバーの構成ごとに 1 つのイメージを用意する必要がありました。
ところが、Windows Server 2008 R2 の Windows 展開サービス (WDS) の登場により事態は一変しました。以前のバージョンの Windows Server を使用して WDS 展開を行っている場合は、この新しいバージョンへのアップグレードを検討することをお勧めします。きっと気に入ると思います。
図 1 Windows 展開サービスの [ドライバー] ノード
WDS にはさまざまな機能強化が施されていますが、最も重要な機能は、[ドライバー] ノード配下のあらゆる場所にインストールできるイメージを作成する新機能です。図 1 は、WDS コンソールで [ドライバー] ノードを展開した状態を示しています。
この新しい [ドライバー] ノードによって作業方法が大きく変わり、Windows インストールで検索できるドライバーのデータベースを作成できるようになりました。このデータベースには、特定のデスクトップやラップトップ構成に対応したドライバー セットだけではなく、あらゆるハードウェアのすべてのドライバーが格納されています。Windows に組み込まれているプラグ アンド プレイ機能を使用すると、すべての Windows のインストールで、このカスタム データベースを使用して、ハードウェアに対応するドライバーを検索できます。
この機能は、新しい USB ハード ドライブやデジタル カメラを接続したときに、デバイスに対応するドライバーが自動的に検索されるという処理を実現しているのと同じプラグ アンド プレイ アーキテクチャによって可能になります。この自動化されたプロセスの詳細については、私の新著『Automating Windows 7 Installation for Desktop and VDI Environments (デスクトップおよび VDI 環境の Windows 7 インストールを自動化する、英語)』の第 2 章の "Plug and Play: Awesome for Windows Installations (プラグ アンド プレイ: Windows インストールに使えるすばらしい機能)" というセクションを参照してください。
プラグ アンド プレイ: Windows インストールに使えるすばらしい機能
プラグ アンド プレイは、Windows のインストールで、その真価を発揮します。プラグ アンド プレイが新しく接続されたハードウェアを監視するサービスであることは、既にご存じでしょう。プラグ アンド プレイでは、新しいハードウェアを検出すると、ハードウェア コンポーネントの特性と使用可能なドライバーを照合します。照合が完了すると、適切なドライバーが自動的にインストールされ、ハードウェアが使用できる状態になります。
これは新しいデバイスの接続時に見慣れた動作だと思いますが、プラグ アンド プレイはインストール プロセスでも動作します。インストール中に Windows によってプラグ アンド プレイの機能が呼び出されて、搭載ハードウェアが検出されます。その後、検出されたドライバーが使用可能な場合は、そのドライバーがインストールされます。適切なドライバーがない場合は、使用可能な汎用ドライバーが使用されます。つまり、必要なのは、インストール中にカスタム ドライバーを使用できるようにするメカニズムです。カスタム ドライバーが使用できれば、Windows によって残りの処理が実行されます。
図 2 ドライバー パッケージの追加ウィザード
前述のメカニズムは、新しい WDS の [ドライバー] ノードのことです。WDS のコンソールで [ドライバー] ノードを右クリックし、[ドライバー パッケージの追加] をクリックします。すると、図 2 のような画面が表示されます。ドライバー パッケージを追加するには、ドライバーを最も基本的な形式で解凍する必要があります。このウィザードでは、ドライバーの INF ファイルと、INF ファイルに関連付けられている CAT、SYS、DLL などインストールを完了するために INF ファイルで必要な他のすべてのファイルが検索されます。
図 3 解凍された HP ラップトップ用の NIC ドライバー
ドライバーを解凍する実際のプロセスは、ドライバーがパッケージ化された方法によって異なります。ほとんどの場合、少なくともパッケージの解凍が必要になります。たとえば、HP では、サポート Web サイトからダウンロードできる自己展開型の EXE ファイル形式でドライバーを配布しています。
この EXE ファイルはダブルクリックしないでください。ドライバー ファイルを解凍するには、WinZip や 7-Zip などのサード パーティ製の解凍ツールを使用します。結果は図 3 のようになります。ここには、図 2 のウィザードで検索している INF ファイルが表示されます。ウィザードで図 3 の場所を参照するように指定して、WDS ドライバー データベースに自動的にドライバーを取り込みます。
図 4 使用可能なドライバー パッケージが表示される画面
INF ファイルは、ドライバーで必要なあらゆるコンテンツをインストールする方法についての一連の指示が記載されたファイルに過ぎません。INF ファイルによっては、複数のドライバーをインストールするものもあります。そのため、ウィザードの次の画面 (図 4 参照) では、追加するドライバーを選択または選択解除することができます。必要なドライバーを選択し、ウィザードの残りのページの指示に従ってドライバーをドライバー グループに追加します。
ドライバーの自動追加
前述の手順に従ってドライバーを追加すると、簡単にデータベースを作成できます。ただし、このツールの能力を完全に発揮するための追加機能があります。ほとんどの IT チームは、IT チーム専用のサーバーまたは共有にコンテンツを格納しているでしょう。このような共有には、頻繁に使用するアプリケーションやツールの ISO ファイルを含むフォルダーと長年かけて収集したドライバーを格納しているサブフォルダーが含まれているのではないかと思います。
図 5 大規模なドライバー グループ
もう一度図 2 を見て、どちらのオプション ボタンが選択されているかを確認してみてください。2 つ目の [フォルダーからすべてのドライバー パッケージを選択する] をクリックすると、魔法のような処理が行われます。どのような処理かというと、IT チーム専用の共有のサブフォルダー (および、明言されていませんが、そのサブフォルダーの各サブフォルダー) に含まれているすべてのドライバーを一度に追加することができます。
このオプション ボタンをクリックし、ドライバー パッケージの追加ウィザードで IT チーム専用の共有のサブフォルダーを参照して、長年かけて収集したすべてのドライバーが自動的に取り込まれるのを確認してください。もちろん、これらのドライバーも、前述のプロセスを使用して解凍する必要があります。
この手順が完了したら、WDS を使用して Windows イメージを展開します。Windows のインストール プロセスでは、各デバイスの GUID と、関連付けられているいずれかのドライバーが照合されます。検出されたペアごとに、ドライバーが自動的にインストールされます。
フィルターとグループによる分離
私が所有しているデバイスのドライバーを取り込むと、26 個のドライバー パッケージが作成されました。パッケージはそれぞれ少し異なります。図 5 に示すように、異なるプロセッサ アーキテクチャ用のパッケージもあれば、機能ごとにドライバーが必要になるデバイスもあります。パッケージを右クリックし、[プロパティ] をクリックすると、表示されたダイアログ ボックスの [ドライバー] タブで、各パッケージでインストールされるドライバーの詳細を確認できます。
あらゆるデバイスに対応する 1 つのドライバー グループを作成することから始めると良いでしょう。ほとんどの展開チームは、それ以上の作業を行う必要はありません。ただし、適切に動作しないドライバーが存在することもあります。プラグ アンド プレイでデバイスに対応していないドライバーが選択されたり、WDS 単独では特定できない、ハードウェアに関する特別なニーズがドライバーに存在することがあります。
これに気付くのは、Windows の展開完了後に、デバイスが機能しなかったり、デバイス マネージャーでエラーが表示されたりしたときです。管理を容易にしたり、見やすくするために、ドライバーを分離することもできます。このときに役立つのが、各ドライバー グループ内のフィルターとグループです。
図 1 を見てみると、DriverGroup1 というグループが既に存在していることを確認できます。[ドライバー] ノードを右クリックし、[ドライバー グループの追加] をクリックすると、新しいグループを作成できます。新しく作成したドライバー グループには、ハードウェア フィルターとイメージ フィルターを追加できますが、これらのフィルターは非常に重要です。
図 6 グループへの製造元フィルターの適用
ハードウェア フィルターを適用すると、ドライバー グループのコンテンツが特定のハードウェアの特性を持つものに制限されます。図 6 は、ドライバー グループのインストールを HP ハードウェアに制限する製造元フィルターを作成する方法を示しています。BIOS ベンダー、BIOS バージョン、シャーシの種類、および UUID のフィルターも存在します。
これらの値を特定するには、事前の作業が少し必要になります。これらの値を取得するのにほんの一瞬しかかからない場合でも、OS のインストールが必要です。次の Windows PowerShell コマンドを使用して、各フィルターで必要な情報を収集できます (各フィルターが機能するには、フィルターの値を正確に入力する必要があります)。
- 製造元: Get-WmiObject Win32_ComputerSystemProduct Vendor
- BIOS ベンダー: Get-WmiObject Win32_Bios Manufacturer
- BIOS バージョン: Get-WmiObject Win32_Bios Version
- シャーシの種類: Get-WmiObject Win32_SystemEnclosure ChassisTypes
- UUID: Get-WmiObject Win32_ComputerSystemProduct UUID
シャーシの種類のクエリで入手した情報を変換するには、ルックアップ テーブルが必要です。このクエリでは、システムのシャーシの種類に対応する整数値が返されます。WDS フィルターでは、この値ではなく。値に関連付けられているラベルを使用します。図 7 は、後で必要になる、シャーシの種類の値とラベルのマッピングを示しています。
値 | シャーシの種類のラベル |
1 | その他 |
2 | 不明 |
3 | デスクトップ |
4 | ロー プロファイル デスクトップ |
5 | ピザ ボックス |
6 | ミニ タワー |
7 | タワー |
8 | ポータブル |
9 | ラップトップ |
10 | ノートブック |
11 | ハンドヘルド |
12 | ドッキング ステーション |
13 | オール イン ワン |
14 | サブ ノート型 |
15 | 省スペース型 |
16 | ランチ ボックス |
17 | メイン システム シャーシ |
18 | 拡張シャーシ |
19 | サブ シャーシ |
20 | バス拡張シャーシ |
21 | 周辺機器用シャーシ |
22 | ストレージ シャーシ |
23 | ラック マウント シャーシ |
24 | シールドケース PC |
図 7 シャーシの種類に対応する値とラベル
イメージ フィルターの動作はハードウェア フィルターとは異なり、値と展開イメージの特性を比較します。比較情報は、WIM イメージ ファイルにアタッチされているメタデータから収集されます。
イメージ フィルターには、OS バージョン、OS のエディション、および OS 言語という 3 種類があります。残念ながら、これらの種類の値を収集するには、次に示すような 3 つのまったく異なり、スマートではないメカニズムが必要になります。
- OS バージョン: 正しい OS バージョンを収集するには、WDS を使用して WIM イメージのプロパティで OS バージョンを構築する必要があります。WDS で、展開するイメージを右クリックし、[プロパティ] をクリックして、[バージョン] タブをクリックします。[イメージのバージョン] の横に表示される値に注目してください。この値は 6.1.7600 のような形式になっています。次に、[Service Pack のレベル] という項目名をクリックし、その値を書き留めます。サービス パックが適用されていない Windows 7 では、この値は 0 になります。イメージのバージョンの値の末尾にピリオドを追加し、この値を追加します。結果は、6.1.7600.0 のような形式になります。この最終的な値をフィルターに入力します。
- OS のエディション: 展開するイメージを右クリックし、[イメージのエクスポート] をクリックして、イメージをファイルにエクスポートします。イメージをファイルにエクスポートし、管理者権限で実行しているコマンド プロンプトで「dism /Mount-Wim /WimFile:<Wim ファイルのパス> /index:1 /MountDir:<マウント先フォルダー>」というコマンドを実行します。このコマンドでは WIM ファイルがマウントされるため、次のコマンドで必要な情報を収集できます。「dism /image:<展開先フォルダー> /Get-CurrentEdition」というコマンドを実行して、現在のエディションの値を報告します。その値をフィルターに入力します。値をフィルターに入力したら、WIM ファイルのマウントを解除して破棄できます。
- OS 言語: これは特に難易度の高い手法です。まず、「[convert]::ToString((Get-WMIObject Win32_OperatingSystem OSLanguage | Select-Object -ExpandPropertyOSLanguage), 16)」という少し複雑な Windows PowerShell コマンドを実行します。このコマンドでは、OSLanguagevalue の整数値を収集して、16 進値に変換します。変換後の 16 進値と、ここに記載されているカルチャ名を照合します。
特別な用法
ドライバー グループ データベースの作成を開始するときに、注目すべき設定がもう 1 つあります。各ドライバー グループには、[適用オプション] 設定があります。[適用オプション] 設定は、[ドライバー グループのプロパティ] ダイアログ ボックスの [全般] タブにあります (図 8 参照)。通常、この設定は、クライアント ハードウェアに対応するドライバー パッケージをインストールするために使用します。この設定では、インストール中に、システムに搭載されているデバイスのドライバーのみをインストールするようにプラグ アンド プレイに指示します。これは既定の設定として使用することをお勧めします。
図 8 ドライバー グループごとに存在する [適用オプション] 設定
グループ内のすべてのドライバー パッケージに対応する代替設定があります。これから、そのしくみについて説明します。USB ハード ドライブ、デジタル カメラなど、いつか接続する可能性があるデバイスについて考えてみてください。これらのデバイスにもドライバーが必要です。いつか必要になる可能性があるドライバーのドライバー グループを作成し、すべてのドライバーをインストールするように [適用オプション] を設定すると、その日に備えることができます。そのようなデバイスが接続されると、ドライバーは使用できる状態になります。
ブート ドライバーの導入
ドライバー グループ データベースが完全に自動化されているのは、インストール イメージに対してのみです。デスクトップとラップトップの中には、特別なドライバーがないと Windows PE で Windows を起動またはインストールできないものもあります。たとえば、非標準のハード ドライブが搭載されたコンピューターがこれに該当します。また、問題があるネットワーク カードや予備のビデオ カードも、これに該当する可能性があります。
図 9 ブート イメージへのドライバー パッケージの追加ウィザード
ブート イメージは、インストール イメージほど自動化されていません。ブート イメージを使用する前に、カスタム ドライバーを明示的に挿入する必要があります。それには、[ブート イメージ] ノード配下にあるブート イメージを右クリックし、[イメージにドライバー パッケージを追加する] をクリックします。ウィザードを起動すると、図 9 のようなページが表示されます。
このウィザードでは、Windows PE で必要なドライバーのみが自動的にフィルター処理されます。また、ウィザード ページの上部では、検索条件を調整することもできます。[パッケージの検索] をクリックすると、フィルター条件を満たすドライバーの一覧が返されます。追加するドライバーを選択し、ウィザードの指示に従って操作を続けます。このプロセスの完了には時間がかかります。
この作業を行うときには注意してください。既に説明したように、プラグ アンド プレイでは、GUID とドライバー間のマッピングについて混乱が生じます。その場合、Windows PE で、インストールを開始するのに必要なデバイスが認識されていない可能性があります。つまり、混乱の原因となるドライバーを挿入したということです。原則として、Windows PE が処理を行うために必ず必要な最小限のドライバーのみを追加してください。
Windows PE で混乱が生じるドライバーを挿入した場合は、実行中の処理を停止し、中核となるブート イメージを作成し直します。すべてのデバイスで機能する適切なドライバー セットが見つかるまで、代替ドライバーをインストールします。Windows PE で発生した問題のトラブルシューティングは複雑で、単にイメージを再作成して再開する場合より時間がかかることがあります。
階層型アプローチの基礎
階層型のアプローチに移行すると、デスクトップをかなり簡単に展開できるようになり、よりおもしろい IT 作業に時間を使えるようになります。ただし、これは基礎にすぎません。すぐに、ユーザー データを自動的に移行する他のテクノロジ、市販の最新アプリケーションなどを追加して、プロセスをさらに自動化することになるでしょう。また、今すぐ、完全に自動化された OS の展開プロセスを実現することができます。さらにすばらしいことに、それはマイクロソフトが無償で提供するツールを使用して実現できます。
クリック操作だけで OS 展開を実現することは、未来の話ではなく、既に現実のものとなっています。ただし、多少のセットアップ作業は必ず必要になり、場合によっては多くの作業が必要になることがあるため、前もって少し準備をしておくことで、遠い未来に自動化の恩恵を享受できます。
Greg Shields (MVP) は、Concentrated Technology の共同経営者です。何でも屋である IT プロフェッショナル向けのヒントとテクニックについては、ConcentratedTech.com を参照してください。