IP-Adressen von virtuellen Maschinen auslesen

    IP-Adresse einer VM im vSphere Client anzeigenWenn man die IP-Adressen von VMs unter VMware oder Hyper-V erfahren möchte, dann kann man das bei einzelnen virtuellen Maschinen über GUI-Tools wie den vSphere Client oder den Hyper-V Manager tun. Benötigt man diese In­formationen von mehreren VMs auf verschieden­en Hosts, dann ist PowerShell die bessere Wahl.

    Bei den grafischen Management-Tools findet sich die IP-Adresse nicht in den Einstellungen einer VM, sondern in separaten Fenstern. Der vSphere Client zeigt diese Information unter der Registerkarte Übersicht, wenn man in der Bestandsliste die betreffende VM auswählt. Der Hyper-V Manager dagegen blendet am unter Rand drei Reiter ein, wenn man eine VM markiert. Einer davon ist mit Netzwerk beschriftet, hinter ihm verbirgt sich unter anderem die IP-Adresse des Gastsystems.

    Voller PowerShell-Support mit Hyper-V 2012

    Alternativ zu den GUI-Tools bieten beide Systeme Schnittstellen für PowerShell, über die sich zahlreiche Daten über die VMs sammeln lassen. Allerdings ist das bei Hyper-V erst in jener Version der Fall, die mit Windows 8 und Server 2012 ausgeliefert wird. Vorher musste man zu diesem Zweck über die WMI-Schnittstelle des Gastbetriebssystems gehen, vorausgesetzt, es handelte sich dabei um Windows.

    Der Hyper-V Manager zeigt die IP-Adresse von VMs im untersten Fenster in der Registerkarte Netzwerk an.

    Die neuen Cmdlets machen es nun viel einfacher, an solche Informationen zu kommen. Nachdem man eine Liste der virtuellen Maschinen von einem oder mehreren Hosts abgerufen hat, kann man über Get-VMNetworkAdapter deren IP-Adressen auslesen. Im einfachsten Fall erhält man sie über diesen Aufruf von allen VMs des lokalen Rechners:

    Get-VM | foreach{(Get-VMNetworkAdapter $_).IPAddresses}

    Ausgewählte VMs von Remote Hosts

    Das Cmdlet liefert eine Liste aller VMs vom lokalen Host, über die anschließend eine foreach-Schleife iteriert und in jedem Durchlauf die NICs der virtuellen Maschine ermittelt. Von ihnen wird dann die Eigenschaft IPAddresses angezeigt. Man kann Get-VM allerdings auch mit dem Parameter -ComputerName aufrufen, um die VMs von einem entfernten Hosts zu untersuchen.

    Außerdem besteht die Möglichkeit, die Liste der VMs über den Parameter -Name zu filtern, wobei hier auch Wildcards erlaubt sind. So würde -Name Win* nur die VMs berücksichtigen, deren Namen mit "Win" beginnt. Diese Option ist dann interessant, wenn man sich bei der Benennung von VMs durchgängig an eine bestimmte Konvention hält.

    Wenn man mit der lapidaren Anzeige der IP-Adressen (IPv4 und IPv6) nicht zufrieden ist, dann kann man mit PowerShell eine aufschlussreichere Ausgabe produzieren, die auch den Namen der VM enthält:

    Get-VM | foreach {$_ | select name, @{N="IP-Adresse"; E={(Get-VMNetworkAdapter $_).IPAddresses}}}

    IP-Adressen von VMs unter ESXi mit PowerCLI ermitteln

    Bei VMware ist das Vorgehen ganz ähnlich. Man benötigt dafür PowerCLI, das die erforderlichen Cmdlets enthält. Dort meldet man sich wie üblich mit Hilfe von Connect-VIServer an einem vCenter- oder ESXi-Server an und ruft dann die Liste der VMs ab, aus denen man ihre IP-Adressen ausliest:

    Get-VM | foreach {$_.Guest|Select VmName, IPAddress}

    Auch wenn beide Hersteller ein Cmdlet mit dem Namen Get-VM verwenden, geben sie verschiedene Datenstrukturen zurück. Bei VMware ist IPAddress eine Eigenschaft von Guest-Objekten, der Name der VM ist in der Property VmName gespeichert statt in Name wie bei Hyper-V.

    Möchte man die VMs auf einem bestimmten Host remote abfragen, dann spezifiziert man diesen bei Get-VM nicht über den Parameter -ComputerName, sondern über -Server. Beide Hersteller nutzen indes -Name, um die Namen der gewünschten VMs zu übermitteln.

    6 Kommentare

    Paul Kratz sagt:
    7. Februar 2013 - 8:15

    Der angegebene Befehl fuer VMware funktioniert zumindest mit der aktuellen PowerCLI Version leider nicht da es Get-VMNetworkAdapter als Cmdlet nicht gibt.

    Paul Kratz sagt:
    7. Februar 2013 - 8:19

    Sorry,

    ich bin beim ausprobieren in die falsche Zeile geraten und habe bei VMware den Hyper-V Befehl getestet!

    Der angegebene VMware Befehl funktioniert ohne Probleme !!!!

    SORRY!!!

    Paul Kratz

    Francesco sagt:
    13. November 2013 - 15:47

    Hi,

    danke für den Beitrag aber meine Frage zielt eher darauf ab, wie ich auf einer VM, die noch keine IP-Adresse erhalten hat, über Powershell eine IP setzen kann.
    Irgendwie suche ich mir gerade die Finger blutig.
    Weil ich finde 100 von Möglichkeiten wie ich die IP auslesen kann per Hyper-V Cmdlets aber keine um eine IP zu setzten incl. GW, Netmask, DNS etc.

    Über Feedback würde ich mich sehr freuen.

    Bild von Wolfgang Sommergut
    13. November 2013 - 18:55

    Warum besteht überhaupt die Notwendigkeit, die IP-Adresse von außen zu setzen? Das Gastbetriebssystem ist doch selbst in der Lage, die IP über DHCP zu beziehen oder eine feste Adresse zu erhalten.

    Francesco sagt:
    14. November 2013 - 7:53

    Hallo Wolfgang,

    danke für die Antwort, aber es ist so, dass wir momentan zwei Clouds aufbauen.
    In diesen Clouds gibt es nur Server, daher gibt es dort auch keine DHCP Services, da ich diese Funktion nicht für mich privat brauche, sondern geschäftlich.
    Weil es ist so, dass ich ein Preinstallation Script baue, wo unsere Server für unsere Kunden per Script so eingestellt werden, so dass nach der Installation nur noch das Script durchlaufen muss.
    Daher ist es notwendig, dass ich die Server per IP konfigurieren kann über Powershell. Sonst muss jeder, der einen Server bereitstellt, sich auf diesen einloggen und IP Addresse etc. alles per Hand machen, und das ist eine Sache, die man mit dem Script vermeiden wollte.

    Daher meine Frage: Ich kann die IP Adresse auslesen mit -get-VM oder mit -get-vmnetadapter, aber mit -set-vmnetadapter kann ich dort keine IP Adresse setzen.

    Daher meine Frage, was hat sich Microsoft dabei wieder gedacht.
    Ich habe auf anderen Seiten gelesen, dass es unter Hyper-V 2012 ein cmdlet geben soll, das nennt sich "Set-VMNetworkConfiguration". Nur leider ist es in der Windows Server 2012R2 Datacenter Version auf unserem Hyper-V nicht vorhanden.

    Als Anlage hier die Seite wo ich Info herhabe.
    http://www.ravichaganti.com/blog/?p=2766

    Grüsse

    Francesco

    Bild von Wolfgang Sommergut
    15. November 2013 - 22:37

    Soweit ich herausfinden konnte, bietet Hyper-V keine Schnittstelle, um von außen die IP einer VM zu ändern. Es bleibt aber die Möglichkeit, das Gastsystem wie einen normalen Remote-PC anzusprechen. Dann bietet PowerShell die nötigen Funktionen, um die Netzwerkeinstellungen zu ändern (siehe dazu diesen Beitrag).