Move-SCVirtualMachine
Sposta una macchina virtuale archiviata nella libreria VMM o distribuita in un host in una nuova posizione in un host.
Sintassi
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>]
Descrizione
Il cmdlet Move-SCVirtualMachine sposta una macchina virtuale archiviata nella libreria VMM (Virtual Machine Manager) o distribuita in un host in una nuova posizione in un host in un host.
In System Center 2019 è possibile sfruttare nuove funzionalità di migrazione incluse in Windows Server 2016. Queste funzionalità includono la migrazione in tempo reale delle macchine virtuali tra due computer autonomi e la migrazione in tempo reale tra computer autonomi e un nodo del cluster. Sono inoltre supportate più migrazioni live simultanee. Per altre informazioni su come eseguire la migrazione di macchine virtuali in System Center 2019, vedere Migrazione di Macchine virtuali e archiviazione in VMMhttps://technet.microsoft.com/en-us/library/mt710321(v=sc.16).aspx (https://technet.microsoft.com/en-us/library/mt710321(v=sc.16).aspx) nella libreria TechNet.
Se si sposta una macchina virtuale distribuita in un host che esegue Windows Server 2008 R2 in un host che esegue Windows Server 2016, non è possibile spostare nuovamente la macchina virtuale in un host che esegue Windows Server 2008 R2.
VMM include funzionalità di migrazione di archiviazione che consentono di spostare uno o più dischi rigidi virtuali di una macchina virtuale in esecuzione in una posizione diversa. È possibile usare il cmdlet corrente e il cmdlet Move-SCVirtualHardDisk per spostare i file del disco rigido virtuale basato su Windows (con estensione vhd) e i file del disco rigido virtuale basato su VMware (con estensione vmdk) in un percorso in un host diverso. È anche possibile usare il cmdlet Move-SCVirtualHardDisk per spostare un file con estensione vhd o un file vmdk da una posizione a un'altra nello stesso host.
Per spostare una macchina virtuale da un host e archiviarla nella libreria, è necessario usare il cmdlet Save-SCVirtualMachine.
VMM può usare uno dei metodi di trasferimento seguenti, elencati nell'ordine in cui VMM tenta di usarli:
- Migrazione live hyper-V. Se una macchina virtuale è in esecuzione e viene distribuita in un host Hyper-V che è un nodo di un cluster Windows Server 2008 R2 o Windows Server 2016 host, per impostazione predefinita, VMM usa la migrazione live Hyper-V per spostare la macchina virtuale in un altro nodo nel cluster senza interruzioni del servizio. Lo spostamento di una macchina virtuale in esecuzione non la disconnette dalla rete. La macchina virtuale mantiene l'attributo di disponibilità elevata. Non è necessario specificare un percorso. È possibile avviare la migrazione in tempo reale di più macchine virtuali contemporaneamente.
- Migrazione del cluster di Windows Server 2008. System Center continua a supportare la migrazione del cluster Windows 2008, a volte denominata Migrazione rapida. La migrazione del cluster sposta una macchina virtuale in esecuzione in un nodo Hyper-V di un cluster host. Consente inoltre di spostare una macchina virtuale in uno stato arrestato o salvato e che viene distribuita in un altro nodo nel cluster. È possibile usare Migrazione cluster per spostare una macchina virtuale in uno stato arrestato o salvato se la macchina virtuale viene distribuita in uno dei nodi seguenti:
---- Nodo A in un cluster Windows Server 2008 ----A in un cluster Windows Server 2008 R2
Non è necessario specificare un percorso. La migrazione del cluster di Windows Server 2008 inserisce la macchina virtuale in uno stato salvato durante la migrazione. Questa operazione causa una perdita temporanea del servizio a qualsiasi utente di tale macchina virtuale.
- Migrazione live VMware. Se una macchina virtuale distribuita in un host VMware ESX usa l'archiviazione condivisa, VMM può usare la funzionalità di migrazione live VMware per spostare la macchina virtuale in un nuovo host. Questa funzionalità è denominata VMware VMotion. Non è necessario specificare un percorso. Il cmdlet corrente può usare VMware VMotion per spostare una macchina virtuale da un host ESX a un altro solo se entrambi gli host ESX si trovano nello stesso contenitore Datacenter nel server vCenter.
- Citrix XenServer XenMotion. Se una macchina virtuale distribuita in un host Citrix XenServer usa l'archiviazione condivisa e fa parte dello stesso pool di risorse, VMM può usare la funzionalità di migrazione live XenServer per spostare la macchina virtuale in un host XenServer diverso. La funzionalità di migrazione in tempo reale è denominata Citrix XenMotion.
- Migrazione SAN (Fibre Channel, iSCSI o NPIV). Se la macchina virtuale si trova in un host connesso a una san e la macchina virtuale si trova in un LUN SAN, VMM può spostare tale macchina virtuale in un altro host se tale host ha accesso alla stessa SAN. In un trasferimento SAN, i LUN di destinazione vengono reindirizzati dall'host di origine all'host di destinazione. Questa migrazione non sposta i file. Un trasferimento SAN è molto più veloce rispetto allo spostamento dei file di macchine virtuali da un host a un altro su una rete locale (LAN). VMM supporta la migrazione SAN delle macchine virtuali in e all'esterno di un cluster. È necessario specificare un percorso. Se è disponibile una scheda bus host (HBA) con supporto NPIV, VMM può utilizzare il trasferimento tramite SAN NPIV.
- Migrazione di rete. Se non è disponibile un metodo più veloce, VMM usa un trasferimento di rete per spostare i file di macchina virtuale da un host a un altro sulla LAN che connette i due host. È possibile decidere di usare questo tipo di trasferimento anche se il tipo di trasferimento SAN è disponibile. È necessario specificare un percorso.
Quando sono disponibili più tipi di trasferimento, questo cmdlet usa automaticamente il tipo di trasferimento più veloce disponibile per spostare una macchina virtuale. Se un metodo non è appropriato o disponibile per la macchina virtuale da spostare, VMM tenta di usare il metodo successivo nell'elenco. Se si vuole forzare l'uso di un trasferimento di rete, specificare il parametro UseLAN .
Esempio
Esempio 1: Spostare una macchina virtuale dalla libreria a un host
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"
Il primo comando ottiene l'oggetto macchina virtuale denominato VM01 e quindi archivia tale oggetto nella variabile $VM. In questo esempio, la macchina virtuale archiviata nella libreria VMM nel server di libreria denominato LibServer01. In questo esempio si presuppone che solo una macchina virtuale denominata VM01 sia attualmente archiviata in LibServer01.
Il secondo comando ottiene l'oggetto host denominato VMHost01 e quindi archivia tale oggetto nella variabile $VMHost.
L'ultimo comando sposta la macchina virtuale dalla posizione corrente nella libreria al percorso D:\VirtualMachinePath nell'host archiviato in $VMHost. Per l'esecuzione del comando viene utilizzato automaticamente il tipo di trasferimento più veloce disponibile. Al termine del comando, restituisce informazioni sulla macchina virtuale spostata.
Esempio 2: Spostare una macchina virtuale dalla libreria a un host in modo asincrono
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
I primi due comandi in questo esempio sono identici ai comandi del primo esempio, ad eccezione del nome dell'host della macchina virtuale.
Il terzo comando sposta la macchina virtuale dalla posizione corrente a D:\VirtualMachinePath in VMHost02. Il comando specifica immediatamente il parametro RunAsynchronously per restituire il controllo alla shell dei comandi. Il comando specifica il parametro JobVariable per tenere traccia dello stato di avanzamento del processo. Il comando archivia un record dello stato di avanzamento del processo nella variabile $MoveVMJob. Per il parametro JobVariable , non si specifica il segno di dollaro ($) per creare la variabile.
L'ultimo comando visualizza il contenuto di $MoveVMJob, che include una descrizione del processo di spostamento, lo stato, lo stato, lo stato e altre informazioni.
Esempio 3: Spostare una macchina virtuale dalla libreria a un host forzando un trasferimento 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
Il primo comando ottiene l'oggetto macchina virtuale denominato VM03 nel server di libreria LibServer01 e quindi archivia tale oggetto nella variabile $VM.
Il secondo comando ottiene l'oggetto host denominato VMHost03 e quindi archivia tale oggetto nella variabile $VMHost.
L'ultimo comando sposta la macchina virtuale VM03 dalla posizione corrente nella libreria a D:\VirtualMachinePath in VMHost03. Il comando specifica il parametro UseLAN per specificare che il trasferimento usa un trasferimento di rete, anche se sono disponibili meccanismi di trasferimento più veloci.
Esempio 4: Spostare una macchina virtuale tra host usando 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]"
Il primo comando ottiene l'oggetto macchina virtuale denominato VM04 in ESXHost01 e quindi archivia tale oggetto nella variabile $VM.
Il secondo comando ottiene l'oggetto host ESX denominato ESXHost02 e quindi archivia tale oggetto nella variabile $VMHost.
Il comando finale usa VMware VMotion per spostare la macchina virtuale dall'host ESX corrente all'altro host ESX.
NOTA: il cmdlet Move-SCVirtualMachine può usare la funzionalità VMware VMotion per spostare una macchina virtuale da un host ESX a un altro solo se entrambi i server ESX si trovano nello stesso contenitore Datacenter nel server vCenter.
Esempio 5: Spostare una macchina virtuale a disponibilità elevata tra nodi in un cluster host usando la migrazione live 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\"
Il primo comando ottiene l'oggetto macchina virtuale denominato HAVM05 in VMHVHostNode05A e quindi archivia tale oggetto nella variabile $VM. In questo esempio HAVM05 è una macchina virtuale a disponibilità elevata. VMHVHostNode05A e VMHVHostNode05B sono nodi in un cluster host Hyper-V.
Il secondo comando ottiene l'oggetto host denominato VMHVHostNode05B e quindi archivia tale oggetto nella variabile $VMHost.
Il comando finale usa la migrazione in tempo reale per spostare la macchina virtuale da VMHVHostNode05A a VMHVHostNode05B.
Esempio 6: Spostare una macchina virtuale in esecuzione in un host Hyper-V in una nuova posizione nello stesso host
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
Il primo comando archivia la stringa E:\VHDs in $MoveVhdPath. Si tratta del percorso di cui spostare il disco rigido virtuale della macchina virtuale.
Il secondo comando ottiene l'oggetto macchina virtuale denominato VM06 e quindi archivia tale oggetto la variabile $VM.
Il terzo comando ottiene l'oggetto host denominato VMHost06 e quindi archivia tale oggetto nella variabile $VMHost. In questo esempio VMHost06 è un host Hyper-V.
Il quarto comando archivia la stringa E:\VirtualMachinePath nella variabile $HostPath. Si tratta del percorso di cui spostare VM06.
Il quinto comando crea una nuova stringa GUID e la archivia nella variabile $JobGroupID. Questo GUID è un ID del gruppo di processi utilizzato come identificatore per raggruppare i comandi successivi in cui è incluso in un unico gruppo di processi.
Il sesto comando imposta il percorso del disco rigido virtuale del valore archiviato in $MoveVhdPath e connette il disco rigido virtuale al bus 1 e lun 1 nel controller IDE virtuale nella macchina virtuale. Questo comando specifica il parametro JobGroup in modo che non venga effettivamente eseguito finché Move-SCVirtualMachine attiva l'esecuzione di tutti i comandi nell'elenco dei gruppi di processi.
L'ultimo comando sposta VM06 in E:\VirtualMachinePath nello stesso host. Il cmdlet esegue Move-SCVirtualHardDisk come parte di $JobGroupID. Il comando sposta il disco rigido virtuale della macchina virtuale in E:\VHD.
Parametri
-BlockLiveMigrationIfHostBusy
Indica che il cmdlet blocca la ripetizione di una migrazione in tempo reale hyper-V se la migrazione non è riuscita perché l'host di origine o l'host di destinazione partecipa già a un'altra migrazione in tempo reale.
Type: | SwitchParameter |
Aliases: | BlockLMIfHostBusy |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DiscardSavedState
Indica che questo cmdlet elimina lo stato salvato associato a una macchina virtuale o a un servizio.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HighlyAvailable
Specifica se inserire una macchina virtuale in un host Hyper-V che fa parte di un cluster host.
Type: | Boolean |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-JobGroup
Specifica un identificatore per una serie di comandi eseguiti come set subito prima dell'esecuzione del comando finale che include lo stesso identificatore del gruppo di processi.
Type: | Guid |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-JobVariable
Specifica il nome di una variabile per lo stato del processo.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OnBehalfOfUser
Specifica un nome utente. Questo cmdlet opera per conto dell'utente specificato da questo parametro.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OnBehalfOfUserRole
Specifica un ruolo utente. Per ottenere un ruolo utente, usare il cmdlet Get-SCUserRole . Questo cmdlet opera per conto del ruolo utente specificato da questo parametro.
Type: | UserRole |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Specifica il percorso della macchina virtuale spostata.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PROTipID
Specifica l'ID della descrizione per le prestazioni e l'ottimizzazione delle risorse (suggerimento PRO) che ha attivato questa azione. Questo parametro consente di controllare i suggerimenti pro.
Type: | Guid |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ReplicationGroup
Specifica un gruppo di replica.
Type: | ReplicationGroup |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAsynchronously
Indica che il processo viene eseguito in modo asincrono in modo che il controllo torni immediatamente alla shell dei comandi.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-StartVMOnTarget
Specifica che una macchina virtuale viene avviata non appena il cmdlet lo sposta nell'host di destinazione.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseCluster
Indica che questo cmdlet usa Migrazione cluster per il trasferimento di una macchina virtuale in uno stato salvato in un host, anche se il cluster supporta la migrazione in tempo reale di Hyper-V.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseDiffDiskOptimization
Indica che il cmdlet usa l'ottimizzazione del disco differenze.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseLAN
Indica che questo cmdlet usa il trasferimento tramite LAN anche se è disponibile un meccanismo di trasferimento più rapido.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-VM
Specifica un oggetto macchina virtuale.
Type: | VM |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-VMHost
Specifica un oggetto host di macchina virtuale. VMM supporta host Hyper-V, host VMware ESX e host Citrix XenServer.
Per altre informazioni su ogni tipo di host, vedere il cmdlet Add-SCVMHost .
Type: | Host |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Output
VirtualMachine
Questo cmdlet restituisce un oggetto VirtualMachine .
Collegamenti correlati
- 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