Wenn ich Citrix Virtual Apps and Desktops (CVAD)-Umgebungen von Kunden kontrolliere oder anderweitig damit arbeite, verwende ich oft die PowerShell-Konsole und -Scripte, um die notwendigen Informationen abzurufen und Aktionen auszuführen. Meiner Erfahrung nach geht es so einfacher und schneller, als wenn ich die unterschiedlichen Citrix- oder Microsoft-Konsolen für die verschiedenen Vorgänge nutze. In diesem Beitrag zeige ich Ihnen einige der Befehle und Parameter, die ich dafür nutze.
Das Schöne an PowerShell ist: sobald Sie wissen, wie Sie mit einem Objekttyp, der von einer PowerShell-Funktion oder einem Cmdlet zurückgegeben wird, filtern, sortieren, anzeigen usw. können Sie dieses Wissen verwenden, um mit praktisch jedem anderen Cmdlet von jedem anderen Anbieter zu arbeiten – die manchmal steile Lernkurve lohnt sich!
In einer CVAD-Umgebung benötigen wir die CVAD PowerShell-Cmdlets, die bei der Installation von Citrix Studio installiert werden. Die msi-Installationsdateien für diese Cmdlets sind außerdem separat auf der CVAD-Installations-ISO vorhanden, sodass sie auf Wunsch auch ohne Studio installiert werden können.
Normalerweise installiere ich die Cmdlets auf einer „Jump Box“ und nicht direkt auf einem Delivery Controller, da dies Ressourcen- und Stabilitätsprobleme mit sich bringen kann („Ups, ich habe den falschen Rechner neu gestartet“, hat natürlich noch kein Admin gesagt).
Der einfachste Weg, die benötigten Cmdlets zu erhalten, ist, einfach alles zu laden. Ich würde jedoch vor allem im Rahmen eines Scripts empfehlen, nur die Module hinzuzufügen, die Sie tatsächlich benötigen (über Get-Command können Sie herausfinden, in welchem Modul sich ein bestimmtes Cmdlet befindet). In 1912 LTSR und höher führen wir Folgendes aus:
Import-Module -Name Citrix*
(oder kurz ipmo Citrix*, wobei „ipmo“ das Alias für „Import-Module“ ist).
Für frühere Versionen, in denen keine Module verfügbar waren, führen wir Folgendes aus
Add-PSSnapin -Name Citrix*
(kurz: asnp Citrix*, wobei „asnp“ das Alias für „Add-PSSnapin“ ist)
Beachten Sie, dass Sie bei Verwendung der Citrix Cloud das Remote PowerShell SDK verwenden müssen und nicht Studio oder die MSIs aus der CVAD-ISO.
Eine weitere Sache, die Sie beachten, müssen wenn Sie das Ganze nicht auf einem Delivery Controller ausführen – wovon ich abrate – ist, dass Sie -AdminAddress an die CVAD-Cmdlets zusammen mit dem Namen/der Adresse eines Delivery Controllers übergeben müssen.
Wenn Sie Citrix Cloud verwenden, muss das Argument für -AdminAddress ein On-Premises-Cloud-Connector sein. Ich bin mir sicher, dass ich irgendwo in der Citrix-Dokumentation gelesen habe, dass Sie es nur einmal angeben müssen, aber ich hatte Probleme damit, also gebe ich es für jedes aufgerufene CVAD-Cmdlet an, wenn auch normalerweise über eine Hashtabelle mit der PowerShell-„Splatting“-Funktion. So kann ich es an einer Stelle ändern oder einen zusätzlichen allgemeinen Parameter hinzufügen, wenn ich es ändern muss.
Ein weiterer potenzieller Fallstrick könnte sein, dass die Citrix-Cmdlets standardmäßig nur 250 Datensätze zurückgeben. Wenn Sie also in einer großen Umgebung arbeiten, in Bezug auf Anwender, VDAs, Bereitstellungsgruppen usw., müssen Sie möglicherweise -MaxRecordCount einsetzen und eine ausreichend große Zahl eingeben, wie unten in Abbildung 1 gezeigt (denken Sie daran, dass Sie auch hier per Tabulator vervollständigen können, also geben Sie -max ein und drücken Sie die Tabulatortaste).
Noch ein Hinweis: In einigen der Beispiele verwende ich eine Variable vom Typ String namens „ddc“, die ich als einen der Delivery Controller festgelegt habe, damit ich dessen Namen in den Screenshots nicht preisgebe.
Im folgenden Abschnitt finden Sie einige abfragen, die für die Fehlerbehebung in CVAD hilfreich sein können, wobei Sie beachten sollten, dass die meisten mit Get-Broker beginnen. Um zu sehen, welche Cmdlets verfügbar sind, können Sie Folgendes ausführen
Get-Command Get-Broker*
Führen Sie die obige Abfrage über Out-GridView (alias ogv) aus, um die Ausgabe in einer praktischen, filterbaren und sortierbaren Tabelle anzuzeigen.
Alternativ können Sie Get-Broker eingeben und entweder die Tabulatortaste drücken, um die Liste der Befehle zu durchlaufen, oder die Tastenkombination Strg+Leertaste drücken, um eine mit dem Cursor auswählbare Liste anzuzeigen, wie sie in Abbildung 2 zu sehen ist.
Sie können auch das Get-Help mit den optionalen Parametern ShowWindow oder -OnLine verwenden, um weitere Details und Beispiele für die Verwendung anzuzeigen.
Get-BrokerSession -AdminAddress $ddc -MaxRecordCount 10000 | measure | select count
Get-BrokerSession @commonCVADparameters | Group-Object -Property SessionState
The “Connected” state is where there is a logon in progress.
Der Zustand „Verbunden“ bedeutet, dass eine Anmeldung stattfindet.
$activeSessions = Get-BrokerSession @commonCVADparameters -SessionState Active
$activeSessions|where IdleDuration -gt "00:30:00" | select machinename,username,client*,starttime,idle* | Out-GridView
Beachten Sie auch, dass wir im Cmdlet selbst filtern (-SessionState), wo möglich, und nicht über die Pipeline durch Where-Object (Alias where oder ?), da dies schneller geht, als wenn Where-Object die gesamte Ergebnismenge abzurufen und erst dann zu filtern.
Das Ergebnis dieser Abfrage sehen Sie in Abbildung 4:
Get-BrokerSession -UserName guyrleechbillybob @commonCVADparameters | select machinename,client*,DesktopGroupNam
Get-BrokerMachine -InMaintenanceMode $false -RegistrationState Registered @commonCVADparameters | group DesktopGroupName|select count,name|sort count
Get-BrokerMachine @commonCVADparameters | Sort SessionCount -Descending | select -first 10 machinename, sessioncount, DesktopGroupName, last* | Out-GridView
Get-BrokerDesktopGroup | select Name,Desktop*,Enabled,InMaintenanceMode,Total* | ogv -PassThru
Beachten Sie die Verwendung von -PassThru zu Out-GridView, wodurch die ausgewählten Elemente in der Grid-Ansicht durch Drücken von „OK“ dort verfügbar gemacht werden, von wo aus das Cmdlet aufgerufen wurde.
Alternativ können sie über Set-ClipBoard (Alias scb) weitergegeben werden, sodass die Daten in Notepad, eine E-Mail, OneNote, Änderungskontrollnotizen usw. eingefügt werden können.
In den meisten Fällen können wir die Ergebnisse aus den vorherigen Abfragen über die Pipeline in Cmdlets einfügen, um Aktionen durchzuführen. Stellen Sie jedoch sicher, dass Sie die Auswirkungen der Aktion kennen, die Sie durchführen, und dass Sie sie nur auf ausgewählten Sitzungen/Benutzern, Maschinen usw. anwenden, anstatt z. B. alle 5000+ aktuellen Sitzungen abzumelden und nicht nur den einen Benutzer, der ein Problem hat!
Set-BrokerMachine -MachineName GUYRLEECH\GLXA19PVS41 -InMaintenanceMode $true
Man kann auch die Ergebnisse von Get-BrokerMachine in Set-BrokerMachine einspeisen.
Sie können sogar eine benutzerdefinierte Benachrichtigung über Send-BrokerSessionMessage erstellen, wie in Abbildung 10 zu sehen ist.
Get-BrokerSession -MachineName GUYRLEECH\GLXA19PVS41 @commonCVADparameters | Send-BrokerSessionMessage -Title "Message from Guy Leech" -MessageStyle Critical -Text "Please logoff & back on as an urgent reboot is required"
Beachten Sie, dass die Anwender hierdurch weder aufgefordert werden noch eine Nachfrist erhalten, also stellen Sie sicher, dass sie die Abmeldung ihrer Sitzung erwarten!
Get-BrokerSession -UserName guyrleechbillybob @commonCVADparameters | Stop-BrokerSession
Wie oben, wird der Anwender weder aufgefordert, noch erhält er eine Karenzzeit.