Condividi tramite


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 .