Cohérence du nom DNS/VM
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
}
}