VMWare : Utilisation de PowerCLI

De Justine's wiki
Aller à la navigation Aller à la recherche

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 :

https://my.vmware.com/fr/group/vmware/details?downloadGroup=PCLI650R1&productId=614&download=true&fileId=1b7a5378835c6158cfb63c3d10bb9e18&secureParam=518a6bf69aa5d848cc171da1c9df2292&uuId=d098a27a-9029-465a-befb-b2300301a77e&downloadType=

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
}