Windows PowerShell: Hyper-V 仮想マシンを作成する

Hyper-V と Windows PowerShell 3.0 を使うと、仮想マシンを簡単に作成および構成して管理できます。

Neil Tucker

Hyper-V 3.0 は、Windows 8 と Windows Server 2012 で導入された最も優れた新機能の 1 つです。(64 ビットの OS がサポートされていない) Virtual PC に縛られる必要がないため、特に Windows 8 クライアントを使用している場合は、多くの新しい可能性が開かれます。定期的に Hyper-V 仮想マシンで作業する必要がある場合、他のすべての作業を行っているデスクトップで仮想マシンを実行できることは、Windows 8 にアップグレードする大きな理由となるでしょう。また、クライアント デスクトップで 64 ビットの OS イメージを使用できるというメリットもあります。

ネイティブの Windows PowerShell 3.0 モジュールを使って、仮想マシンを構成および管理できるようになりました。これは Hyper-V 3.0 から新しく使えるようになったモジュールです。Windows Server 2008 の Hyper-V 2.0 で同じことを行うには、Windows PowerShell Hyper-V モジュールを CodePlex からダウンロードする必要がありました。詳細な手順については、私が過去に執筆した TechNet マガジンの記事「Windows PowerShell で Hyper-V 仮想マシンを作成する」を参照してください。この記事では、Windows PowerShell 3.0 Hyper-V モジュールを使って、Windows 8 または Windows Server 2012 で仮想マシンを作成する方法を紹介しています。

このテーマについて、マイクロソフト ラーニングのコースを策定しているときに、仮想マシンを作成するのに役立つ Windows PowerShell スクリプトを作りました。この記事では、どれだけすばやく独自の仮想マシンを作成できるのかを示すために、そのスクリプトの簡易版を使用します。また、提供されているいくつかの構成オプションを適切に使用して、仮想マシンのよりよいパフォーマンスを引き出す方法についても説明します。まず、コンピューターに Hyper-V の役割をインストールしましょう。

Hyper-V を構成する

以下の手順に従って、Windows 8 または Windows Server 2012 に Hyper-V の役割をインストールします。コンピューターには、 64 ビットのプロセッサが搭載され、ハードウェア支援による仮想化とハードウェアによる強制的なデータ実行防止 (DEP) がサポートされている必要があります。完全な管理者特権を持つアカウントで起動した Windows PowerShell コンソールで次の手順を実行する必要があります。

  1. 「Enable-WindowsOptionalFeature –Online –FeatureName Microsoft-Hyper-V (または Dism /Online /Enable-Feature /FeatureName:Microsoft-Hyper-V /All)」というコマンドを実行します。
  2. エラーが発生していないことを確認します。
  3. コンピューターをシャットダウンして、再起動します。
  4. 管理者アカウントでコンピューターに再度ログオンします。

Hyper-V の役割を構成すると、Windows PowerShell Hyper-V モジュールがインストールされます。Hyper-V モジュールのコマンドレットを使うには、このモジュールを Windows PowerShell コンソールに追加します (Import-Module Hyper-V)。次に、コマンドレットが使用できることを確認する必要があります (Get-Command –Module Hyper-V)。コマンドレットを使用する前に、Hyper-V 仮想マシン管理サービスが実行されていることを確認します (Get-Service VMMS)。すべての Windows PowerShell Hyper-V モジュールのコマンドレットは管理者特権で実行する必要があります。

仮想マシンを構成する

図 1 に、2 台の仮想マシンを作成して構成するスクリプトを示します。変数を使うと、簡単に処理をカスタマイズおよび標準化できます。OS を自動インストールするには、OS の ISO イメージで使用するディスク上に autounattend.xml ファイルを作成します。このインストール方法を使用しない場合は、このスクリプトから Set-VMDvdDrive コマンドレットと Set-VMFloppyDiskDrive コマンドレットを取り除きます。その後、New-VM コマンドレットを使って各仮想マシンを作成できます。何も指定しなくても、このスクリプトでは DVD ドライブとフロッピー ドライブが作成されます。

図 1 このスクリプトを使うと、2 台の仮想マシンを作成および構成できます

# This script configures the Hyper-V machines used for the 50331 Course. # PowerShell 3.0 and Windows Server 2012 or Windows 8 Pro are required to perform this setup. # The C:\ Drive should have at least 200GB of free space available. # All the files on the 50331 Student CD should be copied to C:\Labfiles before performing this setup. # Variables $CLI1 = "50331-CUSTOM-CLI" # Name of VM running Client Operating System $SRV1 = "50331-CUSTOM-SRV" # Name of VM running Server Operating System $CRAM = 2GB # RAM assigned to Client Operating System $SRAM = 1GB # RAM assigned to Server Operating System $CLI1VHD = 80GB # Size of Hard-Drive for Client Operating System $SRV1VHD = 40GB # Size of Hard-Drive for Server Operating System $VMLOC = "C:\HyperV" # Location of the VM and VHDX files $NetworkSwitch1 = "PrivateSwitch1" # Name of the Network Switch $W7ISO = "C:\Labfiles\Windows7.iso" # Windows 7 ISO $W7VFD = "C:\Labfiles\Windows7.vfd" # Windows 7 Virtual Floppy Disk with autounattend.xml file $WSISO = "C:\Labfiles\W2K8R2.iso" # Windows Server 2008 ISO $WSVFD = "C:\Labfiles\W2K8R2.vfd" # Windows Server 2008 Virtual Floppy Disk with autounattend.xml file # Create VM Folder and Network Switch MD $VMLOC -ErrorAction SilentlyContinue $TestSwitch = Get-VMSwitch -Name $NetworkSwitch1 -ErrorAction SilentlyContinue; if ($TestSwitch.Count -EQ 0){New-VMSwitch -Name $NetworkSwitch1 -SwitchType Private} # Create Virtual Machines New-VM -Name $CLI1 -Path $VMLOC -MemoryStartupBytes $CRAM -NewVHDPath $VMLOC\$CLI1.vhdx -NewVHDSizeBytes $CLI1VHD -SwitchName $NetworkSwitch1 New-VM -Name $SRV1 -Path $VMLOC -MemoryStartupBytes $SRAM -NewVHDPath $VMLOC\$SRV1.vhdx -NewVHDSizeBytes $SRV1VHD -SwitchName $NetworkSwitch1 # Configure Virtual Machines Set-VMDvdDrive -VMName $CLI1 -Path $W7ISO Set-VMDvdDrive -VMName $SRV1 -Path $WSISO Set-VMFloppyDiskDrive -VMName $CLI1 -Path $W7VFD Set-VMFloppyDiskDrive -VMName $SRV1 -Path $WSVFD Start-VM $SRV1 Start-VM $CLI1

New-VM コマンドレットのパラメーターを使用して、各イメージに名前、場所、メモリ割り当て、ハード ドライブ、およびネットワーク接続を指定できます。仮想マシンのネットワーク接続を形成する前に、仮想ネットワーク スイッチを定義する必要があります (New-VMSwitch)。Hyper-V 環境では複数の仮想ネットワーク スイッチに同じ名前付けることができるので、新しいスイッチを作成する前に $TestSwitch 変数を使って、そのネットワーク スイッチが存在していないことを確認します。

さらに、パフォーマンスを上げるために、コンピューターのメモリとハードドライブを構成することもできます。Set-VMMemory コマンドレットを使うと、動的メモリの設定を構成できます (たとえば、メモリの最小値、初期値、および最大値の設定を指定できます)。動的メモリの設定は、複数のイメージをサポートしているコンピューターで非常に有効です。

New-VHD コマンドレットを使うと、固定ディスクやダイナミック ディスクを作成したり、基本ドライブ オプションや差分ドライブ オプションを使用したり、ブロック サイズやセクター サイズを管理したりすることができます。ダイナミック ディスクの設定は既定で有効になっています。ダイナミック ディスクは簡単に作成できますが、固定ディスクの方がパフォーマンスが高くなります。

ハード ドライブの構成で使用するオプションにかかわらず、新しい VHDX 形式は活用することをお勧めします。仮想ハード ディスク (VHD) 形式の制限は 2 TB なので、64 TB のハード ドライブは必要ないかもしれませんが、新しいログ機能により、コンピューターが故障したり、電源障害が発生したりした場合のエラーが少なくなります。

マイクロソフトのドキュメントによると、VHDX ドライブは VHD より動作が速いそうです (私も 2 台のコンピューターでテストを実施して、このことを確認しました)。Convert-VHD コマンドレットや Hyper-V マネージャーを使って、既存の VHD を VHDX に変換できます。また、その逆の変換も可能です。

ご覧のとおり、このスクリプトを使用すると、Windows PowerShell で仮想マシンを作成するのは比較的簡単な作業で、必要なのはいくつかのコマンドレットだけです。サーバーまたはクライアント プラットフォームでイメージを取り扱うユーザーにとっては、Hyper-V により、仮想化されたテスト環境、セキュリティ環境、または展開環境を管理するときの新たな可能性が開かれます。

Neil R. Tucker

Neil R. Tucker は、Windows PowerShell、SQL Server、Windows OS に関する講義を長年担当しているマイクロソフト認定トレーナーで、マイクロソフト ラーニングのコース 50331 "Windows 7, Enterprise Desktop Support Technician" (Windows 7、エンタープライズ デスクトップ サポート技術者) の作成者です。連絡先は、彼の Web サイト (neiltucker.com、英語) をご覧ください。

関連コンテンツ