preloader
23 December 2010 / #Powercli #Vsphere

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)

GetWWNames01

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

GetWWNames02

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


> Frederic MARTIN