PowerShell: HP iLO skripten Teil 1

Bild des Benutzers Thomas Franke

Ich war schon immer ein Freund von HP Servern. Im Gegensatz zu den Produkten anderer Hersteller sind Hardware, Software und Verwaltung einfach besser durchdacht. Das macht einem das Leben an vielen Stellen einfacher und rechtfertigt meiner Meinung nach den durchaus vorhandenen Preisunterschied.

In einem Projekt meines aktuellen Kunden wurde gerade eine Reihe Proliant DL 360p und 380p Gen 8 Server angeschafft. Ein Kollege brachte mich auf die Idee, die Einrichtung der iLO Boards zu scripten.

Danke Ralf! Smiley

Vorbereitung

Vor Kurzem hat HP die HP Scripting Tools für Windows PowerShell veröffentlicht. Voraussetzung für die Installation sind das Microsoft Management Framework 3.0 sowie .Net Framework 4.0.

Im Rahmen der Installation wird allerdings der PowerShell Modulpfad nicht angepasst. Als Folge stehen in der PowerShell das neue Modul und die darin enthaltenen Cmdlets zunächst nicht zur Verfügung. Das lässt sich mit dem folgenden Befehl beheben:

$env:PSModulePath+=";$env:ProgramFiles\Hewlett-Packard\PowerShell\Modules"

Diese Änderung gilt nur für die aktuelle PowerShell-Session. Der Pfad lässt sich allerdings auch dauerhaft anpassen. Weil meine Skripte jedoch auf verschiedenen Rechnern ausgeführt werden, füge ich den Befehl einfach in alle meine HPiLO-Skripte ein.

Da das neue Modul jetzt zur Verfügung steht, können wir uns nun die darin enthaltenen Cmdlets anschauen. Das sind eine ganze Menge – nämlich 110 Stück – daher hier nur ein Auszug:

PS D:\Scripts> Get-Command *HPiLO*

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Function        Add-HPiLOProfile                                   HPiLOCmdlets
Function        Add-HPiLOSSORecord                                 HPiLOCmdlets
Function        Add-HPiLOUser                                      HPiLOCmdlets
Function        Clear-HPiLOAHSData                                 HPiLOCmdlets
Function        Clear-HPiLOEventLog                                HPiLOCmdlets
Function        Clear-HPiLOIML                                     HPiLOCmdlets
Function        Clear-HPiLOPowerOnTime                             HPiLOCmdlets
Function        Disable-HPiLOERSIRSConnection                      HPiLOCmdlets
Function        Disable-HPiLOSecurityMessage                       HPiLOCmdlets
Function        Dismount-HPiLOVirtualMedia                         HPiLOCmdlets
Function        Enable-HPiLOERSIRSConnection                       HPiLOCmdlets
Function        Enable-HPiLOFIPS                                   HPiLOCmdlets
Function        Enable-HPiLOSecurityMessage                        HPiLOCmdlets
Function        Find-HPiLO                                         HPiLOCmdlets
Function        Get-HPiLOAHSStatus                                 HPiLOCmdlets
Function        Get-HPiLOAssetTag                                  HPiLOCmdlets
[...]

Find-HPiLO

Als erste Aufgabe werden wir uns mit dem Finden von iLO-Boards beschäftigen. Das ist relativ einfach – wir müssen lediglich eine oder mehrere IP-Adressen angeben. Das Ergebnis sieht dann z. B. so aus:

PS D:\Scripts> Find-HPiLO 192.168.10.10-20


IP       : 192.168.10.10
SPN      : ProLiant DL360p Gen8
FWRI     : 1.32
PN       : Integrated Lights-Out 4 (iLO 4)
HOSTNAME : host983.hpilo.local

IP       : 192.168.10.11
SPN      : ProLiant DL360p Gen8
FWRI     : 1.32
PN       : Integrated Lights-Out 4 (iLO 4)
HOSTNAME : host152.hpilo.local

IP       : 192.168.10.13
SPN      : ProLiant DL360p Gen8
FWRI     : 1.32
PN       : Integrated Lights-Out 4 (iLO 4)
HOSTNAME : host952.hpilo.local

Grundsätzlich sind die Cmdlets für iLO 3- und iLO 4-Boards vorgesehen. Find-HPiLO findet darüber hinaus aber auch iLO 2-Boards. Mit den ermittelten Informationen erhalten wir einen ersten Überblick über die gefundenen Systeme.

Update: Auch iLO 1-Boards werden von Find-HPiLO erkannt. Das Cmdlet verfügt außerdem über einen Timeout-Parameter mit einem Defaultwert von 300 Millisekunden. Mittlerweile verwende ich einen Timeout von 1500 Millisekunden. Dies steigert die Zuverlässigkeit der Erkennung, insbesondere bei einer iLO-Anbindung mit weniger als 1 GBit/s.

Hostname != Hostname

Aber aufgepasst! In der Ausgabe von Find-HPiLO wird uns ein Hostname angezeigt. Diese Bezeichnung ist meiner Meinung nach unglücklich gewählt. Zum Einen handelt es sich um einen FQDN, also Hostname + DNS-Suffix. Zum Anderen wird hier gar nicht der Hostname des iLOs ausgelesen, sondern eine DNS-Abfrage für die jeweilige IP durchgeführt (Den tatsächlichen Hostnamen kann man über Get-HPiLONetworkSetting abfragen. Um die Verwirrung komplett zu machen heißt er dort “DNS-Name”.).

Finding iLOs

Unabhängig davon haben wir nun die Mittel um einen IP-Range scannen und alle darin enthaltenen iLO-Boards zu finden, richtig? Nope, leider nicht - das Cmdlet hat leider einen logischen Fehler:

Zunächst werden die einzelnen zu prüfenden IP-Adressen ermittelt. Anschließend versucht das Cmdlet Daten über eine http-Verbindung auszulesen. Tritt an dieser Stelle ein Fehler auf, wird davon ausgegangen, dass es sich nicht um ein iLO handelt. In der entsprechenden Try / Catch-Anweisung wird allerdings auch die bereits angesprochene DNS-Abfrage zu der IP-Adresse durchgeführt. Ist diese Adresse nicht im DNS registriert, tritt hier ebenfalls ein Fehler auf – und das Cmdlet meldet fälschlicherweise “No iLO”.

Um diesen Fehler zu beheben, öffnen wir im Modulpfad die Datei HPiLOCmdlets.psm1 und ersetzen folgende Zeile:

$dns = [System.Net.Dns]::GetHostEntry($iLOAddr)

durch diese Anweisungen:

try
{
    $dns = [System.Net.Dns]::GetHostEntry($iLOAddr)
}
catch
{
    $dns = @{Hostname = ""}
}

Wird nun ein iLO ohne DNS-Registrierung gefunden, werden die Daten wie gewohnt zurück gegeben. Lediglich der Hostname bleibt in diesem Fall leer.

Das habe ich gleich einmal bei meinem Kunden ausprobiert. Bereits im ersten Class-C-Netz konnte ich 4 iLO-Boards ermitteln, die das Original-Cmdlet “übersehen” hätte! Smiley

Gerne würde ich HP auf diesen Fehler hinweisen. Leider ist es mir bislang noch nicht gelungen einen entsprechenden Ansprechpartner zu finden. Eine Anfrage über das Kontaktformular ist bislang unbeantwortet geblieben. Fairerweise sollte ich aber erwähnen, das dies erst eine Woche her ist – vielleicht meldet sich HP ja noch.

Fazit

Die HP Scripting Tools für Windows PowerShell bieten einfache und umfangreiche Möglichkeiten für das Skripten von iLO-Boards. Heute haben wir uns mit dem (zuverlässigen) Ermitteln von iLOs in einem IP-Adressbereich beschäftigt.

Im nächsten Teil werden wir Konfigurationen auslesen und iLO-Reports erstellen.

Nächste Seite