Keeping a stable environment is a key part of any business and in virtualization drivers/firmware matter quite a bit!
This is a very handy script that will iterate through a whole VCenter or collection of VCenter servers and get all hosts NIC cards driver/firmware information.
The script was originally created by another blogger, I’ve added a few quick modifications however all credit should go to Kyle Ruddy who wrote the code originally.
My changes:
Originally it was meant to work cluster by cluster, now it will get all hosts in all connected VCenter servers.
Added optional CSV output. If you specify a CSV file it will write to it, alternatively it will just output to the screen.
Usage:
.\getNicInfo.ps1 output.csv
(Assuming you are already connected to one or more vcenter servers)
Again, output.csv is optional, please omit it if you just want to display to your screen.
#
#Original code by: Kyle Ruddy
#Name: getNicInfo.ps1
#Date: 10/30/2014
#Modified by: Me
#Date: 10/08/2016
#
PARAM (
[Parameter(HelpMessage="CSV filename to be created.", Mandatory=$false)][string] $CSVFile
)
#Setting global variables
$output = @()
#Gather available VMHosts
$vmhosts = Get-VMHost | where {$_.State -eq 'Maintenance' -or $_.State -eq 'Connected'} | sort Name
#Loop through each VMHost gathering information
foreach ($vmh in $vmhosts) {
#Null variables which will be reused in the loop
$esxcli = $niclist = $null
#Connect to the vmhost via esxcli and then pull its NICs
$esxcli = $vmh | Get-EsxCli
$niclist = $esxcli.network.nic.list()
#Loop through each NIC gathering information
foreach ($nic in $niclist) {
#Null variables which will be reused in the loop
$tempvar = $driverinfo = $null
#Gather NIC information from the DriverInfo selection
$driverinfo = $esxcli.network.nic.get($nic.Name).DriverInfo
#Feed NIC information into a variable to be displayed later
$tempvar = "" | select VMHost,Nic,Driver,DV,FV
$tempvar.VMHost = ($vmh.Name).Split('.')[0]
$tempvar.Nic = $nic.Name
$tempvar.Driver = $driverinfo.Driver
$tempvar.DV = $driverinfo.Version
$tempvar.FV = $driverinfo.FirmwareVersion
#Add the above variable to variable that's to be the final result
$output += $tempvar
}}
if ($CSVFile) {
#Write to CSV if parameter was specified
$output | select VMHost,NIC,Driver,@{Name='Driver Version';Expression={$_.DV}},@{Name='Firmware Version';Expression={$_.FV}} |Export-Csv .\$CSVFile -NoTypeInformation
} else {
# otherwise write to screen
$output | select VMHost,NIC,Driver,@{Name='Driver Version';Expression={$_.DV}},@{Name='Firmware Version';Expression={$_.FV}} |Format-Table
}
File: getNicInfo

thanoks for the great info