Ergänzend zu meinem letzten Artikel möchte ich in diesem Artikel zeigen, wie ein NetScaler für eine Citrix XenDesktop Umgebung vollständig automatisiert mit PowerShell bereitgestellt werden kann.
Ziel ist es, nicht nur die Basiskonfiguration des NetScaler durchzuführen, sondern auch das benötigte NetScaler Gateway sowie eventuell benötigte Load Balancing Server automatisch zu konfigurieren.
Die komplette Konfiguration erledigt ein PowerShell Skript, dass über die NITRO API die Konfiguration automatisch durchführt. Allerdings gibt es „noch“ ein paar kleine Einschränkungen.
- Unabhängig davon, ob es sich um eine VPX oder MPX handelt, muss der NetScaler erstmal mit einer NetScaler IP-Adresse (NSIP) bereitgestellt werden.
- Im StartUp Wizard des NetScaler muss eine gültige Lizenz installiert werden
- Um das benötigte SSL Zertifikat zu installieren, müssen natürlich die entsprechenden Dateien (Zertifikat, privater Schlüssel und Root Zertifikat) auf den NetScaler hochgeladen werden. Das machen wir zwar im Skript, für das entsprechende SSH PowerShell Modul ist das WMF 5 erforderlich.
- NetScaler Version muss 11.x sein (Build egal)
Vorbereitungen
Als erstes benötigen wir einen NetScaler, der bereits mit NSIP, Subnetmaske und Gateway konfiguriert wurde und eine gültige Lizenz besitzt. In diesem Artikel beispielsweise mit einer virtuellen VPX.
Auf dem Rechner, auf dem wir das PowerShell Skript ausführen, benötigen wir das Windows Management Framework 5. Das können wir in einer administrativen PowerShell Konsole mit dem folgenden Kommando überprüfen:
$PSVersionTable.PSVersion.Major
Ist die Version 5 ist alles in Ordnung, alles darunter benötigt die Installation von WMF 5.0.
Um auch Dateien per SSH auf den NetScaler kopieren zu können (Zertifikatsdateien), benötigen wir noch das PoSH-SSH Module. Normalerweise bekommen wir das Module aus der PowerShell Gallery. Mit dem folgendem Kommando können wir nach dem Modul suchen (eventuell werden von der PowerShell noch Repository Daten nachinstalliert):
Find-Module PoSH-SSH
Wurde das Module gefunden, wird es mit dem folgenden Kommando installiert:
Install-Module PoSH-SSH
Tatsächlich hatte ich auf einigen Windows Maschinen Probleme das Modul aus der PSGallery zu installieren. Wer einen alternativen Weg benötigt, kann sich das Modul direkt über GitHub bekommen. Mit dem folgenden Kommando wird dann das PoSH-SSH Modul direkt vom Entwickler heruntergeladen und installiert:
iex (New-Object Net.WebClient).DownloadString("https://gist.github.com/darkoperator/6152630/raw/c67de4f7cd780ba367cccbc2593f38d18ce6df89/instposhsshdev")
Was wir abschließend brauchen, ist natürlich ein Zertifikat. Dieses Zertifikat sollte im PEM Format mit einem Root Zertifikat und einem privaten Schlüssel vorliegen. Für die Arbeit mit Zertifikaten verwende ich gern das Tool XCA, was sowohl für Windows als auch für Macs kostenlos erhältlich ist. Das Skript setzt zwei Dateien (Zertifikat evtl. gleich mit Root Zertifikaten sowie den privaten Schlüssel) im Skript Verzeichnis voraus. Das kopieren der Dateien sowie das installieren des Zertifikats wird vom Skript durchgeführt. Im Skript habe ich sowohl ein öffentliches (extern für das Gateway) als auch ein privates Zertifikat (intern für das Load Balancing) vorgesehen.
Das Skript
Zeile 1 – 69: Erklärung der einzelnen Variablen
Zeile 71 – 102: Variablen (Achtung hier stehen Passwörter im Klartext)
Zeile 106 – 965: Alle benötigten Funktionen (hier sollte nichts geändert werden)
Zeile 967 – 1076: Das eigentlich Skript mit den Funktionsaufrufen
Das komplette Skript ist per GitHub verfügbar:
https://github.com/thomaskrampe/Citrix-PowerShell-Scripts/
Anregungen, Verbesserungsvorschläge, Kritik oder Mitarbeit gern hier als Kommentar oder per E-Mail.
Interessanter Ansatz im Labor wie ich finde. Im produktiven Umfeld installiert bzw. konfiguriert man aber seinen Netscaler nicht ständig neu. Macht es da tatsächlich Sinn, das mit PowerShell zu machen. geht doch über GUI oder CLI viel schneller?
Natürlich macht Automatisierung bei nur einem NetScaler keinen Sinn. Wer allerdings mehrere NetScaler zu installieren bzw. einen immer wieder (Lab-Umgebungen) dann macht es durchaus Sinn, dies zu automatisieren – auch im Hinblick auf Revisionssicherheit.