If you’re using Microsoft’s Hyper-V virtualization platform to run virtual machines, you’re probably familiar with using the Hyper-V Manager. But did you know you can get more done in less time with the Hyper-V PowerShell module?
このチュートリアルでは、PowerShellを使用してHyper-V VMを管理する方法について学びます。これには、作成、削除、およびVMスナップショットの取得も含まれます。
前提条件
このチュートリアルでは、以下が必要です:
- A Windows client to connect to a remote Hyper-V host. This tutorial uses Windows 10 Pro.
- A Hyper-V host with PowerShell Remoting enabled. The tutorial’s Hyper-V host is named HYPER and is in a workgroup but an Active-Directory joined client and host will work as well.
- A user account on the Hyper-V host in the local administrators group or in the Hyper-V Administrators group. This tutorial will use an account called localadmin.
リモートHyper-Vホストへの接続
PowerShellでHyper-Vを操作するには、どうやらHyper-Vホストと通信できる必要があります。これは、Hyper-Vホストの名前を提供してHyper-V PowerShellコマンドレットを実行するか、PowerShellリモーティングを使用してHyper-Vホスト自体に接続することができます。
このチュートリアルでは、Hyper-Vホストへの持続的な接続を確立し、Hyper-Vホスト自体でコマンドを実行します。
1. ローカルコンピューターでPowerShellを開きます。
2. リモートのHyper-Vホストのホスト名をComputerName
パラメータに指定して、Enter-PSSession
コマンドレットを実行します。このアクションにより、対話型セッションが作成され、リモートのHyper-Vホストで対話的にコマンドを実行できるようになります。
クライアントとHyper-Vホストが同じActive Directoryドメインのメンバーである場合、
Credential
パラメータを使用する必要はありません。
3. 次に、Hyper-Vホストに接続するためのユーザー名とパスワードが求められます。このユーザー名とパスワードは、リモートホスト上のローカル管理ユーザーです。接続されると、PowerShellプロンプトがHyper-Vホストのホスト名を表示するように変更されます。
これでコマンドを実行する準備が整いました!
PowerShellを使用してHyper-V VMを作成する
PowerShellリモート接続を使用してHyper-Vホストに接続されていると仮定し、Hyper-V VMを作成するコマンドを実行しましょう。
シンプルなVMの作成
リモートのHyper-Vホストに接続されたPSRemotingセッションである場合:
New-VM
コマンドレットを実行して、新しいVMを作成します。 New-VM
コマンドレットを使用してVMを作成する際には、作成方法に関するさまざまなオプションがあります。
1. 以下の例では、チュートリアルは次の設定でVMを作成しています:
- A name of MyVM (
HYPER
) - RAMが512MB(
MemoryStartupBytes
)

他のVM属性に基づいてVMを作成
時々、他のVMと類似した属性を持つVMを作成する必要があります。これは、異なるVM属性を変数に割り当て、新しいVMを作成する際にこれらの変数を使用することで行うことができます。例として、以下のようにします:
1. 既存のVMの属性をクエリするためにGet-VM
を実行し、出力を以下に示すように変数に割り当てます。
2. Get-VMMemory
コマンドレットを実行し、属性を収集するVMの名前(この場合はメモリ)を指定し、メモリ値を変数に割り当てます。
3. 次に、New-VM
コマンドレットを使用して新しいVMを作成します。この際に、他のVMから取得した値を使用して、Name
、VMの世代(Generation
)を指定します。

PowerShellで既存のVMをリストアップする
Hyper-Vホスト上に少なくとも2つのVMが作成されているとします。作成されたVMを列挙する方法を見てみましょう。そのためには、以下のようにします:
1. 単独でGet-VM
コマンドレットを実行します。パラメータを指定せずに実行すると、Get-VM
はHyper-Vホストに存在するすべてのVMをクエリします。

2. 1つのVMだけを検索したい場合は、-Name
パラメータを使用します。以下のコマンドは、以前に作成したHYPER_old
という名前のVMをHyper-Vにクエリしています。Get-VM -Name HYPER_old

次に、特定のState
にあるすべてのVMを検索する必要があるかもしれません。問題ありません。それには、Get-VM
を実行し、すべてのVMをクエリし、出力をWhere-Object
コマンドレットにパイプします。
以下の例では、パイプ ‘|’ は Get-VM
の出力をState
がRunning
のVMオブジェクトに制限します。Get-VM -VMName HYPER_old | Where-Object {$_.State -eq 'Running'}

VMの起動と停止
この時点で、以前に作成したVMはおそらく停止しています。それを起動してからVMの停止方法も学びましょう。
リモートのHyper-VホストのPowerShellセッションで:
1. Start-VM
コマンドレットを実行し、-Name
パラメータで以前に作成したVMの名前(Name
)を指定します。

VMが起動したので、Stop-VM
コマンドレットを使用して、Name
パラメータでVMの名前を指定して停止します。
上記のコマンドを実行すると、VMがシャットダウンする様子が以下のスクリーンショットで確認できます。

Hyper-V VMの変更
VMは常に同じ状態に留まるわけではありません。おそらくCPUリソースを増やす必要があるか、VMが一貫してメモリ不足になっているかもしれません。その場合、Set-VM
コマンドレットが役立ちます。
既存のVMを変更する例として、リモートのHyper-VホストのPowerShellセッションで:
実行してくださいSet-VM
cmdlet 、現在実行中のHYPER_old VMを自動的にシャットダウンします。 Name
パラメータを使用して設定したいVMを指定し、AutomaticStopAction
パラメータの値としてShutdown
を指定してください。これにより、Hyper-Vホストがシャットダウンされたときに、VMが適切に自動的にシャットダウンされます。
Hyper-V VMの保存
リモートのHyper-VホストのPowerShellセッションでは、後で使用するためにVMの状態を保持するために作成したVMを保存する必要がある場合があります。これを行うには、Name
パラメータを使用して保存したいVMの名前を指定してSave-VM
cmdletを使用します。
保存したいVMは、実行中の状態である必要があることに注意してください。

Hyper-V VMのチェックポイントの管理
変更を行う前にVMの既存の状態を保存したり、VMの変更を元に戻したりする必要がある場合は、チェックポイントについて学ぶ必要があります。チェックポイントは、任意のHyper-V VMのディスクとメモリの状態を素早く保存する便利な方法です。
お使いのHyper-Vホストで、VMの名前を指定してチェックポイントの名前を指定してCheckpoint-VM
cmdletを実行します。
パラメータ名
SnapshotName
は、Hyper-V 2012で使用されていた古い用語を参照していますが、スナップショットはチェックポイントと同じものです。

一度チェックポイントが作成されると、Get-VMSnapshot
cmdletを使用して、Hyper-Vホストに保存されているすべてのスナップショットを取得できます。以下に、VM HYPER_oldには3つのチェックポイントがあることがわかります。

結論
このチュートリアルのすべてのデモを実行した場合、PowerShellでHyper-V VMを管理する方法についての知識が得られます。これで、1つ、10個、または100個のVMを管理するために必要な知識が得られるはずです!
PowerShellとHyper-Vを使用して、どのようなタスクを自動化できると思いますか?