PowerShell を使用して Hyper-V 仮想マシンを管理する方法

PowerShellを使ったHyper-V仮想マシンの管理は、一度コツをつかめば本当に助かります。GUIで仮想マシンの設定や操作が面倒だと感じるなら、PowerShellコマンドを使えば、仮想マシンの作成、ネットワークスイッチ、スナップショットなど、日常的な作業の多くを効率化できます。さらに、導入やアップデートを自動化する場合は、スクリプト化が非常に有効です。しかし、WindowsのバージョンやHyper-Vのセットアップが多岐にわたる場合は特に、どのコマンドが実際に必要な機能を果たすのかを見極めるのは難しい場合があります。そこで、一般的に必要なコマンドと、実際のセットアップに基づいたヒントをいくつかご紹介します。少し面倒ですが、とりあえず使えます。 `Install-WindowsFeature`、`New-VMSwitch`、`New-VM` などのコマンドや、`Start-VM`、`Stop-VM` などの VM 制御コマンドに慣れておく必要があります。また、パス、ネットワークアダプタ名、VM 名を正しく設定することが非常に重要です。正しく設定しないと、スクリプトがうまく動作しない可能性があります。また、Windows は必要以上に動作を複雑にする傾向があるため、期待通りに動作しない場合は、再起動や機能の再有効化を行うと改善する場合があります。それでは、手順を見ていきましょう。

PowerShell で Hyper-V VM を管理する方法

サーバーまたはデスクトップで Hyper-V の役割を有効にする

Hyper-V が動作しない場合(Windows をインストールしたばかり、または新規セットアップの場合など)、まずその役割を有効にする必要があります。Windows Server の場合、コマンドは以下のとおりです。

Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

Windows 10/11 では少し異なり、通常は PowerShell 経由で実行します。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V –All

このコマンドは機能のインストールを開始します。設定によっては再起動を求められる場合がありますので、その点にご注意ください。注:CPUが仮想化(Intel VT-xまたはAMD-V)をサポートしていること、およびBIOSで仮想化が有効になっていることを確認してください。有効になっていない場合、何も動作しません。コマンドプロンプトまたはPowerShellで「systeminfo」コマンドを実行すると、仮想化が有効になっているかどうかを確認できます。

Hyper-V がアクティブで準備完了であるかどうかを確認します

正直なところ、Hyper-Vが正しくインストールされているかどうかは不明な場合があります。以下を実行してください。

Get-Command -Module hyper-v

コマンドが表示されない場合は、Hyper-V がまだ準備ができていません。また、次のコマンドで Hyper-V ホストの情報を確認することもできます。

Get-VMHost|fl *

または、次の方法で CPU 情報を確認します。

Get-ComputerInfo -Property "CsNumberOfLogicalProcessors", "CsTotalPhysicalMemory"

コマンドが機能する場合は、VM の作成と管理を開始する準備が整います。

ネットワークアクセス用の仮想スイッチを作成する

仮想スイッチの作成は、通常、ネットワーク設定の最初のステップです。まず、ネットワークアダプタを一覧表示します。

Get-NetAdapter | where {$_.status -eq "up"}

適切なスイッチ(通常は「Ethernet」などの名前)を特定します。ハードウェアがSR-IOVをサポートしている場合(NICによって異なります)、スイッチでSR-IOVを有効にする必要がありますが、これはまた別の話です。物理NICをブリッジする外部スイッチを作成するには、次のコマンドを実行します。

New-VMSwitch -Name "ExternalVMSwitch" -AllowManagementOS $True -NetAdapterName "Ethernet0" -SwitchType External

「Ethernet0」を実際のインターフェース名に置き換えてください。アダプターが使用中の場合や設定が適切でない場合、スイッチの作成に失敗することがあります。アダプターがアクティブであり、何か異常な機器に接続されていないことを再度確認してください。

PowerShellでVMを構築する

ここからが面白いところです。VMを素早く立ち上げるには、次のようにします。

$VMName = "mun-prx2" $VMConfig = @{ Name = $VMName MemoryStartupBytes = 1GB Generation = 2 Path = "E:\HV\$VMName" SwitchName = "ExternalVMSwitch" } New-VM @VMConfig # And create a virtual disk if you haven’t yet: New-VHD -Path "E:\HV\$VMName\$VMName.vhdx" -SizeBytes 10GB # Attach that disk: Add-VMHardDiskDrive -VMName $VMName -Path "E:\HV\$VMName\$VMName.vhdx" 

これにより、1GBのRAM(初期設定)と10GBの仮想ディスクを搭載した第2世代VMが作成されます。必要に応じてタイミングとサイズを調整できます。パスが存在しなかったり、権限が間違っていたりするとエラーが発生する場合がありますので、実行前にフォルダが書き込み可能で、存在していることを確認してください。

VM設定を即座に調整

メモリや CPU を増やす場合は、次のようなコマンドを使用します。

Get-VM -Name "mun-prx2" | Set-VMMemory -StartupBytes 2GB Set-VMProcessor -VMName "mun-prx2" -Count 2 

これらは、VMのパワー不足やリソース不足に気づいた場合に役立ちます。一部の変更にはVMのシャットダウンまたは再起動が必要になるため、それに応じて計画を立ててください。

VMの制御 – 起動、停止、保存、スナップショット

VMの起動:`Start-VM -Name “mun-prx2″` — 当然です。安全にシャットダウンするには:`Stop-VM -Name “mun-prx2″` (正しくシャットダウンするには、ゲストOS内でIntegration Servicesが動作していることを確認してください)。すぐに電源を切るには(ハードシャットダウン):

Stop-VM -Name "mun-prx2" -TurnOff

スナップショット(チェックポイント)の取得:

Checkpoint-VM -VMName "mun-prx2" -SnapshotName "Before major changes"

状況が悪化した場合には、スナップショットに復元することで多くのことが元に戻る可能性があります。

Restore-VMCheckpoint -VMName "mun-prx2" -Name "Before major changes" -Confirm:$false 

追加のヒント – VMの移動、サイズ変更、エクスポート

VM を別のディスクに移動する必要がある場合は、このコマンドが役立ちます。

Move-VMStorage -VMName "mun-prx2" -DestinationStoragePath "D:\VMs"

仮想ディスクのサイズ変更は難しいですが、次の方法で実行できます。

Resize-VHD -Path 'E:\HV\mun-prx2\mun-prx2.vhdx' -SizeBytes 50GB

VM をバックアップまたはクローンする場合は、まずそれらをエクスポートします。

Export-VM -Name "mun-prx2" -Path "C:\VHD\export"

後で、そのエクスポートからインポートしたり複製したりできます。

ゲストIPの取得とVMへの接続

ゲスト OS が使用している IP アドレスを確認するには (DHCP であり、ネットワーク設定で許可されている場合)、次の手順を実行します。

Get-VM | Select -ExpandProperty NetworkAdapters | Select VMName, IPAddresses, Status

VM のコンソールに接続するには、次のコマンドを使用します。

vmconnect.exe localhost mun-prx2

PowerShell Direct などのより高度な機能 (ネットワーク設定なしで VM 内で直接コマンドを実行できる) については、以下を使用します。

Invoke-Command -VMName mun-prx2 -ScriptBlock {Get-Process} Enter-PSSession -VMName mun-prx2

ファイルのコピーは次のように実行できます。

$session = New-PSSession -VMName mun-prx2 -Credential (Get-Credential) Copy-Item -ToSession $session -Path E:\ISO\install.iso -Destination D:\ISO

一見、大変そうに見えますが、一度慣れてしまえば、PowerShell から Hyper-V を制御することは、複数の VM を素早く管理する便利な方法になります。ただし、パス、VM 名、ネットワークアダプターを念入りに確認するのを忘れないでください。たいてい、ここで問題が発生します。

まとめ

  • Windows Server エディションとクライアント エディションの両方で、PowerShell を使用して Hyper-V を有効にします。
  • ネットワーク アダプターに基づいて仮想スイッチを作成します。
  • `New-VM` を使用して新しい VM をデプロイし、リソースを設定し、ディスクをリンクします。
  • 起動/停止、スナップショット、エクスポート/インポートを使用して VM の状態を制御します。
  • PowerShell Direct を使用すると、ネットワークを煩わすことなくゲスト内部を管理できます。

まとめ

PowerShell を使った Hyper-V の管理は、最初は大変に感じるかもしれません。特にパスやコマンドが期待通りに動作しない場合はなおさらです。再起動や権限の調整だけで済む場合もあります。しかし、少しの忍耐があれば、GUI を何度もクリックすることなく VM 環境を制御できる非常に強力な方法になります。たとえいくつかのタスクを自動化したり、VM のセットアップを迅速化したりするだけでも、この方法がお役に立てば幸いです。