VMware PowerCLI – Report Cisco Discovery Protocol Details
For those that have more than 10 physical NICs on your hosts you may find existing CDP scripts lack a little when trying to sort by hostname and then NIC
vmnic0
vmnic1
vmnic11
vmnic12
vmnic2
.
.
vmnicN
Nothing like a little regex and built-in padding to get everything in order. Pass a vmhost host object to this function to get a report on all physical NICs and including padding for vmnic[0-9] matches so they are returned as vmnic0[0-9]:
function Get-VMHostNetworkAdapterCDP { [CmdletBinding()] Param( [Parameter(Mandatory=$true,Position=0)] [ValidateScript({Get-View $_.ExtensionData.ConfigManager.NetworkSystem})] $VMhost ) $view = Get-View $VMhost.ExtensionData.ConfigManager.NetworkSystem $physicalNICarr = $view.NetworkConfig.Pnic $report = @() foreach($nic in $physicalNICarr) { $nicHint = $view.QueryNetworkHint($nic.Device) $props = @{ VMHost = $VMhost.Name NIC = '' Connected = if($nicHint.ConnectedSwitchPort){$true} else {$false} Switch = $nicHint.ConnectedSwitchPort.DevId PortId = $nicHint.ConnectedSwitchPort.PortId HardwarePlatform = $nicHint.ConnectedSwitchPort.HardwarePlatform SoftwareVersion = $nicHint.ConnectedSwitchPort.SoftwareVersion MangementAddress = $nicHint.ConnectedSwitchPort.MgmtAddr } switch ($nic.Device.length) { 6 {$nic.Device -match '(\w+)(\d)' | Out-Null; $props.NIC = $matches[1] + $matches[2].PadLeft(2,'0')} default {$props.NIC = $nic.Device} } $report += New-Object PSObject -Property $props } $report }