12
Nov
Importer et exporter les dossiers de machines virtuelles avec PowerShell
Si comme nous vous êtes dans une phase de migration de votre infrastructure VMware, vous pouvez avoir besoin d’un script d’Export et D’import de vos vms Folder.
En effectuant quelques recherches sur le Net, nous avions lu les scripts de LucD (Lien 1 , Lien 2), mais hier je suis tombé par hasard sur un script de LucD modifié par Mathieu du blog www.virtualease.fr
Dans son Export, il extrait les données d’un Datacenter au format CSV, avec la liste des Vms et leur folder (Avec le chemin en entier).
1 2 3 4 5 6 7 |
. "Name";"BlueFolderPath" "MAVM-CENTOS";"/PROD_VM/UNIX/AUTRE" "MAVM-RH7";"/PROD_VM/UNIX/REDHAT"" "MAVM-WK2012";"/PROD_VM/WINDOWS/W2K12" "MAVM-WK2012";"/PROD_VM/WINDOWS/W2K8" . |
Puis l’Import reprends ce fichier pour créer les folder nécessaire et il y déplace les Vms.
Script d’Export des Vm Folder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
. write-host -nonewline "Datacenter Name : " $dcName = read-host New-VIProperty -Name 'BlueFolderPath' -ObjectType 'VirtualMachine' -Value { param($vm) function Get-ParentName{ param($object) if($object.Folder){ $blue = Get-ParentName $object.Folder $name = $object.Folder.Name } elseif($object.Parent -and $object.Parent.GetType().Name -like "Folder*"){ $blue = Get-ParentName $object.Parent $name = $object.Parent.Name } elseif($object.ParentFolder){ $blue = Get-ParentName $object.ParentFolder $name = $object.ParentFolder.Name } if("vm","Datacenters" -notcontains $name){ $blue + "/" + $name } else{ $blue } } (Get-ParentName $vm).Remove(0,1) } -Force | Out-Null Get-VM -Location (Get-Datacenter -Name $dcName) | Select Name,BlueFolderPath | Export-Csv "C:\vCenter_VM_Folders.csv" -NoTypeInformation -UseCulture Source : https://www.virtualease.fr/vmware-powercli-export-import-vm-folders-vcenter/ |
Script d’Import des Vm Folder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
. write-host -nonewline "New Datacenter Name : " $newDatacenter = read-host $startFolder = Get-Folder -Name vm -Location (Get-Datacenter -Name $newDatacenter) Import-Csv "C:\vCenter_VM_Folders.csv" -UseCulture | %{ $location = $startFolder $_.BlueFolderPath.TrimStart('/').Split('/') | %{ $tgtFolder = Get-Folder -Name $_ -Location $location -ErrorAction SilentlyContinue if(!$tgtFolder){ $location = New-Folder -Name $_ -Location $location } else{ $location = $tgtFolder } } $vm = Get-VM -Name $_.Name -ErrorAction SilentlyContinue if($vm){ Move-VM -VM $vm -Destination $location -Confirm:$false } } Source : https://www.virtualease.fr/vmware-powercli-export-import-vm-folders-vcenter/ |