Vous pouvez personnaliser et utiliser l'exemple de script suivant pour exécuter des opérations sur plusieurs machines virtuelles (VM) Linux. Les opérations incluent la mise sous tension, la mise hors tension, l'arrêt, le redémarrage et la suppression des VM.
Ce script peut supprimer des machines virtuelles de vCenter Server, mais pas de View.
Pour copier et coller le contenu du script sans saut de page, utilisez la version HTML de cette rubrique, disponible sur la page de documentation d'Horizon 7 à l'adresse https://www.vmware.com/support/pubs/view_pubs.html.
Entrée du script
Ce script lit un fichier d'entrée, qui est décrit dans la section Fichier d'entrée des exemples de scripts PowerCLI pour déployer des postes de travail Linux. Ce script demande également de façon interactive les informations suivantes :
- Adresse IP de vCenter Server
- Nom de connexion de l'administrateur pour vCenter Server
- Mot de passe de l'administrateur pour vCenter Server
- Action à exécuter : il peut s'agir de la mise sous tension, la mise hors tension, l'arrêt de l'invité, le redémarrage d'une VM, le redémarrage d'un invité de VM ou la suppression d'une VM.
- Temps d'attente, en secondes, entre les opérations sur les VM.
Contenu du script
<# .DESCRIPTION The Tool supports: 1. Power off VMs 2. Power on VMs 3. Shutdown VMs 4. Restart VMs 5. Restart VM guest 6. Delete VMs from Disk .NOTES #> #--------------------- Functions -------------------- function GetInput { Param($prompt, $IsPassword = $false) $prompt = $prompt + ": " Write-Host $prompt -NoNewLine [Console]::ForegroundColor = "Blue" if ($IsPassword) { $input = Read-Host -AsSecureString $input = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($input)) } else { $input = Read-Host } [Console]::ResetColor() return $input } function IsVMExists ($VMExists) { Write-Host "Checking if the VM $VMExists Exists" [bool]$Exists = $false #Get all VMS and check if the VMs is already present in VC $listvm = Get-vm foreach ($lvm in $listvm) { if($VMExists -eq $lvm.Name ) { $Exists = $true Write-Host "$VMExists is Exist" } } return $Exists } function Delete_VM($VMToDelete) { Write-Host "Deleting VM $VMToDelete" Get-VM $VMToDelete | where { $_.PowerState –eq "PoweredOn" } | Stop-VM –confirm:$false Get-VM $VMToDelete | Remove-VM –DeleteFromDisk –confirm:$false } #------------------ Handle input --------------------- "-----------------------------------------------------" $vcAddress = GetInput -prompt "Your vCenter address" -IsPassword $false $vcAdmin = GetInput -prompt "Your vCenter admin user name" -IsPassword $false $vcPassword = GetInput -prompt "Your vCenter admin user password" -IsPassword $true "-----------------------------------------------------" $action = GetInput -prompt 'Select action: 1). Power On 2). Power Off 3) Shutdown VM Guest 4). Restart VM 5). Restart VM Guest 6). Delete VM' -IsPassword $false $sleepTime = GetInput -prompt 'Wait time (seconds) between each VM' -IsPassword $false "-----------------------------------------------------" [Console]::ForegroundColor = "Yellow" switch ($action) { 1 { "Your selection is 1). Power On" } 2 { "Your selection is 2). Power Off" } 3 { "Your selection is 3) Shutdown" } 4 { "Your selection is 4). Restart VM" } 5 { "Your selection is 5). Restart VM Guest" } 6 { "Your selection is 6). Delete VM" } default { "Invalid selection for action: $action" exit } } [Console]::ResetColor() $csvFile = '.\CloneVMs.csv' #check if file exists if (!(Test-Path $csvFile)) { write-host -ForeGroundColor Red "CSV File not found" exit } "-----------------------------------------------------" #--------------------- Main -------------------------- #Read input CSV file Disconnect-VIServer $vcAddress -Confirm:$false #Connect-VIServer $vcAddress -ErrorAction Stop -user $vcAdmin -password $vcPassword Connect-VIServer $vcAddress -user $vcAdmin -password $vcPassword $csvData = Import-CSV $csvFile foreach ($line in $csvData) { $VMName = $line.VMName switch ($action) { 1 { Get-VM $VMName | Start-VM -Confirm:$false } 2 { Get-VM $VMName | Stop-VM -Confirm:$false } 3 { Get-VM $VMName | Shutdown-VMGuest -Confirm:$false } 4 { Get-VM $VMName | Restart-VM -Confirm:$false } 5 { Get-VM $VMName | Restart-VMGuest -Confirm:$false } 6 { if (IsVMExists ($VMName)) { Delete_VM ($VMName) } } default{} } Start-Sleep -s $sleepTime } Disconnect-VIServer $vcAddress -Confirm:$false exit
Exécution du script
Les messages suivants proviennent d'une exécution du script :
PowerCLI C:\scripts> .\VMOperations.ps1 Your vCenter address: 10.117.44.17 Your vCenter admin user name: administrator Your vCenter admin user password: ******* -------------------------------------------------- Select action: 1). Power On 2). Power Off 3) Shutdown VM Guest 4). Restart VM 5). Restart VM Guest 6). Delete VM: 1 Wait time (seconds) between each VM: 20 -------------------------------------------------- Your selection is 6). Delete VM
Pour les opérations de mise sous tension, redémarrage d'une VM et redémarrage d'un invité de VM, spécifiez un temps d'attente entre les machines virtuelles d'au moins 20 secondes pour éviter les tempêtes de démarrage, qui pourraient entraîner l'échec de certaines opérations.