build 65d0a3ad | content blog-content@c8490fa · 338 posts | profiles 20 · corpus 228 | 0 skipped |
Scripting · 2014-12-09

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.

2014-12-09Datum
Dario DörflingerAutor
2Min. Lesezeit
320words
no translation reviewed
Themen capabilities · idf weight Automation automation 1.80
Hersteller vendors · idf weight VMware vmware 0.89

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. 🙂

Passt ausserdem