Unterschiede zwischen DNS-Name und VM-Anzeigename finden
Mein Chef wollte einen Report über alle VMs, bei denen der DNS-Hostname und der im Client angezeigte Name auseinanderlaufen.
Dieser Beitrag ist von 2014. Er bleibt online, weil er nach wie vor nachgefragt wird, beschreibt aber einen Produktstand von damals.
Mein Chef wollte einen Report über alle VMs, bei denen der DNS-Hostname und der im Client angezeigte Name auseinanderlaufen. Der Grund ist einfach: Unsere Backup-Lösung kommt manchmal ins Straucheln, wenn diese Werte nicht übereinstimmen. Und in seltenen Fällen finden wir die VM nicht, für die wir Support leisten sollen, weil der Kunde nur den DNS-Namen kennt und wir VMs nur über den Anzeigenamen finden.
Update: Dieses Script liegt inzwischen auf GitHub.
Lange Geschichte, kurzes Script:
$OutArray = @()
$vms = Get-VM
foreach ($vm in $vms)
{
$myobj = "" | Select "VM", "DNSname", "Status"
$guest = Get-VMGuest -VM $vm
$pat = "."
$vmname = $guest.VmName
$hostname = $guest.HostName
$myobj.VM = $vmname
$myobj.DNSname = $hostname
if ( $hostname -ne $null)
{
$pos = $hostname.IndexOf(".")
if ( $pos -ne "-1")
{
$hostname = $hostname.Substring(0, $pos)
}
if ( $hostname -ne $vmname )
{
Write-Host -ForegroundColor Red "---> The VM: $vm has different DNS and Display-Name!"
Write-Host -ForegroundColor Red "---->Hostname: " $hostname
Write-Host -ForegroundColor Red "---->VmName: "$vmname
$myobj.Status = "Not OK!"
}
Else
{
Write-Host -ForegroundColor Green "---> The VM: $vm has identical Names."
$myobj.Status = "OK!"
}
}
Else
{
Write-Host -ForegroundColor Yellow "---> The VM: $vm is not powered-on. Hostname cannot be found in this state!"
$myobj.Status = "N/A"
}
Clear-variable -Name hostname
Clear-variable -Name vmname
$OutArray += $myobj
}
$OutArray | Export-Csv "c:\tmp\name_vs_dns_$vcenter.csv"
Das Script verbindet sich mit einem vCenter deiner Wahl (füll die Variable $vcenter aus) und liest alle VMs aus. Danach holt es zu jeder VM das Guest-Objekt und legt die Werte in Variablen ab.
Weil DNS-Namen immer vom Hostnamen abweichen, sobald DNS mit FQDN arbeitet, zähle ich die Punkte im DNS-Namen. Wenn welche da sind, wird abgeschnitten, sonst passt es. Ist der DNS-Hostname $null, heisst das, dass die VM ausgeschaltet ist oder die nötigen Tools fehlen.
Das ist eines meiner ersten PowerShell-Scripts, ich hätte es also wohl mit weniger Variablen hinbekommen, aber es funktioniert. 🙂