Hyper-Vマネージャの問題点
Hyper-Vの管理はGUIツールである「Hyper-Vマネージャ」で行なうのが基本である。ただし、Hyper-Vマネージャには2つの欠点がある。1つはServer Coreで使えないこと、もうひとつはGUI特有の煩雑さである。
Windows Serverのほとんどの管理ツールはMMC(マイクロソフト管理コンソール)のスナップインとして構成されている。ところがServer CoreではMMCが動作しない。Windows Server 2008以降では、ほとんどの管理機能はコマンドでも実行できるようになっているにもかかわらず、Hyper-Vの管理機能だけは備わっていない。
Hyper-Vの管理インタフェースはWMI(Windows Management Instrument)を使っているので、原理的にはWMIを呼び出すようなスクリプトを書けば管理できる。しかし、WMIの利用はかなり複雑だし、VBScriptのようなスクリプト言語を使う必要がある。対話的に簡単に使うというわけにはいかない。
できあいのスクリプトでもあれば別だが、それもあまりない。マイクロソフトではスクリプトのサンプルを「スクリプトセンター」として公開しているが、Hyper-Vの管理スクリプトは決して多くない。
そもそもGUIツールは、繰り返しに不向きだという問題もある。GUIは、初めて操作するには便利だが、操作に習熟しても効率が上がらない。慣れてくると操作ミスも起きやすい。[はい]と[いいえ]を間違えた人は多いはずだ。
コマンドの場合は、少々タイプミスをしてもエラーが起きるだけで実害はない。連続した作業をスクリプトにしておけば、複雑な手順の繰り返しも簡単だ。コマンドは、上級者だけでなく、ミスをしやすい初心者にとっても便利である。
PowerShellを使ったHyper-V管理
マイクロソフトは、CodePlexサイト上にPowerShellを使ったHyper-V 2.0管理ツール「PowerShell management Library for Hyper-V」を公開している。CodePlexは、マイクロソフトが運営するオープンソースを含む開発プロジェクトのホスティングウェブサイトだ。
「PowerShell management Library for Hyper-V」は内部でWMIを呼んでいる。ソースコードも公開されているので、興味があれば自由に内部を解析できる。ただし、単に利用するだけならWMIのことは忘れても構わない。
Windows Server 2008 R2ではServer Core上で.NET Frameworkが動作するようになったためPowerShellも利用できるようになった。「PowerShell management Library for Hyper-V」の動作対象としてもServer Coreが明記されているので安心して欲しい。
PowerShell management Library for Hyper-Vのインストール
PowerShell management Library for Hyper-Vのインストールは以下の手順で行なう。
1. http://pshyperv.codeplex.com/からダウンロード
2. 得られたZIPファイルを展開
3. install.cmdコマンドを実行
install.cmdコマンドは以下の構成を行なう。
1. .NET FrameworkとPowerShellをインストール
install.cmdは、ServerCore用のコマンドになっているので、フルインストール版のWindows Server 2008 R2ではエラーメッセージが表示される。フルインストール版には、必要なモジュールが最初から含まれているので、このエラーは無視して良い。
2. Program Filesの下にフォルダmodulesを作成し環境変数PSModulePathに登録
これ以降に起動したプロセスではPowerShellのimport-moduleコマンド(後述)でフルパスを指定する必要がなくなる。
3. modulesの下にフォルダHyperVを作成し、必要なファイルをコピー
4. 署名のないスクリプトを実行できるように、レジストリキーを変更
PowerShell management Library for Hyper-Vには署名がついていない。そこで、以下のコマンドを実行して、ローカルコンピュータ上のスクリプトは署名なしで実行できるように設定している。
Set-ExecutionPolicy RemoteSigned
5. 必要なモジュールを読み込んでPowerShellを起動
以上の手順で、PowerShellが起動するはずだが、実際にはモジュールの読み込みがエラーになる。筆者はまず以下の手順でエラーを回避した。
1. PowerShell management Library for Hyper-Vの展開先にある「PS_Console.REG」をメモ帳で開く
2. "ExecutionPolicy"="RemoteSigned"と書いてある行を"ExecutionPolicy"="Unrestricted"に変更
3. install.cmdコマンドを実行
途中でファイル毎に実行の可否を尋ねてくるので、すべてRキーを押して許可する(または、ダウンロードしたZIPファイルのプロパティを開き、「ブロックの解除」をクリックして、ダウンロード属性を解除することでも実行できる)。
ただし、この方法には問題がある。ExecutionPolicyをUnrestrictedにすると、あらゆるスクリプトの実行が許可されてしまうため、セキュリティ上のリスクがあるからだ。また、いちいちプロンプトが表示されるため煩雑であるという問題もある。可能であれば社内の証明機関を使って自分で署名した方が良いだろう。
そこで、筆者は次ページの手順で署名を行なった。なお、誌面の都合で証明機関の構成手順は省略する。