Export de VM
< Technique | Scripts | PowerCLI
Sauter à la navigation
Sauter à la recherche
Révision datée du 1 décembre 2021 à 17:41 par Jordan (discussion | contributions) (Page créée avec « ==Présentation== Cette page a pour objet de décrire le script <code>vmware_export_VM.ps1</code>. ==Script== <syntaxhighlight lang="PowerShell"> #!/usr/bin/pwsh <# .SYN… »)
Présentation
Cette page a pour objet de décrire le script vmware_export_VM.ps1
.
Script
#!/usr/bin/pwsh
<#
.SYNOPSIS
Script pour exporter une VM depuis le vCenter
.DESCRIPTION
Au préalable, enregistrer les credentials en lançant le script create_credentials.ps1
.PARAMETER VmName
Le nom de la VM à exporter. (obligatoire)
.PARAMETER VmExportedName
Le nom de la VM une fois exportée. (facultatif)
Valeur par défaut : $VmName
.PARAMETER ExportDir
Le dossier local dans lequel la VM sera exportée. (facultatif)
Valeur par défaut : /data/export_vms
.PARAMETER DeleteLocal
Confirmation de la suppression de la VM locale lors de l'export. (faculatif)
Valeur possible : No ou Yes
Valeur par défaut : No
Si Yes, la VM locale, si elle existe, est supprimée afin de pouvoir réaliser l'export.
Si No, et que la VM locale n'existe pas, l'export se réalise.
Si No, et que la VM locale existe, le script se terminera immédiatement sans réaliser l'export.
.EXAMPLE
./vmware_export_VM.ps1 vm_test vm_template -DeleteLocal Yes
./vmware_export_VM.ps1 vm_test vm_template -ExportDir /data/export_vms
.NOTES
Codes erreur :
0 Tout s'est bien passé
1 La VM à exporter n'existe pas
2 La VM à exporter existe plus d'une fois
Author: LE NUFF Jordan
Date: Jan 11, 2021
#>
## Définition des paramètres d'entrée
Param
(
[Parameter(Mandatory=$true, Position=0, HelpMessage="Nom de la VM à exporter")]
[string]$VmName,
[Parameter(Mandatory=$false, Position=1, HelpMessage="Nom de la VM une fois exportée")]
[string]$VmExportedName=$VmName,
[Parameter(Mandatory=$false, HelpMessage="Dossier d'export de la VM")]
[string]$ExportDir="/data/export_vms",
[Parameter(Mandatory=$false, HelpMessage="Confirmation de la suppression de la VM locale : No ou Yes")]
[ValidateSet('No','Yes')]
[string]$DeleteLocal='No'
)
## Initialisation variables
# Dossier des identifiants
$CredsFileLocation="/data/scripts/.credentials"
# Adresse IP du vCenter
$UrlVcenter="myvcenter.mydomain.com"
# Identifiant VMware à utiliser
$VmwareUser="myuser@mydomain.com"
# Construction du fichier d'identifiants à utiliser
$VcFileCreds=$($CredsFileLocation + "/" + $UrlVcenter + "_" + $VmwareUser + "_ps.xml")
# Importation des credentials
$VcCreds=Import-Clixml -Path $VcFileCreds
## Connection au VCenter
Connect-VIServer -Server $UrlVcenter -Credential $VcCreds | Out-Null
## Vérifications
# La VM source existe-t-elle ? Si non, fin du script
$vm=Get-VM -name $VmName -ErrorAction SilentlyContinue
If (!$vm){
Write-Host "La VM $VmName n'existe pas. Fin du script."
exit 1
} ElseIf ($vm.Count -gt 1) {
Write-Host "La VM $VmName fournie existe plus d'une fois. VM à exporter ambigüe. Fin du script."
exit 2
}
# Supprimer les snapshots de la VM
Get-Snapshot $VmName | Remove-Snapshot -confirm:$false
# Extinction de la VM si pas éteinte
If ( $vm.PowerState -ne 'PoweredOff' )
{
$vm = Get-VM $VmName
$statusGuest = $vm.ExtensionData.Guest.GuestState
$boottime = $vm.ExtensionData.Runtime.BootTime
If ($statusGuest -ne 'running' ) {
do {
Start-Sleep -s 2
$vm = Get-VM $VmName
$statusGuest = $vm.ExtensionData.Guest.GuestState
$boottime = $vm.ExtensionData.Runtime.BootTime
} until ($statusGuest -eq "running")
}
Shutdown-VMGuest -VM $vm -confirm:$false | Out-Null
do {
Start-Sleep -s 2
$vm = Get-VM $VmName
$status = $vm.PowerState
$statusGuest = $vm.ExtensionData.Guest.GuestState
$boottime = $vm.ExtensionData.Runtime.BootTime
} until ($status -eq "PoweredOff")
}
# Suppression d'un éventuel ISO présent dans le lecteur CD
$cd = Get-VM -Name $VmName | Get-CDDrive
Set-CDDrive -CD $cd -NoMedia -confirm:$false
# Export de la VM au format OVF (par défaut) ou Ova
If ($DeleteLocal -eq 'No'){
$task = Export-VApp -VM $VmName -Name $VmExportedName -Destination $ExportDir -RunAsync
} ElseIf ($DeleteLocal -eq 'Yes') {
$task = Export-VApp -VM $VmName -Name $VmExportedName -Destination $ExportDir -Force -RunAsync
}
Wait-Task -Task $task
# Démarrage de la VM
$task = Start-VM -VM $VmName -confirm:$false -RunAsync
Wait-Task -Task $task
Disconnect-VIServer -Confirm:$false
exit 0