仮想化: Windows PowerShell で Hyper-V 仮想マシンを作成する
定期的に仮想マシンを作成して構成する必要がある場合は、Windows PowerShell を使用すると、このプロセスを高速化することができます。
Neil Tucker
新しいサーバーまたは標準化されたサーバーのセットアップをテストする場合、Hyper-V では、テスト構成をすばやく効率的に実行するための環境を提供します。この特性により、Hyper-V は、一般的なラボ環境になっていますが、唯一の難点は、仮想マシン (VM) を定期的に作成して構成する必要があることです。
Hyper-V イメージを簡単に作成するには、Windows PowerShell スクリプトが便利です。Windows PowerShell は、カスタマイズできる範囲や、その柔軟なコマンド構造から、あらゆる環境に適合します。自動および無人セットアップ戦略と組み合わせて使用すると、あらゆるコンピューター構成を実現できます。
Windows PowerShell を構成する
この戦略では、Hyper-V の役割の要件を満たす Windows Server 2008 R2 システムを実行していると仮定します。システムで Hyper-V のスクリプト処理を行えるようにするには、次の手順を実行します。
- Hyper-V の役割と Windows PowerShell をインストールします。このためには、サーバー マネージャーか、ServerManagerCmd.exe コマンド ライン ツール (ServerManagerCmd.exe –install Hyper-V および ServerManagerCmd.exe –install PowerShell) を使用します。
- Windows PowerShell を構成して、スクリプトを実行できるようにします。スクリプトの実行は、既定では無効になっています。有効にするには、Set-ExecutionPolicy コマンドレット (Set-ExecutionPolicy RemoteSigned) を使用します。
- Windows PowerShell Hyper-V モジュールをダウンロードしてインストールします。このモジュールは、Windows PowerShell に特化して設計されたコマンドレットにアクセスするために必要になります。CodePlex の PowerShell Management Library for Hyper-V ページ (英語) から、開発が終了していて安定しているリリースの最新版をダウンロードします。インストールする前に、圧縮されたファイルから block 属性を削除するようにしてください。この属性を削除すると、デジタル署名を行わなくてもセットアップ スクリプトが実行されるようになります。Server Core にインストールしている場合は、セットアップ ファイルをサーバーにコピーする前に、別のコンピューターでモジュール ファイルの block 属性を解除して、ファイルを解凍します。これらの操作を別のコンピューターで実行しないと、これらの操作をサーバーで実行するために別のツール (SysinternalsSuite の stream.exe ツールと 7-Zip) が必要になります。
- 管理者特権で実行している Windows PowerShell コマンド プロンプトで、新しくインストールしたモジュールをインポートして (Import-Module HyperV)、Hyper-V コマンドレットを有効にします。エラー メッセージが表示された場合、前の手順が抜けていないかどうか確認します。Hyper-V 環境の管理に Windows PowerShell を定期的に使用する場合は、Windows PowerShell のプロファイル ファイルに Import-Module コマンドレットと Set-ExecutionPolicy コマンドレットを追加することをお勧めします。このようにすると、サーバーを毎回構成する必要なく、これらのコマンドレットを使用することが可能になります。コマンドレットの実行に関する問題を回避するには、管理者特権で実行している Windows PowerShell コマンド環境を常に使用する必要があります。
コマンドレットが正常にインストールされ、適切に機能していることを確認するには、Get-Command コマンドレット (Get-Command –Module Hyperv) を使用して、使用可能なコマンドの一覧を確認します。他のモジュールと同様、各コマンドレットには、その機能や使い方の例についての便利な情報が付属しています (「Get-Help New-VM –Detailed」コマンドまたは「Get-Help New-VM –Examples」コマンドを実行してください)。さらに詳細な情報については、CodePlex (英語) でご覧いただけます。
Hyper-V 用の Windows PowerShell スクリプトを構成する
Windows PowerShell の環境が整ったら、新しい VM の作成に取り掛かることができます。Windows PowerShell を管理者権限で起動して、コマンドを管理者特権で実行するようにしてください。スクリプトでは、Hyper-V のコマンドレットを使用して、セットアップで指定した 5 個の変数 (図 1 参照) に基づいて新しい VM を作成します。各変数には、既定値が割り当てられており、値が指定されない場合には既定値が使用されます。
図 1 Hyper-V 仮想マシン (VM) のセットアップ中に定義される変数の説明
$SRV1 | VM の名前 |
$SRAM | VM に割り当てられるメモリの量 |
$SRV1VHD | VM で使用する仮想ハード ドライブのサイズ |
$VMLOC | VM 仮想ハード ドライブを作成する場所 |
$Network1 | VM の仮想ネットワーク接続 |
これらの変数を定義したら、New-Image.ps1 スクリプト (図 2 参照) では、$Network1 変数に割り当てられた値を使用して Hyper-V の仮想ネットワークを構成します。プライベート ネットワークが存在しているかどうかにかかわらず、New-VMPrivateSwitch コマンドレットで新しいプライベート ネットワークを定義する前に、Remove-VMSwitch コマンドレットを使用して、プライベート ネットワークを削除します。このようにすると、重複するネットワークを同じ名前で定義することを回避できます。
図 2 新しい仮想マシンを作成する New-Image.ps1 スクリプト
# This script creates a new Hyper-V machine with hard drive, memory & network resources configured. # Variables $SRV1 = Read-Host "Enter the Virtual Machine name (Press [Enter] to choose Server01): " if ($SRV1 -eq ""){$SRV1="Server01"} ; if ($SRV1 -eq $NULL){$SRV1="Server01"} $SRAM = Read-Host "Enter the size of the Virtual Machine Memory (Press [Enter] to choose 512MB): " if ($SRAM -eq ""){$SRAM=512MB} ; if ($SRAM -eq $NULL){$SRAM=512MB} $SRV1VHD = Read-Host "Enter the size of the Virtual Machine Hard Drive (Press [Enter] to choose 40GB): " if ($SRV1VHD -eq ""){$SRV1VHD=40GB} ; if ($SRV1VHD -eq $NULL){$SRV1VHD=40GB} $VMLOC = Read-Host "Enter the location of the Virtual Machine file (Press [Enter] to choose C:\HyperV): " if ($VMLOC -eq ""){$VMLOC="C:\HyperV"} ; if ($VMLOC -eq $NULL){$VMLOC="C:\HyperV"} $Network1 = Read-Host "Enter the name of the Virtual Machine Network (Press [Enter] to choose Network1): " if ($Network1 -eq ""){$Network1="Network1"} ; if ($Network1 -eq $NULL){$Network1="Network1"} # Configure Hyper-V Virtual Network remove-vmswitch $Network1 -force -erroractionsilentlycontinue new-vmprivateswitch $Network1 # Create Virtual Machines MD $VMLoc -erroractionsilentlycontinue new-vm $SRV1 -path $VMLoc new-vhd -vhdpaths $VMLoc\$SRV1 -size $SRV1VHD add-vmdisk -vm $SRV1 -controllerid 0 -lun 0 -path $VMLoc\$SRV1 get-vm $SRV1 | add-vmdrive -controllerid 1 -lun 0 -dvd get-vm $SRV1 | set-vmmemory -memory $SRAM get-vm $SRV1 | add-vmnic -virtualswitch $Network1
実際に VM を作成するプロセスの最後の部分は、簡単です。仮想ハード ドライブ (VHD) のディレクトリの場所を作成すれば、6 個のコマンドレットによって新しい VM が作成および構成されます。
New-VM コマンドレットでは、仮想マシン自体と仮想マシンの場所を定義します。New-VHD コマンドレットでは、VHD ファイルを作成し、Add-VMDisk コマンドレットでは、VHD ファイルを VM に割り当てます。Add-VMDrive コマンドレットでは、仮想マシンに DVD ドライブを割り当て、Set-VMMemory コマンドレットでは、RAM の容量を定義し、Add-VMNIC コマンドレットでは、ネットワーク カードを構成します。
新しい VM を構成したら、使用する任意の OS をインストールできます。また、OS のインストール プロセスのスクリプト作成や管理にも、Windows PowerShell を使用できます。Windows PowerShell を使用して、これらのタスクを自動化すると、特に定期的にこれらのタスクを実行する必要がある場合、プロセス全体の高速化と効率化を図ることができます。
Neil R. Tucker は、MCT、MCITP、MCDBA、MCSE、MCDST の資格を保持しており、技術者、トレーナー、テクニカル ライターとして 17 年以上の経験があります。彼は、SQL Server、Windows Server、Windows 7、および Windows PowerShell についてのコンサルティングや講義を行っています。Microsoft ラーニングのコース 50331 "Windows 7, Enterprise Desktop Support Technician" (Windows 7、エンタープライズ デスクトップ サポート技術者) の作成者でもあります。