Récupérer les Serveurs OffLines en powershell

Dans un premier temps, nous estimons que nous pouvons simplement comparer le résultat des cmdlet get-xeserver et get-xaserver -Online. Cependant, sur de grands environnements, ces deux énumération peuvent être très longue.

PS C:\> $startTime = get-date; diff (Get-XAZone | Get-XAServer -Online) (Get-XAServer ); $elapsedTime = new-timespan $StartTime $(get-date)
PS C:\> $elapsedTime

Days              : 0
Hours             : 0
Minutes           : 4
Seconds           : 53
Milliseconds      : 753
(...)

Il existe donc des méthodes alternatives. Nous pouvons vérifier si le serveur répond à un simple ping, via l’objet System.Net.Networkinformation.ping. En effet, il suffit d’utiliser la méthode Send et ensuite de vérifier le statut.

$ping = New-Object System.Net.Networkinformation.ping
$result = $ping.send($IPAddress)
if($result.Status -ne "Success" ) { $_.ServerName }

Toutefois, le résultat d’un ping  peut être faux, par exemple si l’ICMP est bloqué par le pare feu ou encore si l’ICA ne tourne pas alors que le serveur est allumé. Heureusement pour nous, powershell nous fournit aussi l’objet System.Net.Sockets.TCPClient, qui va nous permettre de tester le serveur en essayant d’ouvrir un socket vers un port, par exemple le port IMA 2512. Si la connexion échoue l’objet renvoie une exception, et la propriété Connected est à $false.

$tcpClient = New-Object System.Net.Sockets.TCPClient
try {
	$tcpClient.connect($IPADDRESS,2512)
}catch{
	$_.ServerName
}
$tcpClient.Close()
$tcpClient = $null #Necessaire si on veux réutiliser l'objet $tcpClient.

La vérification des serveurs OffLine est donc plus rapide en utilisant l’objet TCPCLient

PS C:\> $starttime = get-date; get-xaserver |% { $tcpClient = New-Object System.Net.Sockets.TCPClient; try {$tcpClient.connect($_.IPAddresses[0],2512);}catch{$_.ServerName };$tcpClient.Close(); $tcpClient = $null }; $elapsedTime = new-timespan $StartTime $(get-date)
PS C:\> $elapsedtime

Days              : 0
Hours             : 0
Minutes           : 2
Seconds           : 2
Milliseconds      : 158
(...)

CHANGELOG

20/12/2012 – Utilisation du port IMA 2512 à la place du port ICA 1494 suite aux remarques de ctxblog

Leave a Reply

Your email address will not be published. Required fields are marked *