I updated Luc's script to include the info you want:
$qlR1= [regex]"QLogic.+for\s(\w+):"$qlR2= [regex]"Firmware version ([\d|\.]+).+Driver version ([^$]+)"$qlR3= [regex]"BIOS version ([\d|\.]+)"$qlR4= [regex]"FCODE version ([\d|\.]+)"$qlR5= [regex]"EFI version ([\d|\.]+)"$qlR6= [regex]"Flash FW version ([\d|\.]+)"
$User="USERNAME"$Pswd="SECRET"
$plink="D:\plink.exe"
$plinkoptions=" -v -batch -pw $Pswd"$cmd1='cat /proc/scsi/qla*/*'$remoteCommand='"'+$cmd1+'"'$report= @() Get-VmHost | Sort | % { $Computer=$_.Name $command=$plink+""+$plinkoptions+""+$User+"@"+$computer+""+$remoteCommand $msg=Invoke-Expression-command$command $msg | % { if($_-match$qlR1){ $row="" | Select ESXname, HBAtype, HBAfirmware, HBAdriver, BIOS, FCODE, EFI, FlashFW
$row.ESXname =$Computer $row.HBAtype =$qlR1.Match($_).Groups[1].Value } if($_-match$qlR2){ $matches=$qlR2.Match($_) $row.HBAfirmware =$matches.Groups[1].Value $row.HBAdriver =$matches.Groups[2].Value } if($_-match$qlR3){ $matches=$qlR3.Match($_) $row.BIOS =$matches.Groups[1].Value $report+=$row } if($_-match$qlR4){ $matches=$qlR4.Match($_) $row.FCODE =$matches.Groups[1].Value $report+=$row } if($_-match$qlR5){ $matches=$qlR5.Match($_) $row.EFI =$matches.Groups[1].Value $report+=$row } if($_-match$qlR6){ $matches=$qlR6.Match($_) $row.FlashFW =$matches.Groups[1].Value $report+=$row } } } $report
This yields in my test:
ESXname : esxhost1.local
HBAtype : HPAE311A
HBAfirmware : 5.03.15
HBAdriver : 901.k1.1-14vmw
BIOS : 3.12
FCODE : 2.03
EFI : 2.22
FlashFW : 5.03.15
ESXname : esxhost1.local
HBAtype : HPAE311A
HBAfirmware : 5.03.15
HBAdriver : 901.k1.1-14vmw
BIOS : 3.12
FCODE : 2.03
EFI : 2.22
FlashFW : 5.03.15