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

2 comments

  1. Pingback: [PSH] Liste des WorldWideName - Hypervisor.fr

Laisser un commentaire

Required fields are marked *.

*