今回は、Microsoft AzureのWindowsゲストで利用可能な「VMエージェント」を取り上げ、オンプレミスのHyper-V環境に応用してみたいと思います。
2014年2月からMicrosoft Azure仮想マシンに用意されている「仮想マシンイメージ」(簡易作成またはギャラリー)や「マイイメージ」(Sysprep済みVHD)からWindows Serverの仮想マシンを新規作成すると、標準でデスクトップの右上に仮想マシンのシステム情報が表示されるようになりました(画面1)。「Windows Sysinternals」のユーティリティを使ったことがある人なら容易に想像できると思いますが、デスクトップの背景にシステム情報を表示するツールといえば「BGInfo」です。
Azure仮想マシンのこの新機能は、2014年2月から利用可能になった新しい「VMエージェント」に既定で含まれる「BGInfo拡張」が提供しています。VMエージェントは、Hyper-Vのゲストコンポーネントである「Hyper-V統合サービス」のことではありません。
VMエージェントはAzure PowerShellコマンドレットを使用して、Azure仮想マシンのリモートデスクトップ接続の有効化やパスワードのリセット、マイクロソフトおよびサードパーティ製の拡張機能のインストールや構成を可能にするコンポーネントです(画面2)。
現在、いくつかの拡張機能が利用できますが、このうちカスタムスクリプト(スクリプトの自動実行)とセキュリティ拡張機能は2014年5月に利用可能になったものです。利用可能な拡張機能にBGInfoは表示されませんが、これはVMエージェントのインストールに既定で組み込まれているからです。
新しいVMエージェントが利用可能になった以降に新規作成したAzure仮想マシンでは、既定でBGInfo拡張が有効になります。それ以前に作成したAzure仮想マシンやマイディスクから作成したAzure仮想マシンの場合は、MSIファイルからVMエージェントをゲストに手動でインストールすることで対応できます。詳しい手順は説明しませんが、VMエージェントを後からインストールした場合、BGInfoは含まれません。VMエージェントのインストール後に、Azure PowerShellコマンドレットを使用することで、BGInfo拡張機能を手動で有効化することができます。
BGInfo拡張がAzure仮想マシンのデスクトップに表示する情報には、通常、Azure仮想マシンのゲスト側からは知ることができない、Azure仮想マシン固有のデプロイメント情報(Deployment Id)やパブリックIP(Public IP)が含まれているので、Azure向けにカスタマイズされたBGInfoが入っていると思うかもしれません。どうなっているのか、調べてみました。
Azure仮想マシンのCドライブを探ってみると、VMエージェントが「C:\WindowsAzure」フォルダー下にインストールされているのがすぐに分かります。このフォルダーの中には、VMエージェントのサービスやコンポーネント(WindowsAzureGuestAgent.exe、WindowsAzureTelementryService.exe、WaAppAgent.exeなど)やログファイルが配置されています。
BGInfoはVMエージェントの拡張機能であり、VMエージェントの場所には存在しません。BGInfoの実体は、「C:\Packages\Plugins\Microsoft.Compute.BGInfo\1.1\BGInfo.exe」にありました。実行してみると、本稿執筆時点で最新の「BGInfo 4.20」です。これは、Windows Sysinternalsのダウンロードサイトから入手できるものと全く同じものです(画面3)。
Windows SysinternalsのBGInfoと違いがあるとすれば、「BGInfoLauncher.exe」というランチャーらしき実行ファイルと、「config.bgi」というファイルがあることです。拡張子「.bgi」は、BGInfoでカスタマイズした内容を保存した構成ファイルであり、「BGInfo.exe」の引数に渡すことで設定を読み込むことができるものです。
BGInfoのGUI画面の「File」メニューから「config.bgi」を読み込んでみると、BGInfo拡張がデスクトップ右上に表示するシステム情報と同じ構成が再現されました(画面4)。また、Azure固有の情報は、カスタム(Custom)フィールドとして定義されていました。具体的には、レジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Azure\BgInfo」キーにある3つの値からデータを取得していることが分かります。このように、BGInfo.exeはレジストリを含む、さまざまな場所から情報を取得できるようになっています。
大体分かってきましたが、まだ、レジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Azure\BgInfo」キーは誰が書き込んだものなのか、「BGInfo.exe」はどのタイミングで実行されたのかという疑問は残ります。
その答えは「BGInfoLauncher.exe」のログファイル「C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.BGInfo\1.1\BGInfoLauncher.log」や、VMエージェントのログファイル「C:\WindowsAzure\Logs\WaAppAgent.log」などから得られました。
拡張機能のインストール時やゲストOSの起動時にVMエージェントから読み出された「BGInfoLauncher.exe」が、VMエージェントから取得したAzure固有の情報をレジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Azure\BgInfo」キーに書き込みます。
さらに、「BGInfoLauncher.exe」はユーザーの次回ログオン時に「BGInfo.exe」が実行されるように、レジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run」に「BGInfo」というREG_SZ値を作成し、データとして次のようなコマンドラインを設定します。
"C:\Packages\Plugins\Microsoft.Compute.BGInfo\1.1\BGInfo.exe" "C:\Packages\Plugins\Microsoft.Compute.BGInfo\1.1\config.bgi" /NOLICPROMPT /timer:0 /log:C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.BGInfo\1.1\BGInfo.log
このコマンドラインは、「config.bgi」を読み込み、BGInfoの設定用GUIを表示せずにすぐにデスクトップの壁紙を変更します(画面5)。
なお、BGInfoは開始時に収集したシステム情報を指定した壁紙や背景色に合成してビットマップを作成し、背景画像を変更したら即終了してしまうものなので、デスクトップの情報がリアルタイムでは更新されないことに留意してください。別の言い方をすれば、壁紙を書き換えた後は、BGInfoがシステムリソースを消費することはないということです。
以上を踏まえて、Azure仮想マシンのBGInfo拡張機能を、オンプレミスのHyper-V環境に応用してみたいと思います。とは言っても、Hyper-V仮想マシンのVMエージェントをインストールするなんてことはしません。Hyper-VにVMエージェントをインストールしたところで、Azure上でないと機能を果たさないので全く意味がないからです。使うのは、Windows SysinternalsのBGInfoだけです。
Windows SysinternalsのBGInfoをダウンロードしたら、Hyper-V仮想マシンの任意のフォルダーに配置しておき、BGInfoを起動して設定GUI画面でデスクトップに表示するシステム情報をカスタマイズします(画面6)。このとき、前回説明した「KVPデータ交換サービス」がレジストリに書き込む値とデータを活用するとよいでしょう。
ゲストOSの情報は「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Auto」キーに、Hyper-Vホストの情報は「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters」キーにある値とデータから取得できます。
カスタマイズが完了したら「File」メニューの「Save As」コマンドを使用して、拡張子「.bgi」ファイルとして保存し、「Cancel」ボタンでBGInfoを終了しておきます。あとは、Azure仮想マシンのBGInfo拡張機能に倣って、レジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run」に「BGInfo」というREG_SZ値を作成し、データとして次のようなコマンドラインを書き込みます(画面7)。
パス\Bginfo.exe 構成ファイル(.bgi)のパス /timer:0 /silent /accepteula
以上の設定で、Hyper-Vの仮想マシン接続ツールやリモートデスクトップ接続を使用して仮想マシンのゲストOSにログオンすると、壁紙にシステム情報が表示されるようになります。
最後に、何か都市伝説的なお話でもしておきましょう。Windows Sysinternalsは、マイクロソフトがSysinternalsを買収して得たユーティリティです。Sysinternalsの創設者は、マーク・ルシノビッチ(Mark Russinovich)氏とブライス・コスウェル(Bryce Cogswell)氏。二人は買収とともにマイクロソフトの一員になりました。
コスウェル氏はもう何年も前にマイクロソフトを離れたそうですが、BGInfoを始めとする、Windows Sysinternalsの数多くのツールにその名前が残されています(前出の画面3のCopyrightにあります)。そして、ルシノビッチ氏の現在の肩書きは“Technical Fellow in the Microsoft Azure Group”です。VMエージェントに標準でBgInfo拡張が組み込まれたことに大いに関係していそうですね。
このルシノビッチ氏、最近は小説も書いているそうです。
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2014)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.