Automation

 View Only
  • 1.  command to retrieve visible networks for each vmnic

    Posted Feb 06, 2009 03:55 AM

    Hello all,

    We have on fairly regular basis "discussions" with our it comms brethren about the configuration of their switches / trunks etc when we have communications issues with VMs. More often than not, in our environment anyway, it turns out to be a misconfigured switch ports or trunks. So I am wondering if it is possible to report on the trunked networks that a pnic on an ESX server can see using PowerShell / VI Perl Toolkit.

    To explain what I mean, In the VI Client I can click on a host -> configuration tab -> select network adapters. In the right hand pane it displays all the pnics in the host, to the right is the Networks column and this displays the networks that this pnic has visibility of, e.g. all the vlans that are trunked to it.

    Can I get this information from one of the toolkits? Preference, well not my preference but the company i work for, is PowerShell.

    I have had a look at the change log for VI Toolkit for windows 1.5 as well.

    What I would like to be able to do is run a report across the cluster(s) to ensure all the pnics that are connected to the VM vSwitches can all see the same networks. In the same way you can do with the datastores / luns / port groups.



  • 2.  RE: command to retrieve visible networks for each vmnic
    Best Answer

    Posted Feb 06, 2009 06:53 AM

    Based on the script below emulates the page from the VI client.

    Write-Host "Device" "`t" "Speed" "`t`t" "Configured" "`t" "vSwitch" "`t" "Observed IP ranges" "`t`t" "WOL"
    
    Get-VMHost | Sort-Object -property Name | Get-View | % {
    	Write-Host "ESX : " $_.Name
    
    	foreach($pnic in $_.Config.Network.Pnic){
    		$device = $pnic.Device
    		$speed = [string]($pnic.LinkSpeed.SpeedMb)
    		if($pnic.LinkSpeed.Duplex){$speed += " Full"}
    		foreach($vs in $_.Config.Network.Vswitch){
    			foreach($pn in $vs.Pnic){
    				if($pn -eq $pnic.Key){$vswitch = $vs.Name}
    			}
    		}
            $configured = ""
    		if($pnic.Spec.LinkSpeed -eq $null){
    		  $configured = "Negotiate"
    		} 
    		$netSys = Get-View $_.ConfigManager.NetworkSystem
    		$IPrange = ""
    		$hintinfo = $netSys.QueryNetworkHint($pnic.Device)
    		foreach($pnicHintInfo in $hintinfo){
    			foreach($pnicIPHint in $pnicHintInfo.subnet){
    				$IPrange += $pnicIPHint.IpSubnet
    				if($pnicIPHint.VlanId -ne 0){
    				  $IPrange += (" (VLAN " + $pnicIPHint.VlanId + ")")
    				}
    				if($pnicHintInfo.Subnet.Count -gt 1){
    				  $IPrange += ","
    				}
    			}
    		}
    		if($pnic.WakeOnLanSupported) {$WOL = "Yes"} else {$WOL = "No"}
    
    		Write-Host $device "`t" $speed "`t" $configured "`t" $vswitch "`t" $IPrange "`t" $WOL
    	}
    }
    



  • 3.  RE: command to retrieve visible networks for each vmnic

    Posted Feb 09, 2009 01:34 AM

    thanks, i will give that a go and let you know how it goes.



  • 4.  RE: command to retrieve visible networks for each vmnic

    Posted Feb 09, 2009 01:54 AM

    Thankyou very much LucD, That is what I am looking for. I will do some manipulation of the output but at least now I have the data. :smileyhappy:



  • 5.  RE: command to retrieve visible networks for each vmnic

    Posted Jul 21, 2022 07:24 PM

    how can this exported to sv