jeudi 16 mars 2017

VMware et Powershell : contrôle de l'état des vmtools et des disques orphelins

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.
Add-PSSnapin VMware.VimAutomation.Core
$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
        }
    }
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.


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.

Le deuxième script que j'ai écrit (je pense qu'il peut nettement être amélioré...) 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 dans un tableau et l'exporte dans un fichier envoyé en pièce jointe par courriel. Cela permet de voir si des machines ont été supprimées de l'inventaire ou migrées ailleurs mais qu'il reste des reliquats à un endroit.

Add-PSSnapin VMware.VimAutomation.Core

$From = "admin-vmw@localhost"
$To = "supervision@localhost"
$Smtp = "smtp.localdomain"
$ESXServer = "esxi.localdomain"
$ESXUser = "service"
$ESXPwd = "P@ssw0rd"
$ReportFile = "c:\temp\orphandisks.log"

Connect-VIServer $ESXserver -User $ESXUser -Password $ESXPwd

$VMDKArray = New-Object System.Collections.ArrayList
$VMDiskArray = New-Object System.Collections.ArrayList
$OrphanArray = New-Object System.Collections.ArrayList

$VMDKList=@()
$VMDiskList=@()
$DatastoreArray = Get-Datastore
$VMArray = Get-VM

ForEach ($Datastore in $DatastoreArray)
    {
    $DatastoreVMDK = Get-HardDisk -Datastore $Datastore | select Filename
    $VMDKList+=$DatastoreVMDK
    }

$VMDKList = $VMDKList | sort Filename
$VMDiskList = $VMArray | Get-HardDisk | select Filename | sort Filename

for($i=0;$i -lt $VMDKList.Length-1;$i++)
    {
    $VMDKArray.Add($VMDKList[$i])
    }

$loops = $VMDKList.Length-1

for($i=0;$i -lt $loops;$i++)
    {
    if($VMDKArray[$i].Filename -ne $VMDiskList[$i].Filename)
        {
        $OrphanArray.Add($VMDKArray[$i].Filename)
        $VMDKArray.Remove($VMDKArray[$i])
        $i=-1
        $loops--
        }
    }

if ($OrphanArray.Count -ne 0)
    {
    Remove-Item $ReportFile
    for($i=0;$i -lt $OrphanArray.Count; $i++)
        {
        Add-Content -Path $ReportFile -value $OrphanArray[$i]
        }
    $MailString = "Bonjour, voici la liste des VMDK orphelins en PJ."
    Send-MailMessage -From $From -To $To -Subject "VMDK orphelins" -SmtpServer $Smtp -Body $MailString -Attachments $ReportFile
    }
else
    {
    $MailString = "Bonjour, il n'y a pas de VMDK orphelins sur les datastores."
    Send-MailMessage -From $From -To $To -Subject "VMDK orphelins" -SmtpServer $Smtp -Body $MailString
    }
Vous pouvez également trouver ce script dans une version commentée sur ce lien provenant de mon miroir de téléchargement.

Aucun commentaire:

Enregistrer un commentaire