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 2019 中移轉虛擬機器的詳細資訊,請參閱 TechNet Library 中的移轉虛擬機器和儲存體 https://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 叢集中的 A 節點
您不需要指定路徑。 Windows Server 2008 叢集移轉會將虛擬機器置於移轉期間處於儲存狀態。 這項作業會對該虛擬機器的任何使用者暫時遺失服務。
- VMware 即時移轉。 如果部署在 VMware ESX 主機上的虛擬機器使用共用存放裝置,VMM 可以使用 VMware 即時移轉功能將虛擬機器移至新的主機。 這項功能稱為 VMware VMotion。 您不需要指定路徑。 目前的 Cmdlet 可以使用 VMware VMotion 將虛擬機器從一個 ESX 主機移至另一部,只有當這兩個 ESX 主機都位於 vCenter Server 上的相同 Datacenter 容器時。
- 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 秘訣。
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
指出即使叢集支援 Hyper-V 即時移轉,此 Cmdlet 仍會使用叢集移轉,將處於儲存狀態的虛擬機器傳輸至主機。
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 物件。
相關連結
- Add-SCVMHost
- Get-SCUserRole
- Get-SCVirtualMachine
- Get-SCVMHost
- Move-SCVirtualHardDisk
- New-SCVirtualMachine
- Read-SCVirtualMachine
- Register-SCVirtualMachine
- Repair-SCVirtualMachine
- Reset-SCVirtualMachine
- Resume-SCVirtualMachine
- Save-SCVirtualMachine
- Set-SCVirtualMachine
- Start-SCVirtualMachine
- Suspend-SCVirtualMachine
- Stop-SCVirtualMachine