Oh mon WWN, où es-tu ?
Nous avons eu besoin de récupérer rapidement et de manière automatique la liste des WWNs (Port Name et Node Name) de certains serveurs ESXi de notre vCenter.
Qui dit rapide et automatique dit PowerCLI ^_^ Nous avons donc fais un petit script sans grande ambition pour récupérer la liste des WWPN/WWNN par carte fibre sur une liste de serveurs ESXi.
Le script prend un seul paramètre, la liste des serveurs ESX, sous la forme d’un tableau du style (esx1",
esx2",esx3
)
Voici le script :
Function Get-WWNames {
<#
.SYNOPSIS
List the WWN for HBA card on ESX Servers
.DESCRIPTION
The function will display the list of world wide names
of fiber interfaces on esx(i) hosts. It display WWPN
and WWNN per hba card.
.NOTES
Authors: www.cloudydude.fr
.PARAMETER ESXHosts
List of ESX host (can be multiple)
.EXAMPLE
PS> Get-WWNames -ESXHosts ("esx1.fqdn.tld","esx2.fqdn.tld","esx3.fqdn.tld")
#>
param(
[Parameter(Mandatory=$true,HelpMessage="Liste des serveurs ESX ('esx1','esx2')")] [string[]] $ESXHosts
)
begin{
# Pour eviter les retour en warning/error
$ErrorActionPreference = "SilentlyContinue"
$WarningPreference = "SilentlyContinue"
}
process{
If ((Get-PSSnapin -Name "VMware.VimAutomation.Core" -ErrorAction SilentlyContinue | Measure-Object).count -eq 0) {
Add-PSSnapin -Name "VMware.VimAutomation.Core"
}
While ($credESX -eq $Null) {
$credESX = $host.ui.PromptForCredential("Informations de connexion", "Veuillez entrer les informations de connexion pour les serveurs ESX/ESXi.", "", "")
}
# Parcours des serveurs ESX
Foreach ($ESXHost in $ESXHosts) {
Write-Host -ForegroundColor Green "Serveur :" $ESXHost
$connESX = Connect-VIServer $ESXHost -Credential $credESX
# Vérification de la connexion
If ($connESX.IsConnected -ne $true) {
Write-Host -ForegroundColor Red "ERREUR DE CONNEXION"
} else {
# Récupération de la liste des cartes fibres
$fiberInterfaces = Get-View (Get-View (Get-VMHost -Name $ESXHost).ID).ConfigManager.StorageSystem
Foreach ($HBA in $fiberInterfaces.StorageDeviceInfo.HostBusAdapter) {
# Vérification du type de carte FC
If ($HBA -is [VMware.Vim.HostFibreChannelHba]) {
# Affichage en hexadecimal des WWPN/WWNN
$WWPN = "{0:x}" -f $HBA.PortWorldWideName
$WWNN = "{0:x}" -f $HBA.NodeWorldWideName
Write-Host $HBA.device "- WWPortName:" $WWPN "`tWWNodeName:" $WWNN
}
}
Disconnect-VIServer $ESXHost -Confirm:$false
}
}
}
}
Comme vous pouvez le voir, le script est en fait une fonction déclarée pour être utilisée comme un nouveau cmdlet. C’est à dire qu’une fois sourcé
via la commande suivante :
. Get-WWNames.ps1
Vous pourrez alors utiliser des commandes comme :
Get-Help Get-WWNames
Get-Help Get-WWNames -Detailed
Get-Help Get-WWNames -Examples
Edit : petite modification du script, merci à notre hypervisor national !
Edit bis : Hypervisor a fait une version améliorée en one-liner, allez-y voir, ça vaut le détour : [PSH] Liste des WorldWideName