Lister les Machines Virtuelles comportant des snapshots

Pourquoi ?

Mais Xavier ! Qu’elle est l’intérêt de faire un script qui liste les VM ayant des snapshots, sachant qu’il existe des outils comme RVTOOLS ou des solutions « packagés » comme VeeamONE ?!!!
Réponse :
– Ca coute rien (ou juste du temps)
– On peut planifier le script pour avoir un rapport Hebdo (contrairement à RVTOOL)
– Le PowerShell c’est bien

Pré requis :

Le Script :

#Variables
$vcenter = "LE FQDN DU VCENTER"
#le credfile correspond au fichier XML généré lors du précédent tuto (voir prérequis)
$credfile = ".\credfile.xml"
$creds = Get-VICredentialStoreItem -file $credfile
$smtp = "adresse du SMTP"
$to = "adresse du destinataire"
$from = "vcenter@votredomain.fr"
$subject = "Rapport Hebdo : Liste des serveurs avec snapshots"
$file = ".\snapshot.htm"
$date = Get-Date

#Chargement du module VMWARE
Add-PSSnapin VMware.VimAutomation.Core

#Connexion au vcenter
$creds = Get-VICredentialStoreItem -file $credfile
Connect-VIServer -Server $vcenter -User $creds.User -Password $creds.Password
#Lister les VM et les snapshots
Get-VM | Where-Object { $_.Name -notlike '*.repl*' -and $_.Name -notlike '*_replica*'} | get-snapshot | sort SizeMB | Format-Table vm,name,SizeMB,created | Out-File -FilePath $file
If ((Get-Content $file) -eq $Null) {
@("Rapport Hebdo des snapshot en cours (hors replica)" , "`r`nAucun Snapshot trouve" +  (Get-Content "$file") | Set-Content "$file")
}
else
{
@("Rapport Hebdo des snapshot en cours (hors replica)" , "`r`nCi dessous la liste :" +  (Get-Content "$file") | Set-Content "$file")
}
Add-Content -Path $file -Value "`r` Rapport fait le $date `r`Copyright : Xavier BIANCHI"
$body = Get-Content $file | Out-String
Send-MailMessage -SmtpServer $smtp -To $to -From $from -Subject $subject -attachment $file -Body $body -Priority high

Explication du script :

1) Le script se connecte au Vcenter via le fichier credential précédemment généré.
$creds = Get-VICredentialStoreItem -file $credfile
Connect-VIServer -Server $vcenter -User $creds.User -Password $creds.Password
2) Il va lister les VM qui ne comporte pas le sufixe « _repl » « _replica » via cette chaîne :
Get-VM | Where-Object { $_.Name -notlike '*.repl*' -and $_.Name -notlike '*_replica*'}
3) Puis via un pipe, le script va lister les snapshots présent sur cette liste de VM
get-snapshot | sort SizeMB | Format-Table vm,name,SizeMB,created | 
4) Sortie vers un fichier htm :
Out-File -FilePath $file
5) Le fichier de sortie est ensuite analyser afin de voir si il est vide. Si il est vide (donc pas de snapshots), il va écrire dans ce même fichier qu’il n’y a pas de snapshot :
If ((Get-Content $file) -eq $Null) {
@("Rapport Hebdo des snapshot en cours (hors replica)" , "`r`nAucun Snapshot trouve" +  (Get-Content "$file") | Set-Content "$file")
}
6) Si le fichier de sortie n’est pas vide ALORS :
else
{
@("Rapport Hebdo des snapshot en cours (hors replica)" , "`r`nCi dessous la liste :" +  (Get-Content "$file") | Set-Content "$file")
}
7) L’envoi par Email :
Send-MailMessage -SmtpServer $smtp -To $to -From $from -Subject $subject -attachment $file -Body $body -Priority high

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *