VMWare : Utilisation de PowerCLI
https://www.nakivo.com/blog/basic-powercli-scripting-vmware-vsphere/
Le récupérer
Depuis le site
Il faut commencer par s'inscrire sur le site de VMware pour pouvoir DL l'éxecutable :
Ensuite, il faut l'installer. Enfin, on peut le lancer à part en cherchant directement "PowerCLI" dans Windows.
Comme module PS
La première méthode n'est pas terrible, car on ne peut ouvrir le module directement dans PowerShell. Pour cela, il faut passer par PSgallery :
Dans une console en admin :
PS C:\WINDOWS\system32> find-module -Name VMWare.PowerCLI Version Name Repository Description ------- ---- ---------- ----------- 11.3.0.... VMware.PowerCLI PSGallery This Windows PowerShell module contains VMware.P... PS C:\WINDOWS\system32> Install-Module -Name VMWare.PowerCLI
Lors de l'installation, on pourrait rajouter -Scope CurrentUser, ce qui permettrait de ne l'installer que pour soi et donc de ne pas avoir besoin de passer en admin à chaque fois (mais dans mon cas, je ne peux installer quoi que ce soit sans passer en admin...).
Le téléchargement doit se lancer. Si PowerCLI avait déjà été installé par la première méthode, le désinstaller.
L'utiliser
Pour L'ouvrir, c'est simple :
PS C:\WINDOWS\system32> Import-Module VMWare.PowerCLI Welcome to VMware PowerCLI! Log in to a vCenter Server or ESX host: Connect-VIServer To find out what commands are available, type: Get-VICommand To show searchable help for all PowerCLI commands: Get-PowerCLIHelp Once you've connected, display all virtual machines: Get-VM If you need more help, visit the PowerCLI community: Get-PowerCLICommunity Copyright (C) VMware, Inc. All rights reserved.
Ensuite, je ne vais pas passer toutes les commandes en revue, mais :
Connection
- connect-viserver –server 〈yourserver〉
Opérations sur les VMs
- Get-VM - The get-vm commandlet lists VMs running on the connected host
- Get-VM | fl
- Get-VM | where-object {$_.PowerState –eq “PoweredOff”}
- Get-VM | where-object {$_.PowerState –eq “PoweredOff”} | Start-VM
- Get-VM 〈yourvm〉 | Stop-VMguest
- Get-VM | where-object {$_.NumCpu –gt 1 }
Exemple de script
#Ce script a pour but d'éteindre et d'allumer des VMs automatiquement #Nécessite le module PowerCLI pour vmware #A faire avant de lancer le script : Remplir les variables utilisateur #Justine PELLETREAU #Variables utilisateur $vms = @("sherpa", "trucmuche") #Vms sur lesquelles on agira $time_off = "16/07/2019 16:22" #Heure et date d'extinction #Basé et comparable à Get-date -format g #Sur mon PS français : "jj/mm/aaaa hh:mm" $time_on = "16/07/2019 16:22" #Heure et date d'allumage #Pour se logger $uservcenter = "jeanpaulbelmondo" #login vcenter $passwordvcenter = "chaussette" #mdp vcenter <# if ($aaa -eq $(get-date -format g)){write-host "youpi"} #> #####Nouvelle session sur le VCenter Import-Module VMWare.PowerCLI #Import du module #En cas de certificat autosigné / spécial..., on peut avoir des problemes. Pour éviter l'avertissement à la connexion sur cette session: Set-PowerCLIConfiguration -InvalidCertificateAction ignore -Scope session -Confirm:$false #On se connecte Connect-VIServer -Server monvcenter.mondomaine.io -User $uservcenter -Password $passwordvcenter:) #Connection, METTRE LE BON MDP ############################!!! FONCTIONS !!!############################################### #EXTINCTION ! DANGER! function extinction{ #Fonction d'extinction d'une VM. On commence par vérifier qu'elle est allumée, puis on l'éteint. #Argument : vm : le nom de la vm tel que dans le vcenter ("spweb1", "ad5auth"...) param($vm) #VMs allumées, on commence par vérifier que la notre l'est vms_on = $(Get-VM | where-object {$_.PowerState -eq "PoweredOn"}) foreach($machine in $vms_on){ if ($machine.name -eq $vm){ #Ici, je commence par arrêter l'OS de la VM, puis 45 secondes après, l'"enveloppe" Stop-VMGuest -Guest $machine -Confirm:$false Start-Sleep -Seconds 45 Stop-VM -VM $machine -Confirm:$false } } } #Allumage function allumage{ #Cette fois, on essaye de rallumer quel que soit l'état des choses. #Argument : vm : le nom de la vm tel que dans le vcenter ("spweb1", "ad5auth"...) param($vm) Start-VM -VM $vm -Confirm:$false } ##########################!!! MAIN !!!########################## $maintenant = $(Get-Date -format g) #On attend le bon moment pour éteindre Do{$maintenant = $(Get-Date -format g); Start-Sleep -Seconds 30} Until($maintenant -ne $time_off) #Le moment est venu... on éteint foreach($machine in $vms){ extinction $machine } #On va attendre pour rallumer... Do{$maintenant = $(Get-Date -format g); Start-Sleep -Seconds 30} Until($maintenant -ne $time_on) #Le moment est venu de rallumer foreach($machine in $vms){ allumage $machine }