Hyper-V PowerShell モジュール: より多くのことを行う方法

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ホストで対話的にコマンドを実行できるようになります。

Enter-PSSession -ComputerName HYPER -Credential (Get-Credential)

クライアントと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)
New-VM -Name "HYPER" -MemoryStartupBytes 512MB
New VM named “HYPER”

他のVM属性に基づいてVMを作成

時々、他のVMと類似した属性を持つVMを作成する必要があります。これは、異なるVM属性を変数に割り当て、新しいVMを作成する際にこれらの変数を使用することで行うことができます。例として、以下のようにします:

1. 既存のVMの属性をクエリするためにGet-VMを実行し、出力を以下に示すように変数に割り当てます。

$VMold = Get-VM "HYPER_old"

2. Get-VMMemoryコマンドレットを実行し、属性を収集するVMの名前(この場合はメモリ)を指定し、メモリ値を変数に割り当てます。

$memory = (Get-VMMemory -VMName $VMold.name).Startup

3. 次に、New-VMコマンドレットを使用して新しいVMを作成します。この際に、他のVMから取得した値を使用して、Name、VMの世代(Generation)を指定します。

New-VM -Name "newVM" -Generation $VMold.Generation -MemoryStartupBytes $memory
New VM created from Old existing VM

PowerShellで既存のVMをリストアップする

Hyper-Vホスト上に少なくとも2つのVMが作成されているとします。作成されたVMを列挙する方法を見てみましょう。そのためには、以下のようにします:

1. 単独でGet-VMコマンドレットを実行します。パラメータを指定せずに実行すると、Get-VMはHyper-Vホストに存在するすべてのVMをクエリします。

Get-VM
Output of Get-VM run with no Parameters

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

Get-VM -Name HYPER_old
Output of Get-VM run with the -Name Parameter

次に、特定のStateにあるすべてのVMを検索する必要があるかもしれません。問題ありません。それには、Get-VMを実行し、すべてのVMをクエリし、出力をWhere-Objectコマンドレットにパイプします。

以下の例では、パイプ ‘|’ は Get-VM の出力をStateRunningのVMオブジェクトに制限します。Get-VM -VMName HYPER_old | Where-Object {$_.State -eq 'Running'}

Get-VM -VMName HYPER_old | Where-Object {$_.State -eq 'Running'}
Output of Get-VM filtering out the VM with the state of Running

VMの起動と停止

この時点で、以前に作成したVMはおそらく停止しています。それを起動してからVMの停止方法も学びましょう。

リモートのHyper-VホストのPowerShellセッションで:

1. Start-VMコマンドレットを実行し、-Nameパラメータで以前に作成したVMの名前(Name)を指定します。

Start-VM -Name NewVM
The Start-VM command starting the VM named HYPER_old

VMが起動したので、Stop-VMコマンドレットを使用して、NameパラメータでVMの名前を指定して停止します。

Stop-VM -Name HYPER_old

上記のコマンドを実行すると、VMがシャットダウンする様子が以下のスクリーンショットで確認できます。

Stop-VM stopping the HYPER_old 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が適切に自動的にシャットダウンされます。

Set-VM -Name HYPER_old -AutomaticStopAction Shutdown

Hyper-V VMの保存

リモートのHyper-VホストのPowerShellセッションでは、後で使用するためにVMの状態を保持するために作成したVMを保存する必要がある場合があります。これを行うには、Nameパラメータを使用して保存したいVMの名前を指定してSave-VM cmdletを使用します。

保存したいVMは、実行中の状態である必要があることに注意してください。

Save-VM -Name HYPER_old
Save-VM cmdlet saving HYPER_old VM state.

Hyper-V VMのチェックポイントの管理

変更を行う前にVMの既存の状態を保存したり、VMの変更を元に戻したりする必要がある場合は、チェックポイントについて学ぶ必要があります。チェックポイントは、任意のHyper-V VMのディスクとメモリの状態を素早く保存する便利な方法です。

お使いのHyper-Vホストで、VMの名前を指定してチェックポイントの名前を指定してCheckpoint-VM cmdletを実行します。

パラメータ名SnapshotName は、Hyper-V 2012で使用されていた古い用語を参照していますが、スナップショットはチェックポイントと同じものです。

Checkpoint-VM -Name HYPER_old -SnapshotName MyVMSnapshot
Using Checkpoint-VM to create a Snapshot of HYPER_old VM called MyVMSnapshot

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

Get-VMSnapshot -VMName HYPER_old
Retrieves all the Snapshots stored for HYPER_old VM

結論

このチュートリアルのすべてのデモを実行した場合、PowerShellでHyper-V VMを管理する方法についての知識が得られます。これで、1つ、10個、または100個のVMを管理するために必要な知識が得られるはずです!

PowerShellとHyper-Vを使用して、どのようなタスクを自動化できると思いますか?

Source:
https://adamtheautomator.com/hyper-v-powershell/