共用方式為


Move-SCVirtualMachine

將儲存在 VMM 連結庫中或部署在主機上的虛擬機移至主機上的新位置。

Syntax

Move-SCVirtualMachine
    [-VM] <VM>
    [-VMHost <Host>]
    [-ReplicationGroup <ReplicationGroup>]
    [-BlockLiveMigrationIfHostBusy]
    [-UseDiffDiskOptimization]
    [-StartVMOnTarget]
    [-DiscardSavedState]
    [-UseLAN]
    [-UseCluster]
    [-HighlyAvailable <Boolean>]
    [-Path <String>]
    [-JobGroup <Guid>]
    [-RunAsynchronously]
    [-PROTipID <Guid>]
    [-JobVariable <String>]
    [-OnBehalfOfUser <String>]
    [-OnBehalfOfUserRole <UserRole>]
    [<CommonParameters>]

Description

Move-SCVirtualMachine Cmdlet 會將儲存在 Virtual Machine Manager 中的虛擬機 (VMM) 連結庫,或部署到主機上的新位置。

在 System Center 2019 和更新版本中,您可以利用 Windows Server 2016 中包含的新移轉功能。 這些功能包括兩部獨立計算機之間的虛擬機即時移轉,以及獨立計算機與叢集節點之間的實時移轉。 此外,也支援多個並行即時移轉。 如需如何在 System Center 中移轉虛擬機的詳細資訊,請參閱 TechNet 連結庫中的移轉 虛擬機器 和 VMMhttps://technet.microsoft.com/en-us/library/mt710321(v=sc.16).aspx 中的記憶體 (https://technet.microsoft.com/en-us/library/mt710321(v=sc.16).aspx) 。

如果您將部署在執行 Windows Server 2008 R2 的主機上的虛擬機移至執行 Windows Server 2016 的主機,則無法將虛擬機移回執行 Windows Server 2008 R2 的主機。

VMM 包含記憶體移轉功能,可讓您將執行中虛擬機的一或多個虛擬硬碟移至不同的位置。 您可以使用目前的 Cmdlet 和 Move-SCVirtualHardDisk Cmdlet,將 Windows 虛擬硬碟 (.vhd) 檔案和 VMware 型虛擬硬碟 (.vmdk) 檔案移至不同主機上的位置。 您也可以使用 Move-SCVirtualHardDisk Cmdlet,將 .vhd 檔案或 .vmdk 檔案從一個位置移至相同主機上的另一個位置。

若要從主機移動虛擬機,並將它儲存在連結庫中,您必須使用 Save-SCVirtualMachine Cmdlet。

VMM 可以使用下列任何一種傳輸方法,這些方法會依照 VMM 嘗試使用它們的順序列出:

  • Hyper-V 實時移轉。 如果虛擬機正在執行且部署在屬於 Windows Server 2008 R2 或 Windows Server 2016 主機叢集節點的 Hyper-V 主機上,則根據預設,VMM 會使用 Hyper-V 實時移轉,將虛擬機移至叢集中的另一個節點,而不會中斷服務。 移動執行中的虛擬機不會中斷網路連線。 虛擬機會保留其高可用性屬性。 您不需要指定路徑。 您可以同時開始即時移轉多個虛擬機。
  • Windows Server 2008 叢集移轉。 System Center 會繼續支援 Windows 2008 叢集移轉,這有時稱為「快速移轉」。 叢集移轉會在主機叢集的 Hyper-V 節點上移動執行中的虛擬機。 它也可讓您移動處於已停止或已儲存狀態的虛擬機,並部署到叢集中的另一個節點。 如果虛擬機器部署在下列任一節點上,您可以使用叢集移轉,以停止或儲存狀態移動虛擬機:

---- Windows Server 2008 叢集中的 ----A 節點在 Windows Server 2008 R2 叢集中

您不需要指定路徑。 Windows Server 2008 叢集移轉會將虛擬機置於移轉期間處於已儲存狀態。 此作業會導致服務暫時遺失給該虛擬機的任何使用者。

  • VMware 實時移轉。 如果部署在 VMware ESX 主機上的虛擬機使用共用記憶體,VMM 可以使用 VMware 實時移轉功能,將虛擬機移至新的主機。 此功能稱為 VMware VMotion。 您不需要指定路徑。 目前的 Cmdlet 可以使用 VMware VMotion,將虛擬機從一個 ESX 主機移至另一個主機,只有當兩個 ESX 主機都位於 vCenter Server 上的相同數據中心容器時。
  • Citrix XenServer XenMotion。 如果部署在 Citrix XenServer 主機上的虛擬機使用共用記憶體,而且屬於相同的資源集區,VMM 可以使用 XenServer 實時移轉功能,將虛擬機移至不同的 XenServer 主機。 即時移轉功能稱為 Citrix XenMotion。
  • SAN 移轉 (光纖通道、iSCSI 或 NPIV) 。 如果虛擬機位於連線到SAN的主機上,而虛擬機位於SAN LUN 上,則如果該主機可以存取相同的SAN,VMM 可以將該虛擬機移至另一部主機。 在 SAN 傳輸中,目標 LUN 會從來源主機重新導向至目的地主機。 此移轉不會移動檔案。 SAN 傳輸速度比透過局域網路將虛擬機檔案從一部主機移至另一個主機的速度遠快, (LAN) 。 VMM 支援將虛擬機移入和移出叢集的SAN。 您必須指定路徑。 如果有可用的主機匯流排介面卡 (HBA) 與 NPIV 支援,則 VMM 可使用 NPIV SAN 轉移。
  • 網路移轉。 如果沒有更快速的方法可用,VMM 會使用網路傳輸,透過連線兩部主機的 LAN 將虛擬機檔案移至另一部主機。 即使 SAN 傳輸類型可用,您也可以決定使用此傳輸類型。 您必須指定路徑。

當有多個傳輸類型可用時,此 Cmdlet 會自動使用最快的可用傳輸類型來行動虛擬機。 如果方法不適合或可供您想要移動的虛擬機使用,VMM 會嘗試使用清單中的下一個方法。 如果您想要強制使用網路傳輸,請指定 UseLAN 參數。

範例

範例 1:將虛擬機從連結庫移至主機

PS C:\> $VM = Get-SCVirtualMachine | Where-Object { $_.Name -Eq "VM01" -And $_.LibraryServer -Eq "LibServer01.Contoso.com" }
PS C:\> $VMHost = Get-SCVMHost -ComputerName "VMHost01.Contoso.com"
PS C:\> Move-SCVirtualMachine -VMHost $VMHost -VM $VM -Path "D:\VirtualMachinePath"

第一個命令命令會取得名為 VM01 的虛擬機對象,然後將該物件儲存在$VM變數中。 在此範例中,儲存在名為 LibServer01 之連結庫伺服器之 VMM 連結庫中的虛擬機。 此範例假設目前只有一個名為 VM01 的虛擬機儲存在 LibServer01 上。

第二個命令會取得名為 VMHost01 的主機對象,然後將該物件儲存在$VMHost變數中。

最後一個命令會將虛擬機從連結庫中的目前位置移至儲存在 $VMHost 之主機上的位置 D:\VirtualMachinePath。 命令會自動使用最快速的可用轉移類型。 當命令完成時,它會傳回已移動虛擬機的相關信息。

範例 2:以異步方式將虛擬機從連結庫移至主機

PS C:\> $VM = Get-SCVirtualMachine | Where-Object { $_.Name -Eq "VM01" -And $_.LibraryServer -Eq "LibServer01.Contoso.com" }
PS C:\> $VMHost = Get-SCVMHost -ComputerName "VMHost02.Contoso.com"
PS C:\> Move-SCVirtualMachine -VMHost $VMHost -VM $VM -Path "D:\VirtualMachinePath" -RunAsynchronously -JobVariable "MoveVMJob"
PS C:\> $MoveVMJob

此範例中的前兩個命令與第一個範例中的命令相同,但虛擬機主機的名稱除外。

第三個命令會將虛擬機從其目前位置移至 VMHost02 上的 D:\VirtualMachinePath。 命令會指定 RunAsynchronously 參數,以立即將控制權傳回命令殼層。 命令會指定 JobVariable 參數來追蹤作業的進度。 此命令會將作業進度的記錄儲存在$MoveVMJob變數中。 針對 JobVariable 參數,您不會指定貨幣符號 ($) 來建立變數。

最後一個命令會顯示$MoveVMJob的內容,其中包含移動作業的描述、其狀態、進度和其他資訊。

範例 3:強制 LAN 傳輸,將虛擬機從連結庫移至主機

PS C:\> $VM = Get-SCVirtualMachine | Where-Object { $_.Name -Eq "VM03" -And $_.LibraryServer -Eq "LibServer01.Contoso.com" }
PS C:\> $VMHost = Get-SCVMHost -ComputerName "VMHost03.Contoso.com"
PS C:\> Move-SCVirtualMachine -VMHost $VMHost -VM $VM -Path "D:\VirtualMachinePath" -UseLAN

第一個命令會取得連結庫伺服器 LibServer01 上名為 VM03 的虛擬機物件,然後將該物件儲存在 $VM 變數中。

第二個命令會取得名為 VMHost03 的主機對象,然後將該物件儲存在$VMHost變數中。

最後一個命令會將虛擬機 VM03 從連結庫中的目前位置移至 VMHost03 上的 D:\VirtualMachinePath。 此命令會指定 UseLAN 參數,以指定傳輸使用網路傳輸,即使有更快速的傳輸機制也一樣。

範例 4:使用 VMware VMotion 在主機之間移動虛擬機

PS C:\> $VM = Get-SCVirtualMachine -Name "VM04" | Where-Object {$_.VMHost.Name -Eq "ESXHost01"}
PS C:\> $VMHost = Get-SCVMHost | Where-Object {$_.Name -Eq "ESXHost02"}
PS C:\> Move-SCVirtualMachine -VM $VM -VMHost $VMHost -Path "[Storage2]"

第一個命令會在 ESXHost01 上取得名為 VM04 的虛擬機物件,然後將該物件儲存在$VM變數中。

第二個命令會取得名為ESXHost02的ESX主機對象,然後將該物件儲存在$VMHost變數中。

最後一個命令會使用 VMware VMotion,將虛擬機從目前的 ESX 主機移至其他 ESX 主機。

注意: Move-SCVirtualMachine Cmdlet 可以使用 VMware VMotion 功能,將虛擬機從一部 ESX 主機移至另一部主機,只有在兩部 ESX 伺服器都位於 vCenter Server 上的相同 Datacenter 容器時。

範例 5:使用 Hyper-V 實時移轉,在主機叢集中的節點之間移動高可用性虛擬機

PS C:\> $VM = Get-SCVirtualMachine -Name "HAVM05" | Where-Object {$_.VMHost.Name -Eq "VMHVHostNode05A.Contoso.com"}
PS C:\> $VMHost = Get-SCVMHost | Where-Object {$_.Name -Eq "VMHVHostNode05B.Contoso.com"}
PS C:\> Move-SCVirtualMachine -VM $VM -VMHost $VMHost -Path "D:\VMs\"

第一個命令會取得 VMHVHostNode05A 上名為 HAVM05 的虛擬機物件,然後將該物件儲存在$VM變數中。 在此範例中,HAVM05 是高可用性虛擬機。 VMHVHostNode05A 和 VMHVHostNode05B 是 Hyper-V 主機叢集中的節點。

第二個命令會取得名為 VMHVHostNode05B 的主機對象,然後將該物件儲存在$VMHost變數中。

最後一個命令會使用即時移轉,將虛擬機從 VMHVHostNode05A 移至 VMHVHostNode05B。

範例 6:將 Hyper-V 主機上的執行中虛擬機移至相同主機上的新位置

PS C:\> $MoveVhdPath = "E:\VHDs"
PS C:\> $VM = Get-SCVirtualMachine "VM06"
PS C:\> $VMHost = Get-SCVMHost "VMHost06"
PS C:\> $HostPath = "E:\VirtualMachinePath"
PS C:\> $JobGroupID = [System.Guid]::NewGuid().ToString()
PS C:\> Move-SCVirtualHardDisk -IDE -Bus 1 -Lun 1 -Path $MoveVhdPath -JobGroup $JobGroupID
PS C:\> Move-SCVirtualMachine -VM $VM -VMHost $VMHost -Path $HostPath -JobGroup $JobGroupID

第一個命令會將字串 E:\VHD 儲存在 $MoveVhdPath。 這是行動虛擬機器虛擬硬碟的路徑。

第二個命令會取得名為 VM06 的虛擬機對象,然後將該物件儲存$VM變數。

第三個命令會取得名為 VMHost06 的主機對象,然後將該物件儲存在$VMHost變數中。 在此範例中,VMHost06 是 Hyper-V 主機。

第四個命令會將字串 E:\VirtualMachinePath 儲存在 $HostPath 變數中。 這是要移動 VM06 的路徑。

第五個命令會建立新的 GUID 字串,並將它儲存在$JobGroupID變數中。 這個 GUID 是工作群組識別碼 (功能為識別元),可將包含此識別元的後續命令群組至單一工作群組。

第六個命令會設定儲存在 $MoveVhdPath 中之值的虛擬硬碟路徑,並將虛擬硬碟連接到虛擬機上虛擬 IDE 控制器上的總線 1 和 LUN 1。 此命令會指定 JobGroup 參數,以便在 Move-SCVirtualMachine 觸發作業群組清單中任何命令的執行之前,它不會實際執行。

最後一個命令會將 VM06 移至相同主機上的 E:\VirtualMachinePath。 Cmdlet 會以$JobGroupID的一部分執行 Move-SCVirtualHardDisk。 此命令會將虛擬機的虛擬硬碟移至 E:\VHD。

參數

-BlockLiveMigrationIfHostBusy

表示如果移轉失敗,Cmdlet 會封鎖重試 Hyper-V 實時移轉,因為來源主機或目的地主機已經參與另一個即時移轉。

Type:SwitchParameter
Aliases:BlockLMIfHostBusy
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DiscardSavedState

指出此 Cmdlet 會刪除與虛擬機或服務相關聯的已儲存狀態。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HighlyAvailable

指定是否要將虛擬機放在屬於主機叢集的 Hyper-V 主機上。

Type:Boolean
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-JobGroup

指定一系列命令的標識碼,這些命令會在包含相同作業群組標識符的執行的最後一個命令之前,以集合的形式執行。

Type:Guid
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-JobVariable

指定作業進度的變數名稱。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OnBehalfOfUser

指定使用者名稱。 此 Cmdlet 代表此參數指定的用戶運作。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OnBehalfOfUserRole

指定使用者角色。 若要取得使用者角色,請使用 Get-SCUserRole Cmdlet。 此 Cmdlet 代表此參數所指定的使用者角色運作。

Type:UserRole
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

指定已移動虛擬機的路徑。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PROTipID

指定觸發此動作之 PRO 提示 (PRO 提示的標識碼) 。 此參數可讓您稽核 PRO 秘訣。

Type:Guid
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ReplicationGroup

指定複寫群組。

Type:ReplicationGroup
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAsynchronously

表示作業會以異步方式執行,讓控件立即返回命令殼層。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-StartVMOnTarget

指定一旦此 Cmdlet 將虛擬機移至其目的地主機時,就會啟動虛擬機。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseCluster

指出此 Cmdlet 會使用叢集移轉,將處於已儲存狀態的虛擬機傳輸到主機,即使叢集支援 Hyper-V 實時移轉也一樣。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseDiffDiskOptimization

表示 Cmdlet 使用差異磁碟優化。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseLAN

指出即使有更快速的傳輸機制可供使用,此 Cmdlet 仍會透過 LAN 使用傳輸。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VM

指定虛擬機器物件。

Type:VM
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VMHost

指定虛擬機器主機物件。 VMM 支援 Hyper-V 主機、VMware ESX 主機和 Citrix XenServer 主機。

如需每種主機類型的詳細資訊,請參閱 Add-SCVMHost Cmdlet。

Type:Host
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

輸出

VirtualMachine

此 Cmdlet 會傳回 VirtualMachine 物件。