Suite à quelques cas de vmtools qui tombaient en carafe sur des serveurs Windows en clientèle, j’ai eu l’idée de réaliser un petit script personnel afin de contrôler l’état des vmtools sur un ESXi ou un vCenter, et de remonter une alerte par email si jamais ils ne sont pas dans leur état normal.
On reçoit donc un courriel si les vmtools ne sont pas : en cours d’exécution, à jour ou installés. Par défaut, le script renvoie comme vmtools en erreur les machines qui sont éteintes car le serveur ne peut les joindre. C’est pourquoi il est nécessaire lors du contrôle d’exclure les machines éteintes.
Add-PSSnapin VMware.VimAutomation.Core
Add-PSSnapin VMware.PowerCLI
$From = "admin-vmw@localhost"
$To = "supervision@localhost"
$Smtp = "smtp.localdomain"
$ESXServer = "esxi.localdomain"
$ESXUser = "service"
$ESXPwd = "P@ssw0rd"
Connect-VIServer $ESXserver -User $ESXUser -Password $ESXPwd
$VMArray = Get-VM
foreach ($VM in $VMArray)
{
$VMPoweredOn = $VM.PowerState
$toolsStatus = $VM.ExtensionData.Guest.ToolsStatus
if ($toolsStatus -ne "toolsOK" -and $VMPoweredOn -eq "PoweredOn")
{
$MailString = "Bonjour, les vmtools sur la machine '$VM' remontent avec le statut inhabituel suivant : '$toolsStatus'."
Send-MailMessage -From $From -To $To -Subject "vmtools en statut anormal sur $VM" -SmtpServer $Smtp -Body $MailString
}
}
Cela permet alors de pouvoir être plus réactif sur le bon fonctionnement des vmtools et d’éviter d’avoir des soucis de drivers réseau ou d’interface avec d’autres applications. Ce script est disponible dans une version commentée en cliquant sur mon miroir de téléchargement. A noter que pour ce script comme pour le suivant, un seul module Powershell est nécessaire mais en fonction de la version de PowerCLI installée, le nom de celui-ci peut changer.
Le deuxième script que j’ai écrit permet de trouver les VMDK orphelins présents sur les datastores d’un vCenter ou d’un ESX. Il prend la liste des VMDK sur les datastore puis récupère la liste des disques rattachés à une machine virtuelle. Il fait ensuite la différence des deux disques et affiche la liste des différences. Avant de procéder à une suppression, tout de même vérifier si le VMDK n’a pas été désolidarisé pour une raison X ou Y, ou qu’il ne s’agit pas d’un snapshot.
Add-PSSnapin VMware.VimAutomation.Core
Add-PSSnapin VMware.PowerCLI
$vmdkds=@()
$vmdkvm=@()
Write-Host "Parsing all datastores and VMDKs. This might take a while.`r`n"
$dslist = Get-View -ViewType Datastore | select Name
foreach($ds in $dslist) {
$vmdks = Get-HardDisk -Datastore $ds.Name
foreach($vmdk in $vmdks) {
$vmdkfilename = @{Filename = $vmdk.Filename}
$vmdkentry = New-Object PSObject -Property $vmdkfilename
$vmdkds+=$vmdkentry
}
}
$vmlist = Get-View -ViewType VirtualMachine | select Name
foreach($vm in $vmlist) {
$vmdks = Get-HardDisk -VM $vm.Name
foreach($vmdk in $vmdks) {
$vmdkfilename = @{Filename = $vmdk.Filename}
$vmdkentry = New-Object PSObject -Property $vmdkfilename
$vmdkvm+=$vmdkentry
}
}
Write-Host "Done. Now processing. Please wait.`r`n"
Compare-Object $vmdkvm $vmdkds -Property Filename | Where-Object { $_.SideIndicator -eq "=>" } | foreach-object { Write-Host $_.InputObject }
Vous pouvez également trouver ce script dans une version commentée sur ce lien provenant de mon miroir de téléchargement.