Skip to main content

VMware.PowerCLI - Dialoguer avec Vsphere via Powershell

Lancer un conteneur avec Powershell : 

docker run -it mcr.microsoft.com/powershell

Installer le module VMware.PowerCLI : 

Install-Module -Name VMware.PowerCLI -Confirm:$false

Accepter les certificats SSL invalides : 

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore  -Confirm:$false

Etablir une conexion au VCENTER : 

Connect-VIServer -Server "vsphere.mon-entreprise.fr" -User "utilisateur" -Password "mot-de-passe"

Récupérer la liste des VM : 

$vm = Get-VM

Récupérer une VM précise : 

$vm = Get-VM -Name "srv-web-01"

Eteindre la VM : 

Stop-VM -VM "$vm" -Confirm:$false

Démarrer la VM :

Start-VM -VM "$vm" -Confirm:$false

Créer une snapshot :

New-Snapshot -VM "$vm" -Name "Snapshot_1" -Description "Avant MAJ OS"

Récupérer les snapshots d'une VM : 

$snapshots = Get-Snapshot -VM $vm

Récupérer une snapshots d'une VM : 

$snapshot = Get-Snapshot -VM "$vm" -Name "ma-snapshot"

Appliquer une snapshot d'une vm :

Set-VM -VM 'ma-vm' -Snapshot (Get-Snapshot -VM 'ma-vm' -Name 'ma-snapshot') -Confirm:$false

Déconnecter le disque  CD d'une vm :

$cd = Get-CDDrive -VM $vm
Set-CDDrive -CD $cd -Connected:$false

Blocs de code intéréssant :

Créer une snapshot sur toutes les vm : 

foreach ($vm in Get-VM)
{
New-Snapshot -VM "$vm" -Name "$vm-before" -Description "Before update"
}

Stop / Start toutes les vm : 

foreach ($vm in Get-VM)
{
    Stop-VM -VM "$vm" -Confirm:$false
}

foreach ($vm in Get-VM)
{
    Start-VM -VM "$vm" -Confirm:$false
}

Appliquer une snapshot à toutes les vm : 

foreach ($vm in Get-VM)
{
    Set-VM -VM "$vm" -Snapshot (Get-Snapshot -VM "$vm" -Name "$vm-fresh") -Confirm:$false
}

Détacher tous les CD des lecteurs CD virtuels de toutes les vm : 

foreach ($vm in Get-VM)
{
    $cd = Get-CDDrive -VM $vm 
    Set-CDDrive -CD $cd -Connected:$false
}

Afficher toutes les snapshots de toutes les vm : 

foreach ($vm in Get-VM)
{
    Write-Host "[$vm] :"
    $snapshots = Get-Snapshot -VM "$vm" 
    foreach ($snapshot in $snapshots)
    {
        Write-Host "$snapshot"
    }
}