preloader
13 January 2011 / #Powercli

Cohérence du nom DNS/VM

post-thumb

Juste un petit billet pour mettre un script qu’on utilise de temps en temps.

Sur une plateforme vCenter, il peut être intéressant de faire certaines vérifications par moment, par exemple la concordance entre le nom DNS d’une machine virtuelle et son nom dans vCenter.

Je précise bien que cette réflexion ne relève que de l’organisation et d’une certaine rigueur, mais n’est aucunement nécessaire pour le bon fonctionnement de votre production !

Vous pouvez très bien nommer vos machines virtuelles VM[0001..9999] si bon vous semble :p

Mais j’ai pu apprendre d’un collègue que la rigueur n’est pas si mal que ça :p (merci FPdL aka Reichstag)

Nous avons donc fait un rapide script PowerCLI (forcement :p) qui va comparer le nom DNS de la machine virtuelle et son nom dans vCenter et ressortir une liste des machines qui ont ces 2 valeurs différentes.

Function Get-MismatchDNSNameVM {
<#
.SYNOPSIS
    List VM with DNS name mismatch with vCenter name
.DESCRIPTION
    List all virtual machines with their DNS name
    that doesn't match their vCenter name.
    The script will scan only virtual machine with
    vmware tools installed and running in order
    to get DNS name from them.
.NOTES
    Authors:    www.cloudydude.fr
.PARAMETER none
.EXAMPLE
    PS> Get-MismatchDNSNameVM | Export-Csv -NoTypeInformation -Path $ExportPath
#>

    PARAM(
    )

    BEGIN{
        # Pour eviter les retour en warning/error
        $ErrorActionPreference = "SilentlyContinue"
        $WarningPreference = "SilentlyContinue"

        If ((Get-PSSnapin -Name "VMware.VimAutomation.Core" -ErrorAction SilentlyContinue | Measure-Object).count -eq 0) {
            Add-PSSnapin -Name "VMware.VimAutomation.Core"
        }
    }

    PROCESS{
        # Affichage d'une barre de progression
        Write-Progress -Activity "Check-VMNamesDNS" -PercentComplete 0 -Status "Recuperation infos VMs" -Id 1

        # Récupération des machines virtuelles (hors template) en objet managed
        $FullVM = Get-View -ViewType VirtualMachine | Where {-not $_.Config.Template}

        # Mise à jour de l'affichage de la barre de progression
        Write-Progress -Activity "Check-VMNamesDNS" -PercentComplete 33 -Status "Filtre infos VMs" -Id 1

        # Filtre les machines virtuelles qui sont allumées et qui ont les vmware tools installés et lancés
        $AllVMs = $FullVM | Where { $_.Runtime.PowerState -eq "poweredOn" -And ($_.Guest.toolsStatus -ne "toolsNotInstalled" -And $_.Guest.ToolsStatus -ne "toolsNotRunning" -And $_.Guest.hostName -ne "")}

        $col = @()
        $compteur = 1

        # Mise à jour de l'affichage de la barre de progression
        Write-Progress -Activity "Check-VMNamesDNS" -PercentComplete 66 -Status "Parcours VMs" -Id 1

        # Parcours des machines virtuelles
        Foreach ($VM in $AllVMs) {
            # Affichage de la barre de progression de niveau 2 pour le parcours des VMs
            Write-Progress -activity "Checking VMs" -status "VMs Quantity: " -PercentComplete (($compteur / $AllVMs.length) * 100) -Id 2

            # On récupère le nom DNS et le nom vCenter
            $nomVM = $VM.Name
            $nomVMDNS = ($VM.Guest.hostName).split(".")[0]
            if ($nomVM -ne $nomVMDNS) { # Si les 2 noms sont différents, on récupère les infos de la VM
                $Result = "" | Select NomVM, NomVMDNS
                $Result.NomVM = $nomVM
                $Result.NomVMDNS = $VM.Guest.hostName
                $col += $Result
            }
            $compteur += 1
        }

        # Affichage des résultats
        $col
    }
}

> Frederic MARTIN