VMware Cloud Community
dajbozerozum
Contributor
Contributor
Jump to solution

Getting virtual machine network informations by using Get-View

Hi,

I have made simple script that is "dumping" virtual machines network information as below.

"

VM Name

1;Network Adapter 1;Network name;MAC address;IP address.

2;Network Adapter 2;Network name;MAC address;IP address.

"

I have used below variables.

     $_.Config.Hardware.Device (Network Adapter 1),

     $_.Guest.Net.Network (Network name),

     $_.Guest.Net.MacAddress (MAC address),

     $_.Guest.Net.IpAddress (IP address).

Everything works fine but not for VMs that are using distributed vSwitch. For such VMs, Network name ($_.Guest.Net.Network) is empty. I'm doing something wrong or I should get network name from other var?

0 Kudos
1 Solution

Accepted Solutions
snoopj
Enthusiast
Enthusiast
Jump to solution

I just double checked a test machine in my lab.

There's two different DVS portgroup connections, here's the output from the one that's on the network called "VM Network" which is our "prod" network in the lab:

PowerCLI C:\> $vm.Guest.Net[1].IpConfig.IpAddress

IpAddress       : 2607:f190:1:0:449c:d037:99cf:e180

PrefixLength    : 64

Origin          : linklayer

State           : unknown

Lifetime        :

DynamicType     :

DynamicProperty :

IpAddress       : fe80::449c:d037:99cf:e180

PrefixLength    : 64

Origin          : linklayer

State           : unknown

Lifetime        :

DynamicType     :

DynamicProperty :

IpAddress       : 10.10.100.16    <main IPv4 address>

PrefixLength    : 24   <PrefixLength is populated>

Origin          : manual

State           : preferred

Lifetime        :

DynamicType     :

DynamicProperty :

View solution in original post

0 Kudos
10 Replies
snoopj
Enthusiast
Enthusiast
Jump to solution

I'd try a different variable.  Since you already get the Get-View listing from the virtual machine, dvSwitch information can at least be started from $_.Network.  Odds are, you'll get a managed object reference of a dvPortgroup and from there, what I've done in the past is do something similar to the following:

$networkName = (Get-View -Id $_.Network).Name

Do a quick Get-View command on the MoRef of the dvPortgroup and then pull it's Name property from it and store it in $networkName.

dajbozerozum
Contributor
Contributor
Jump to solution

Well, that would work perfectly in case where we would have only one network. In this case I have many different virtual machines, with many network adapters. But maybe I am wrong. I finally tried something like this.

foreach($vm in Get-View -ViewType VirtualMachine){

    if($vm.Network.Type -eq "Network"){

          if($_.Network){$tmpNetwork = $_.Network}else{$tmpNetwork = "!NN!"};

     }elseif($vm.Network.Type -eq "DistributedVirtualPortgroup"){

          $tmpDeviceConfigId = $_.DeviceConfigId;

          $tmpdvSpgKey = ($vm.Config.Hardware.Device | ?{$_.Key -eq $tmpDeviceConfigId}).Backing.Port.PortgroupKey;

          $tmpNetwork = (Get-View -Id ($vm.Network | ?{$_.Value -eq $tmpdvSpgKey})).Name;

     }

}

When VM uses standard vSwitch it has $_.Guest.Net.Network filled but it has empty Backing.Port.PortgroupKey;

When VM uses distributed vSwitch it has $_.Guest.net.Network empty, but it has Backing.Port.PortgroupKey and I am able to use it with Get-View -Id $vm.Network;

Any ideas if I can make it another way?

0 Kudos
snoopj
Enthusiast
Enthusiast
Jump to solution

I know I struggled with something similar when I had a mix of VSS and VDS devices in the environment, even if I only had one NIC per VM.  I vaguely remember using something similar to the Backing.Port.PortgroupKey for easy determination of VSS or VDS and had my if..else statements setup like what you had.  It was a while ago, but even then I had to use an object with assumptions attached to it (that Backing.Port.PortgroupKey != $null means VDS, if = $null, it's VSS).

--j

dajbozerozum
Contributor
Contributor
Jump to solution

Another problem...

I'am able to get netmask from $_.Guest.Net.IpConfig.IpAddress.PrefixLength but this works only for virtual machines placed on vSwitch. I have no idea how to get netmask for virtual machines placed on VDS.

0 Kudos
snoopj
Enthusiast
Enthusiast
Jump to solution

I would think at that point, maybe it's time to start asking the guest OS a few questions through some of the guest cmdlets.

Although, strange, I was able to get the PrefixLength on my devices in a VDS.

0 Kudos
dajbozerozum
Contributor
Contributor
Jump to solution

Jon, are you able to check if you can still get PrefixLength in your env? Regarding "start asking guest OS" you mean to use for example invoke-VMscript?

0 Kudos
snoopj
Enthusiast
Enthusiast
Jump to solution

Yeah, might need to use Invoke-VMScript for some of those specifics.

I'll double check the PrefixLength value in my environment tomorrow (at an all day event today and unable to get into the environment right now).

--j

0 Kudos
snoopj
Enthusiast
Enthusiast
Jump to solution

I just double checked a test machine in my lab.

There's two different DVS portgroup connections, here's the output from the one that's on the network called "VM Network" which is our "prod" network in the lab:

PowerCLI C:\> $vm.Guest.Net[1].IpConfig.IpAddress

IpAddress       : 2607:f190:1:0:449c:d037:99cf:e180

PrefixLength    : 64

Origin          : linklayer

State           : unknown

Lifetime        :

DynamicType     :

DynamicProperty :

IpAddress       : fe80::449c:d037:99cf:e180

PrefixLength    : 64

Origin          : linklayer

State           : unknown

Lifetime        :

DynamicType     :

DynamicProperty :

IpAddress       : 10.10.100.16    <main IPv4 address>

PrefixLength    : 24   <PrefixLength is populated>

Origin          : manual

State           : preferred

Lifetime        :

DynamicType     :

DynamicProperty :

0 Kudos
dajbozerozum
Contributor
Contributor
Jump to solution

Many thanks. It seems there is a problem with those vars on vCenter 4.0 (build 385281).

0 Kudos
snoopj
Enthusiast
Enthusiast
Jump to solution

Ah.  I never did ask what version you were testing against.  I have the latest 5.5 appliance that I'm testing against for vCenter, although the ESX host in question was 5.1.  Good to know.

--j

0 Kudos