Script: Detailed NIC Information Report

Posted by : on

Category : esx   vmware   powershell   script   tools   vmnic


Over the last few days, my coworker and I have been working on a script that will go out and collect detailed network information for each NIC on our ESX hosts. Not wanting to reinvent the wheel, I strolled over to Alan Reneuf’s website (www.virtu-al.net). I had remembered seeing a script (“More Network Info”) he created that I knew could collect the info we wanted. Thank you, Alan.

I copied Alan’s script into Notepad++ and started to work with it. One of the things we needed to know was duplex information. Since that wasn’t in the original script, I added it. I didn’t need to know the number of active virtual switch ports, so I removed that portion.

Here are the end results of this modified script.

NETWORKINFO.PS1

##============================================================================== ##==============================================================================

SCRIPT………: networkinfo.ps1

AUTHOR………: J. Sam Aaron

EMAIL……….: sam.aaron@micronauts.us

VERSION……..: 1.0.6

DATE………..: 08/22/2011

LICENSE……..: Freeware

REQUIREMENTS…: Powershell v2.0 and the VI Toolkit

USAGE……….: ./networkinfo.ps1

##

DESCRIPTION….: This program will collect detailed Network info

##
##

NOTES……….: Modified & Combined code from Alan Reneuf & Jeff Grummons

##

CUSTOMIZE……:

##==============================================================================

##==============================================================================

START ##============================================================================== ## LOAD THE VI-SNAPIN ##============================================================================== if ( (Get-PSSnapin -Name "VMware.VimAutomation.Core" -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name "VMware.VimAutomation.Core" } ##============================================================================== ## VARIABLES ##============================================================================== $vc = "virtualcentername" $filename = "c:\POSH\Reports\DetailedNetworkInfo.csv" $MyCol = @() ## VIRTUAL CENTER CONNECTION ##============================================================================== Connect-VIServer -Server $vc ## GATHER HOSTS FROM CLUSTER ##============================================================================== $clusters = get-cluster | Select Name foreach ($cluster in $clusters) { $h = $cluster $vmhosts = Get-Cluster $h.Name | Get-VMHost | Sort Name | Get-View ## COLLECT ENTIRE NETWORK SYSTEM FOR EACH HOST ##============================================================================== foreach($vmhost in $vmhosts) { $ESXHost = $vmhost.Name Write-host "Collating information for $ESXHost" $networkSystem = Get-view $vmhost.ConfigManager.NetworkSystem ## NETWORK INFORMATION FOR EACH NIC ##============================================================================== foreach($pnic in $networkSystem.NetworkConfig.Pnic) { $pnicInfo = $networkSystem.QueryNetworkHint($pnic.Device) ## FOR EACH NIC COLLATE NEEDED NETWORK INFORMATION ##============================================================================== :Details foreach($Hint in $pnicInfo) { $NetworkInfo = "" | select-Object Host, Cluster, vSwitch, PNic, Speed, Duplex, Configured, MAC, DeviceID, PortID, Observed, VLAN $NetworkInfo.Host = $vmhost.Name $NetworkInfo.Cluster = $h.Name $NetworkInfo.PNic = $Hint.Device $NetworkInfo.DeviceID = $Hint.connectedSwitchPort.DevId $NetworkInfo.PortID = $Hint.connectedSwitchPort.PortId If ($NetworkInfo.PortID -eq $null) { continue Details } $NetworkInfo.vSwitch = Get-Virtualswitch -VMHost (Get-VMHost ($vmhost.Name)) | where {$_.Nic -eq ($Hint.Device)} $record = 0 Do{ If ($Hint.Device -eq $vmhost.Config.Network.Pnic[$record].Device) { $NetworkInfo.Speed = $vmhost.Config.Network.Pnic[$record].LinkSpeed.SpeedMb $extra = $vmhost.Config.Network.Pnic[$record].LinkSpeed.duplex if ($extra -eq $True) {$NetworkInfo.duplex = "Full"} else {$NetworkInfo.duplex = "Half"} $NetworkInfo.MAC = $vmhost.Config.Network.Pnic[$record].Mac } $record ++ }Until ($record -eq ($vmhost.Config.Network.Pnic.Length)) if($Hint.ConnectedSwitchPort.FullDuplex -eq $true) { $NetworkInfo.Configured = "Full" } elseif($Hint.ConnectedSwitchPort.FullDuplex -eq $false) { $NetworkInfo.Configured = "Half" } foreach ($obs in $Hint.Subnet) { $NetworkInfo.Observed += $obs.IpSubnet + " " Foreach ($VLAN in $obs.VlanId) { If ($VLAN -eq $null) { } else { $strVLAN = $VLAN.ToString() $NetworkInfo.VLAN += $strVLAN + " " } } } $MyCol += $NetworkInfo } } } } ## DISPLAY OUTPUT & SAVE TO CSV ##============================================================================== $mycol | Out-GridView $Mycol | Sort Host, PNic | Export-Csv $filename -NoTypeInformation ## DISCONNECT FROM VC ##============================================================================== Disconnect-VIServer -Server $vc -Confirm:$False Write-Host "Disconnected from" $vc ##============================================================================== ## END

##==============================================================================

##==============================================================================

REVISED BY…..: J. Sam Aaron

EMAIL……….: sam.aaron@micronauts.us

REVISION…….: 1.0.6

REVISION DATE..: 08-22-2011

REVISION NOTES.: Cleanedup Script and added comments

##
## ##==============================================================================

Version 1.0.6 - Cleanedup Script and added comments

Version 1.0.5 - Fixed misplaced bracket (line 119)

Version 1.0.4 - Added actual duplex settings (line 91)

Version 1.0.3 - Check Link status - display if active (line 84)

Version 1.0.2 - Added Cluster loop info (line 51)

Version 1.0.1 - Initial Creation


About Sam Aaron
Sam Aaron

Father, Husband, Geek. Workaholic.

Email : mail@micronauts.us

Website : http://micronauts.us

About Sam Aaron

Father. Husband. Geek. Workaholic. US Marine Corps Veteran.

Sam Aaron is a Senior Consultant in the Professional Services Organization for Entelligence, bringing over a decade of expertise in enterprise cloud automation and infrastructure. Sam has spent almost eleven years at VMware leading cloud automation initiatives using VCF Automation (formerly Aria Automation & vRA) and designing scalable, multi-tenant environments with VMware Cloud Director (vCD).

Sam holds multiple certifications including VCF-Architect 2024, VCIX-CMA, and dual VCPs (DCV & CMA), and is a recognized contributor to VMware’s certification exams. As a VMware Hands-On Lab (HOL) Captain and content author from 2015-2025, Sam played a key role in educating and mentoring the global VMware community. He helped to create and develop the automation challenge and troubleshooting labs for VMworld and global virtual forums.

When Sam is not working, he has several hobbies, among these are 3D printing Star Wars robots and turning them into animatronics.

Launched in April 2010, micronauts is Sam's online presence. Here, he has been blogging and sharing knowledge with the virtualization community. This blog acts as a central repository to retain the resolutions and other trivial knowledge that Sam has discovered.

** No information provided here was reviewed or endorsed by VMware by Broadcom, Microsoft, or anyone else for that matter. All information here are opinions based on Sam's personal experience. Use this knowledge at your own risk. **

Star
Useful Links