En prévision d’une montée de version des contrôleurs d’une baie SAN, il nous a été demandé de fournir des informations sur les serveurs ESXi qui étaient connectés à ces baies, notamment des informations sur leurs HBA.
Dans les informations demandées, il y avait du simple (driver, modèle de la carte, …) et du plus compliqué (version de firmware de chaque carte).
Une bonne partie des informations étaient disponibles en PowerCLI dans la partie Config.StorageDevice.HostBusAdapter d’un objet de type HostSystem :
Cependant, pour récupérer la version du firmware de la carte, ce fut plus tendu … Après pas mal de recherche (infructueuse) dans les objets et propriétés, on est tombé sur cette KB VMware : Identifying the firmware of a Qlogic or Emulex FC HBA et de la note en fin de page qui explique le pourquoi du comment :
Donc pour le coup, on a pas le choix, on est obligé de passer par SSH et récupérer les infos en commandes. Comme on ne voulait pas faire 2 scripts distincts, on a utilisé plink.exe (exécutable fournit avec puTTy qui permet d’exécuter des commandes à travers une session SSH en automatique) en l’appelant via le script PowerCLI.
Voici un exemple d’informations récupérées sur une carte EMULEX :
~ # head -9 /proc/scsi/lpfc820/7 Emulex LightPulse Fibre Channel SCSI driver 8.2.1.30.1-58vmw IBM 42C2071 4Gb 2-Port PCIe FC HBA for System x on PCI bus 0000:1e device 00 irq 200 port 0 BoardNum: 0 Firmware Version: 2.82A3 (Z3F2.82A3) Portname: XXX Nodename: XXX SLI Rev: 3 NPIV Unsupported by Fabric RPIs max 512 RPIs used 1
Voici un exemple d’informations récupérées sur une carte QLOGIC :
~ # head -8 /proc/scsi/qla2xxx/9
QLogic PCI to Fibre Channel Host Adapter for QLE2460:
FC Firmware version 5.02.00 (496), Driver version 831.k
Host Device Name vmhba5
BIOS version 1.28
FCODE version 1.24
EFI version 1.08
Voici donc un script PowerCLI qui va récupérer les informations suivantes :
- Host Name
- ESXi Product Version
- Hba Device
- Hba World Wide Name
- Hba Driver
- Hba Model
- Hba Firmware Version
- Hardware Model
Le script prend 4 paramètres :
- PlinkPath : Chemin vers l’exécutable plink.exe pour le lancement des commandes SSH
- Username : Nom de compte utilisé pour la connexion SSH
- Password : Mot de passe du compte utilisé pour la connexion SSH
- CSVPath : [OPTIONNEL] Chemin pour un export vers un fichier csv. Si ce paramètre n’est pas renseigné, le résultat sera affiché.
.\hba-infos.ps1 -PlinkPath 'C:\Program Files (x86)\PuTTY\plink.exe' -Username root -Password VMwareRox .\hba-infos.ps1 -PlinkPath 'C:\Program Files (x86)\PuTTY\plink.exe' -Username root -Password VMwareRox -CSVPath C:\HBA-infos.csv
Si vous avez renseigné le paramètre CSVPath vous aurez un fichier csv qui sera facilement exploitable sous Excel :



Hello,
MErci pour ce script très utile ! En revanche j’ai relevé deux erreurs :
- Dans votre article ou se trouve l’encadré avec les deux lignes de commande en CLI, ce n’est pas « PlinPath » mais « PlinKPtah » (manque le « k »). C’est vicieux ! ;o)
- En revanche lorsque je lance le script, il me renvoi une erreur « tentative de division par zéro » (ligne 47, caractère 283).
Apparemment cela correspond à l’opération de division, mais je ne comprend pas bien comment le résoudre…
Merci d’avance !
Cdt,
Effectivement, il manquait le ‘k’ dnas l’exemple sur l’article, c’est corrigé (merci :p)
Pour l’erreur de division par zéro, ça correspond à la barre de progression qui se base sur le total des hôtes qu’il va interroger.
Si il te met division par zéro, cela veut dire que
($hostsview | ?{$_.runtime.PowerState -match "poweredOn"}).count)est égal à zero, bizarre…Essaye de faire un source du script (en mettant . .\hba-infos.ps1) et essaye de voir ce que contient la valeur $hostsview.
Cette valeur devrait contenir :
$hostsview = Get-View -ViewType HostSystem -Property ("runtime", "name", "config", "hardware")Regarde et tiens moi au courant :p
Je pense savoir pourquoi, c’est certainement lié… L’hôte sur lequel je test ne possède pas de HBA connectées… T_T