Skip to the main content.

ScriptRunner Blog

Eine Einführung in PowerShell in Citrix Virtual Apps and Desktops

Inhaltsverzeichnis

Post Featured Image

CITRIX und PowerShell sind beides prominente Namen, wenn es um das Management komplexer IT-Infrastrukturen geht. Da ist es nicht überraschend, dass sie sich gegenseitig perfekt ergänzen um den Handlungsspielraum von IT-Pros zu erweitern.

So lassen sich beim Management von Citrix Virtual Apps and Desktops bestimmte Funktionen aus Citrix Studio mit PowerShell noch genauer und auf mehreren Zielen gleichzeitig anwenden.

Im Artikel finden Sie weitere Beispiele, wie Sie durch Einsatz von PowerShell beim CVDA-Management Zeit und Aufwand sparen können.

 

Warum PowerShell für das CVAD-Management verwenden?

Ich habe stets eine PowerShell-Konsole offen, in der ich die Citrix-Cmdlets parat habe (siehe weiter unten) und in der ich den Zustand der Citrix-Umgebung schnell mit nur einem Befehl anzeigen lassen kann.

Wenn ich diesen Befehl schon einmal ausgeführt habe, kann ich ihn schnell in meinem Verlauf finden (über Strg + r), sodass ich mir nicht einmal merken muss, welche Parameter ich verwenden oder was ich eingeben muss.

Dabei kann es sich z.B. um die Suche nach überlasteten Servern, unterbrochenen Sitzungen, die nicht zurückgesetzt wurden (um sie dann in der Folge zurückzusetzen), unerwartet im Wartungsmodus befindlichen oder nicht registrierten Servern usw. handeln.

Ein weiterer Grund ist die Automatisierung. Ich hatte zum Beispiel ein Kundenproblem, bei dem ein bestimmtes Ereignis im lokalen Eventprotokoll auf einem CVAD-Server dazu führte, dass sich der Druckspooler in einem Zustand befand, der bis zu einem Neustart nicht mehr behoben werden konnte, wodurch jede Anwendung, die zu drucken versuchte, hängen blieb.

Als kurzfristige Maßnahme habe ich ein Script geschrieben, das regelmäßig als zeitlich geplanter Task lief, um auf dieses Ereignis zu prüfen. Im Falle, dass das Ereignis eingetroffen war, würde das Script den Server in den Wartungsmodus versetzen, um neue Anmeldungen zu verhindern, und den Anwendern mitteilen, dass sie sich abmelden und wieder anmelden sollten, um auf einen nicht betroffenen Server zuzugreifen.

Im Anschluss würde das Script prüfen, ob Anwender auf Servern vorhanden sind, auf denen das Problem auftritt, und wenn dies nicht der Fall wäre, würde es den Wartungsmodus beenden und  den oder die Server neu starten.

 

Voraussetzungen

Die erste Entscheidung besteht darin, ob Sie eine lokale oder eine Cloud-Infrastruktur verwalten müssen, da diese unterschiedliche PowerShell-Module erfordern, die nicht auf demselben Rechner koexistieren können. Glücklicherweise sind die meisten Befehle zwischen beiden Versionen identisch, sodass es, sehr einfach ist, zwischen den Versionen zu wechseln.

Die erforderlichen PowerShell-Cmdlets für die On-Prem-Version werden bei der Installation von Citrix Studio installiert. Es wird jedoch nicht empfohlen, Verwaltungskonsolen oder Tools auf Delivery-Controllern auszuführen, da dies Ressourcen verbraucht, die dann für ihre primäre Rolle nicht verfügbar sind.

Daher ist es am einfachsten, die erforderlichen PowerShell-Cmdlets für die On-Prem-Installation zu installieren, indem Citrix Studio von der CVAD-ISO aus auf einem anderen Computer installiert wird, z. B. einem Managementserver, auf dem alle Konsolen installiert sind.

Wenn Sie Citrix Studio nicht installieren möchten, gibt es eine alternative Möglichkeit. Mounten Sie die CVAD-ISO und führen Sie folgenden Befehl aus dem X64Citrix Desktop Delivery Controller-Ordner der gemounteten ISO-Datei heraus in einer PowerShell-Sitzung mit erhöhten Rechten aus:

 

Die für Citrix Cloud erforderlichen PowerShell-Cmdlets sind im Citrix Virtual Apps and Desktops Remote PowerShell SDK verfügbar.

Diese Webseite enthält auch Informationen über die zusätzlich erforderliche Authentifizierung. Die Cmdlets dürfen nicht auf einer Maschine installiert werden, auf der die On-Prem-PowerShell-Komponenten installiert sind.

Es empfiehlt sich, die Version der PowerShell-Cmdlets an die (Mindest-)Version von CVAD anzupassen, die Sie installiert haben, genau wie bei Citrix Studio.

Welche Version von Windows PowerShell Sie verwenden, ist Ihnen überlassen, da alles zwischen 2.0 und 5.1 funktioniert, obwohl ich empfehlen würde, 5.1 zu installieren, da es die meisten Cmdlets und somit die meisten Funktionen bietet.

 

Vorbereitung

Um die CVAD-Cmdlets verwenden zu können, müssen wir die PowerShell-Module laden, in denen sie sich befinden. Mit Ausnahme der letzten Versionen hat Citrix diese Cmdlets in PowerShell-Snapins statt in Module eingefügt, was bedeutet, dass wir sie auf eine etwas andere Weise laden als gewohnt.

Um alle Citrix-Cmdlets aus dem Snapin zu laden, können wir dies ausführen:

Dies kann jedoch eine beträchtliche Zeit in Anspruch nehmen, da jedes verfügbare Cmdlet geladen wird, während Sie möglicherweise nur ein einzelnes Snapin benötigen. Wenn Sie z. B. Get-BrokerMachine und zugehörige Cmdlets zum Abrufen von CVAD-Rechnern verwenden, können Sie stattdessen diesen Befehl ausführen, was wesentlich schneller geht:

Um herauszufinden, in welchem Snapin sich ein bestimmtes Cmdlet befindet, laden Sie alle Citrix-Snapins, wie zuvor gezeigt, und geben Sie das Cmdlet dann als Argument für Get-Command an, woraufhin es Ihnen den Namen des Snapins mit dem Cmdlet mitteilt, das Sie stattdessen laden können.

Mit CVAD-Versionen ab 1912 LTSR können wir stattdessen Cmdlets aus Modulen laden, und zwar über Import-Module (alias ipmo) anstelle von Add-PSSnapin (alias asnp).

Auch hier gilt: Wir können alle Citrix-Module laden, indem wir „Citrix*“ in Import-Module angeben, oder nur einzelne Module, wiederum durch Laden aller Citrix-Module und anschließendes Verwenden von Get-Command auf den gewünschten Cmdlets, um zu sehen, in welchem Modul/welchen Modulen sie vorhanden sind.

Um meine Skripte sowohl auf neueren als auch auf älteren CVAD-Versionen kompatibel zu machen, verwende ich in der Regel etwas wie den unten gezeigten Code, welcher zuerst versucht, das erforderliche Citrix-Modul zu laden, und wenn das fehlschlägt, versucht, das entsprechende Snapin zu laden:


Abrufen von Informationen

Nachdem wir die erforderlichen Cmdlets installiert und geladen haben, können wir loslegen. Die Befehle, die ich hauptsächlich zum Abrufen von Informationen verwende, beginnen mit Get-Broker, wie z. B. Get-BrokerMachine, GetBrokerDesktopGroup (für Delivery Groups), Get-BrokerCatalog und Get-BrokerSession. Um alle Citrix-Cmdlets zum Abrufen von Informationen anzuzeigen, können Sie Folgendes ausführen:

Das funktioniert unabhängig davon, ob Sie Snapins oder Module verwenden. Um Hilfe zu einem bestimmten Befehl zu erhalten, führen Sie einfach Folgendes aus:

Sie könnten auch -ShowWindow durch -Online ersetzen, um ein Browserfenster mit der Hilfe zu öffnen, vorausgesetzt, Sie haben einen externen Internetzugang.

Ich muss jedoch nur selten ins Handbuch schauen, da die an die Cmdlets übergebenen Argumente im Allgemeinen gleich sind und Sie mit der Tabulatortaste oder durch Drücken von Strg + Leertaste nach Eingabe eines Minus/Dash nach dem Cmdlet-Namen alle möglichen Argumente auflisten können, durch die Sie mit den Cursortasten springen können.

Sehen wir uns also an, welche Maschinen wir in CVAD haben, indem wir Get-BrokerMachine ausführen (Abbildung 1):

Screenshot: PowerShell output from running Get-BrokerMachine

Abb. 1: PowerShell-Ausgabe bei Ausführung von Get-BrokerMachine

Das lief jetzt nicht so gut, oder? Wenn Sie dies auf einem Delivery Controller laufen lassen würden, was nicht zu empfehlen ist, würde es tatsächlich funktionieren und die Maschinen auflisten.

Ich habe dies jedoch auf einer VM ausgeführt, die zwar die Voraussetzungen erfüllt, aber kein Delivery Controller ist, sodass sie nicht weiß, an welchen Rechner (Delivery Controller) die Anforderung gesendet werden soll, weshalb sie standardmäßig den Localhost abfragt, was wiederum fehlschlägt, da es sich dabei nicht um einen Delivery Controller (oder Cloud Connector, wenn Sie Citrix Cloud verwenden) handelt.

Um den Cmdlets mitzuteilen, mit welchem Delivery Controller sie sich verbinden sollen, denn wir können uns mit verschiedenen Farmen/Instanzen von demselben Rechner aus verbinden (was mit Citrix Studio eher schwierig ist) verwenden wir das Argument -AdminAddress (siehe Abbildung 2):

Screenshot: PowerShell output from running Get-BrokerMachine with -AdminAddress argument

Abb. 2: PowerShell-Ausgabe vom Ausführen von „Get-BrokerMachine“ mit dem Argument „-AdminAddress“.

Aber das Ergebnis kann eine sehr lange Auflistung sein, die schwer zu verstehen ist. Wir können entweder einfach die Eigenschaften herausgreifen, an denen wir interessiert sind, indem wir die Liste manuell durchgehen (siehe Abbildung 3; Sie können die Eigenschaften, die an Select-Object (alias select) übergeben wurden, mit Tab vervollständigen). Oder, und das ist meine bevorzugte Variante, Sie können das Ergebnis durch die Pipeline an Out-GridView übergeben, wodurch eine Rasteransicht erzeugt wird, in der Sie die Daten weiter sortieren und filtern können (Abbildung 4).

 

Screenshot: PowerShell output from running Get-BrokerMachine, showing selected object properties

Abb. 3: Sie können bestimmte Eigenschaften anzeigen, indem Sie die Ausgabe von „Get-BrokerMachine“ an „Select-Object“ übergeben


Screenshot: PowerShell output from running Get-BrokerMachine in grid view

Abb. 4: Durch die Übergabe der Ausgabe von „Get-BrokerMachine“ an „Out-Gridview“ erhalten Sie einen klaren Überblick über die Daten

 


Dinge ändern

Ok, wir wissen, wie wir das meiste, was wir in Citrix Studio sehen, mit nur wenigen Get-Broker*-Cmdlets abfragen können, aber was, wenn wir etwas ändern möchten?

Wenn wir beispielsweise einige Maschinen in den Wartungsmodus versetzen möchten, können wir dies über ihre Namen, einschließlich eines Suchmusters, tun, indem wir (gefilterte) Ergebnisse von Get-BrokerMachine über die Pipeline übergeben oder eine oder mehrere zuvor von Get-BrokerMachine zurückgegebene Maschinen, die in einem Array gespeichert sind, an das Argument -InputObject von Set-BrokerMachine übergeben.

Screenshot: PowerShell command for configuring machines in CVAD

Abb. 5: Konfiguration von Maschinen in CVAD über PowerShell

Bitte vergewissern Sie sich, dass Sie wissen, was Sie erreichen wollen und was das Script tatsächlich tun wird – Sie können erkennen, dass es zum Beispiel sehr einfach wäre, jede Maschine in den Wartungsmodus zu versetzen, was für Ihre Anwender an einem Montagmorgen um 09: 00 Uhr vielleicht keine gute Nachricht wäre.

Wenn ich Scripte schreibe, die unerwünschte Aktionen ausführen könnten, verwende ich normalerweise den integrierten Sicherheitsmechanismus von PowerShell, bei dem ich die Befehle, die Dinge ändern, in einen $PSCmdlet.ShouldProcess-Block gemäß diesem Artikel einpacke.

Diese Scripte können immer noch ohne Benutzereingriff ausgeführt werden, indem Sie -Confirm:$false angeben.
Beachten Sie, dass wir -AdminAddress, sobald wir es einmal in einer Sitzung verwendet haben, nicht mehr angeben müssen.

 

PowerShell in Citrix Studio

Ich hoffe, dieser Artikel enthält genug Informationen, um Ihnen den Einstieg in PowerShell in CVAD zu erleichtern. Es gibt außerdem viele Script-Beispiele für alle möglichen Aufgaben, überprüfen Sie diese aber immer, bevor Sie sie in einer Produktionsumgebung ausführen, damit sie nicht versehentlich oder absichtlich Schaden anrichten. Hier kann eine isolierte Testumgebung von unschätzbarem Wert sein.

Gelegentlich kann es sein, dass es nicht offensichtlich ist, wie eine bestimmte Aufgabe, die Sie in Citrix Studio ausführen können, mit PowerShell ausgeführt werden kann.

In diesem Fall können Sie die Aktion in Citrix Studio ausführen, und wechseln dann zur Registerkarte „PowerShell“ wechseln, um das verwendete PowerShell-Cmdlet und die verwendeten Argumente anzuzeigen.

Screenshot: Content of the PowerShell Tab after executing an action in Citrix Studio

Abb. 6: Die PowerShell-Registerkarte in Citrix Studio zeigt das zur Ausführung einer Aktion verwendete PowerShell-Cmdlet an

Im obigen Beispiel können wir -BearerToken und -LoggingId ignorieren, da sie nicht erforderlich sind. Um die UID für den Katalog zu erhalten, zu dem das Gerät hinzugefügt werden soll, rufen wir Get-BrokerCatalog für den gewünschten Katalog auf:

Screenshot: PowerShell console displaying the simplified command for retrieving the UID of a catalog

Fig. 7: Simplified PowerShell command for retrieving the UID of a catalog

 
 

Fazit

Ich hoffe dieser Artikel hat Ihnen einige Ansätze und Ideen aufgezeigt, mit denen Sie sich die alltägliche Arbeit mit CVAD vereinfachen können.

Wenn Sie noch mehr über die Zusammenarbeit von CITRIX und PowerShell erfahren wollen, können Sie sich schon auf den nächsten Artikel freuen, in dem es um den Einsatz von PowerShell mit CITRIX Machine Creation Services (MCS) geht.

 
     

Kostenlose PowerShell-Scriptsammlung

download-4

ActionPack für Citrix

Mithilfe unseres neuen ScriptRunner ActionPacks für Citrix gelingt der Einstieg in die Task-Automation mit PowerShell jetzt noch schn

eller und einfacher!

200  gebrauchsfertige PowerShell-Scripte stehen ab sofort auf dem ScriptRunner GitHub Repository zur freien Verfügung.

Kostenlos auf GitHub downloaden >

     

Zusammenhängende Posts

2 min read

VMUG Webcast: VMware Management meistern mit PowerCLI

5 min read

PowerShell mit Get-Help meistern

Über den Autor: