
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
COPYRIGHT……: 2011, Sam Aaron
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
##
## ##==============================================================================