【 Move-VM 】コマンドレット――Hyper-V仮想マシンを新しいHyper-Vホストへ移動するWindows PowerShell基本Tips(154)

本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「Move-VM」コマンドレットを解説します。

» 2026年03月05日 05時00分 公開
[後藤諭史株式会社ネットワールド]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windows PowerShell基本Tips」のインデックス

連載目次

 本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、「Hyper-V」の仮想マシンを現在稼働しているHyper-Vホストから新しいHyper-Vホストへ移動する「Move-VM」コマンドレットです。

Move-VMコマンドレットとは?

 Hyper-Vホスト上では複数の仮想マシンを稼働できますが、Hyper-Vホストに対する長期間のメンテナンスやHyper-Vホストの老朽化による廃止などの理由で、現在稼働している仮想マシンを他のHyper-Vホストに移動したいという話は運用上よくあるかと思います。

 高可用性機能である「フェールオーバークラスタリング」を構成しているHyper-Vホスト間であれば、異なるホストへ仮想マシンを移動する「ライブマイグレーション」や「クイックマイグレーション」を使用できますが、単体のHyper-Vホスト間ではフェールオーバークラスタリングの機能を利用できません。

 ただし、仮想マシンの各種ファイルとともに別のHyper-Vホストに移動する場合には、フェールオーバークラスタリングを使用できない単体のHyper-Vホスト間でも移動できます。

 この移動操作をGUI(グラフィカルユーザーインタフェース)ツールである「Hyper-Vマネージャー」で行う場合、仮想マシンを選択して「移動」を実行します。仮想マシンの「移動ウィザード」が起動し、「仮想マシンを移動する」を選択することで仮想マシンを別のHyper-Vホストへ「記憶域」とともに移動できます(画面1)。

ALT 画面1 「Hyper-Vマネージャー」で「移動」を選択することで「移動ウィザード」が起動し、別のHyper-Vホストへ移動できる

 Hyper-Vホスト間の移動操作は、当然のことながらPowerShellでも可能で、今回紹介するMove-VMコマンドレットを使用します。

 記憶域の移動を伴うHyper-Vホストの移動は、仮想マシンの電源が入っている状態でも実施可能で、仮想マシンの無停止移動(ストレージライブマイグレーション)も可能です。

 しかし、Hyper-Vホストをまたぐストレージライブマイグレーションを行う場合は、権限設定が必要になる場合があります。その設定については別連載「今だからこそ学び直すHyper-V再入門」の第14回「いまさら聞けないHyper-Vの高可用性機能(1):フェールオーバークラスタリングとライブマイグレーション」で説明していますので、ご確認ください。

【注】Move-VMは「Windows PowerShell用Hyper-Vモジュール」に含まれるコマンドレットになります。GUIの「Windowsの機能の有効化」や「役割と機能の追加」からHyper-Vを有効化するか、PowerShellから「Enable-WindowsOptionalFeature」コマンドレットを使用して有効化します。


Move-VMコマンドレットの書式

Move-VM [オプション]


Move-VMコマンドレットの主なオプション

オプション 意味
-Name 仮想マシン名を指定する
-DestinationHost 移動先となるリモートのHyper-Vホストのコンピュータ名を指定する
-IncludeStorage 移動先でも同じファイルパスを使用する際に指定する。省略可能
-DestinationStoragePath 移動先のフォルダパスを指定する。省略可能
-VirtualMachinePath 仮想マシンの構成ファイルの移動先を指定する。省略可能
-SnapshotFilePath 仮想マシンのチェックポイントフォルダの移動先を指定する。省略可能
-SmartPagingFilePath 仮想マシンのスマートページングフォルダの移動先を指定する。省略可能
-Vhds 仮想マシンの仮想ハードディスクの移動先を指定する。省略可能
-ComputerName リモートのHyper-Vホストの仮想マシンを移動する場合にコンピュータ名を指定する。省略可能

仮想マシンを記憶域とともに移動する

 仮想マシンを記憶域とともに別のHyper-Vホストに移動する場合は、「-IncludeStorage」オプション、もしくは「-DestinationStoragePath」オプションを使用して、移行先の記憶域のパスを指定します。

 移動先のHyper-Vホストが同じストレージ構成の場合、「-IncludeStorage」オプションを指定することで移動元と同じフォルダパスで移動できます(画面2)。

コマンドレット実行例

Move-VM -Name "Test-VM01" -DestinationHost "host39" -IncludeStorage

ALT 画面2 「-IncludeStorage」オプションを使用して、別のHyper-Vホストの同じフォルダパスへ記憶域とともに仮想マシンを移動した

 Move-VMコマンドレット実行前後の「Get-VM」コマンドレットなどの実行結果からも、「host39」上の同じフォルダパスへ仮想マシンが記憶域とともに移動していることが確認できます。

 移動先のドライブ構成が異なる場合や、移動先では別のフォルダパスを使用したい場合には「-DestinationStoragePath」オプションを使用して、移動先のフォルダパスを指定します(画面3)。「-DestinationStoragePath」オプションを使用した場合には、全ての仮想マシンを構成するファイルが指定したフォルダパスの配下に配置されます。

コマンドレット実行例

Move-VM -Name "Test-VM01" -DestinationHost "host39" -DestinationStoragePath "D:\Test-VM01"

ALT 画面3 「-DestinationStoragePath」オプションを使用して、別のHyper-Vホスト上の指定されたフォルダに仮想マシンを移動した

 画面3からも移動先のHyper-Vホストでは、移動元と異なるフォルダパスで移行していることが分かります。


仮想マシンのファイル群の移動先を全て個別に指定して仮想マシンを移動する

 仮想ハードディスクだけを別のドライブに移動したいといった個別の要件がある場合には、それぞれの移動先フォルダを個別に指定して、仮想マシンを移動できます。

 個別のフォルダを指定したい場合、主なオプションにもある通り「-VirtualMachinePath」オプションや「-SnapshotFilePath」「-Vhds」などを使用します。

 例えば、「Test-VM01」の記憶域を移動する際、構成ファイルは「D:\VMConfig\Test-VM01」、チェックポイントとスマートページングは「D:\VMFiles\Test-VM01」、仮想ハードディスクは「D:\VHDs\Test-VM01」に移動したいといった場合は、以下のようなコマンドレット実行例になります(画面4)。

コマンドレット実行例

Move-VM -Name "Test-VM01" -DestinationHost "host39" -VirtualMachinePath "D:\VMConfig\Test-VM01" -SnapshotFilePath "D:\VMFiles\Test-VM01" -SmartPagingFilePath "D:\VMFiles\Test-VM01" -Vhds @(@{"SourceFilePath" = "D:\Hyper-V\Test-VM01\Virtual Hard Disks\Win2022_20240526.vhdx"; "DestinationFilePath" = "D:\VHDs\Test-VM01\Win2022_20240526.vhdx"})

ALT 画面4 仮想マシンの各ファイルの移動先を個別に指定して仮想マシンを別のHyper-Vホストへ移動した

 「-Vhds」オプションは配列で指定することが必須で、仮想ハードディスクの移動元のフルパスを「SourceFilePath」、移動先のフルパスを「DestinationFilePath」で指定する必要があります。

 画面4では仮想ハードディスクは1つでしたが、仮想ハードディスクが2つ接続されている仮想マシンでは個別に移動先を指定する必要があり、「-VHDs」オプションで個々の仮想ハードディスクの移動先を配列で指定します(画面5)。

コマンドレット実行例

Move-VM -Name "Test-VM02" -DestinationHost "host39" -VirtualMachinePath "D:\Test-VM02\Config" -SnapshotFilePath "D:\Test-VM02\SnapShot" -SmartPagingFilePath "D:\Test-VM02\SmartFile" -Vhds @(@{"SourceFilePath" = "D:\Hyper-V\Test-VM02\Virtual Hard Disks\Win2022_20240526.vhdx"; "DestinationFilePath" = "D:\Test-VM02\VHDs\Win2022_20240526.vhdx"} , @{"SourceFilePath" = "D:\Hyper-V\Test-VM02\Virtual Hard Disks\Test-VM02_Data01.vhdx"; "DestinationFilePath" = "E:\VHDs\Test-VM02\Test-VM02_Data01.vhdx"})

ALT 画面5 複数の仮想ハードディスクを持つ仮想マシンでは、仮想ハードディスクの移動先も個別に指定できる

仮想マシンのファイル群は移動せずに、仮想マシンの稼働Hyper-Vホストだけを移動する

 仮想マシンの各ファイルをSMB(Server Message Block)共有上に置いている場合のみ、仮想マシンの記憶域を移動せずに、仮想マシンを稼働させるHyper-Vホストだけを移動できます(画面6)。

コマンドレット実行例

Move-VM -Name "SMB-VM01" -DestinationHost "host39"

ALT 画面6 SMB共有に仮想マシンのファイル群を置いている場合は、稼働するHyper-Vホストのみを移動できる

 画面6を見ると、仮想マシンのファイル格納先は変更されていないものの、稼働するHyper-Vホストは「host39」に変更されていることが分かります。仮想マシンの電源がオンの状態でも仮想マシンの稼働Hyper-Vホストを変更でき、いわゆるフェールオーバークラスタリング上で稼働している仮想マシンのように無停止で移動できます。

 ただし、Move-VMコマンドレットによる稼働Hyper-Vホストのライブマイグレーションは、前述の通り、「SMB共有上に仮想マシンのファイル群が格納されている場合のみ」実行可能です。iSCSIなどの共有ディスク上にある場合は、フェールオーバークラスタリングを構成する必要があり、Hyper-Vホストのローカルディスクを使用している場合には、記憶域の移行を伴うライブマイグレーションを行う必要があります。

筆者紹介

後藤 諭史(ごとう さとし)

株式会社ネットワールド所属。Microsoft MVP for Cloud and Datacenter Management(2012-2026)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

アイティメディアからのお知らせ

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2026
人に頼れない今こそ、本音で語るセキュリティ「モダナイズ」
4AI by @IT - AIを作り、動かし、守り、生かす
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。