StoreFront SDK
Citrix StoreFront bietet ein SDK, das auf einer Reihe von Microsoft Windows PowerShell Version 2.0 Modulen basiert. Mit dem SDK können Sie dieselben Aufgaben ausführen, die Sie auch mit der StoreFront MMC-Konsole erledigen würden, sowie Aufgaben, die Sie mit der Konsole allein nicht ausführen können.
Hinweis:
Das PowerShell SDK ist nicht mit PowerShell 6 oder höher kompatibel.
Die SDK-Referenz finden Sie unter StoreFront SDK.
Verwenden des SDK
Das SDK besteht aus einer Reihe von PowerShell-Snap-Ins, die vom Installationsassistenten automatisch installiert werden, wenn Sie verschiedene StoreFront-Komponenten installieren und konfigurieren.
So greifen Sie auf die Cmdlets zu und führen sie aus:
-
Stellen Sie sicher, dass die StoreFront-Verwaltungskonsole geschlossen ist.
-
Starten Sie eine PowerShell-Befehlszeilenaufforderung oder die Windows PowerShell ISE als Administrator.
Sie müssen die Shell oder das Skript als Mitglied der lokalen Administratorengruppe auf dem StoreFront-Server ausführen.
-
Um SDK-Cmdlets in Skripten zu verwenden, setzen Sie die Ausführungsrichtlinie in PowerShell auf
RemoteSigned. Weitere Informationen zur PowerShell-Ausführungsrichtlinie finden Sie in der Microsoft-Dokumentation.
Erste Schritte mit dem SDK
Führen Sie die folgenden Schritte aus, um ein Skript zu erstellen:
- Nehmen Sie eines der von StoreFront bereitgestellten SDK-Beispiele aus dem Ordner %ProgramFiles%\Citrix\Receiver StoreFront\PowerShellSDK\Examples.
- Um Ihr eigenes Skript anzupassen, überprüfen Sie das Beispielskript, um zu verstehen, was jeder Teil tut. Weitere Informationen finden Sie im Beispiel-Anwendungsfall, der die Aktionen des Skripts detailliert erklärt.
- Konvertieren und passen Sie die Beispielskripte an, um sie in ein besser nutzbares Skript umzuwandeln. Gehen Sie dazu wie folgt vor:
- Verwenden Sie die PowerShell ISE oder ein ähnliches Tool, um das Skript zu bearbeiten.
- Verwenden Sie Variablen, um Werte zuzuweisen, die wiederverwendet oder geändert werden sollen.
- Entfernen Sie alle nicht benötigten Befehle.
- Beachten Sie, dass StoreFront-Cmdlets am Präfix
STFerkennbar sind. - Verwenden Sie das Cmdlet Get-Help mit dem Cmdlet-Namen und dem Parameter -Full, um weitere Informationen zu einem bestimmten Befehl zu erhalten.
Beispiele
Hinweis:
Um sicherzustellen, dass Sie beim Erstellen eines Skripts immer die neuesten Verbesserungen und Korrekturen erhalten, empfiehlt Citrix®, das oben beschriebene Verfahren zu befolgen, anstatt die Beispielskripte zu kopieren und einzufügen.
| Beispiele | Beschreibung |
|---|---|
| Einfache Bereitstellung erstellen | Skript: Erstellt eine einfache Bereitstellung mit einem StoreFront-Controller, der mit einem einzelnen XenDesktop-Server konfiguriert ist. |
| Bereitstellung mit Remotezugriff erstellen | Skript: Baut auf dem vorherigen Skript auf, um der Bereitstellung Remotezugriff hinzuzufügen. |
| Bereitstellung mit Remotezugriff und optimalem Start-Gateway erstellen | Skript: Baut auf dem vorherigen Skript auf, um bevorzugte optimale Start-Gateways für eine bessere Benutzererfahrung hinzuzufügen. |
Beispiel: Eine einfache Bereitstellung erstellen
Das folgende Beispiel zeigt, wie eine einfache Bereitstellung mit einem XenDesktop®-Controller erstellt wird.
Bevor Sie beginnen, stellen Sie sicher, dass Sie die Schritte unter Erste Schritte mit dem SDK befolgt haben. Dieses Beispiel kann mit den beschriebenen Methoden angepasst werden, um ein Skript zur Automatisierung der StoreFront-Bereitstellung zu erstellen.
Hinweis:
Um sicherzustellen, dass Sie immer die neuesten Verbesserungen und Korrekturen erhalten, empfiehlt Citrix, das in diesem Dokument beschriebene Verfahren zu befolgen, anstatt das Beispielskript zu kopieren und einzufügen.
Das Skript verstehen
Dieser Abschnitt erklärt, was jeder Teil des von StoreFront erstellten Skripts tut. Dies wird Ihnen bei der Anpassung Ihres eigenen Skripts helfen.
-
Legt die Anforderungen für die Fehlerbehandlung fest und importiert die erforderlichen StoreFront-Module. Imports sind in neueren PowerShell-Versionen nicht erforderlich.
Param( [Parameter(Mandatory=$true)] [Uri]$HostbaseUrl, [long]$SiteId = 1, [ValidateSet("XenDesktop","XenApp","AppController","VDIinaBox")] [string]$Farmtype = "XenDesktop", [Parameter(Mandatory=$true)] [string[]]$FarmServers, [string]$StoreVirtualPath = "/Citrix/Store", [bool]$LoadbalanceServers = $false, [int]$Port = 80, [int]$SSLRelayPort = 443, [ValidateSet("HTTP","HTTPS","SSL")] [string]$TransportType = "HTTP" ) \# Import StoreFront modules. Required for versions of PowerShell earlier than 3.0 that do not support autoloading Import-Module Citrix.StoreFront Import-Module Citrix.StoreFront.Stores Import-Module Citrix.StoreFront.Authentication Import-Module Citrix.StoreFront.WebReceiver <!--NeedCopy--> -
Automatisiert den virtuellen Pfad der Authentifizierungs- und Citrix Receiver für Web-Dienste basierend auf dem bereitgestellten $StoreVirtualPath. $StoreVirtualPath ist äquivalent zu $StoreIISpath, da virtuelle Pfade immer der Pfad in IIS sind. Daher haben sie in PowerShell einen Wert wie “/Citrix/Store”, “/Citrix/StoreWeb” oder “/Citrix/StoreAuth”.
\# Determine the Authentication and Receiver virtual path to use based of the Store $authenticationVirtualPath = "$($StoreIISPath.TrimEnd('/'))Auth" $receiverVirtualPath = "$($StoreVirtualPath.TrimEnd('/'))Web" <!--NeedCopy--> -
Erstellt eine neue Bereitstellung, falls noch keine vorhanden ist, zur Vorbereitung auf das Hinzufügen der erforderlichen StoreFront-Dienste. -Confirm:$false unterdrückt die Anforderung, die Fortsetzung der Bereitstellung zu bestätigen.
\# Determine if the deployment already exists $existingDeployment = Get-STFDeployment if(-not $existingDeployment) { \# Install the required StoreFront components Add-STFDeployment -HostBaseUrl $HostbaseUrl -SiteId $SiteId -Confirm:$false } elseif($existingDeployment.HostbaseUrl -eq $HostbaseUrl) { \# The deployment exists but it is configured to the desired hostbase url Write-Output "A deployment has already been created with the specified hostbase url on this server and will be used." } else { Write-Error "A deployment has already been created on this server with a different host base url." } <!--NeedCopy--> -
Erstellt einen neuen Authentifizierungsdienst, falls keiner am angegebenen virtuellen Pfad existiert. Die Standardauthentifizierungsmethode Benutzername und Kennwort ist aktiviert.
\# Determine if the authentication service at the specified virtual path exists $authentication = Get-STFAuthenticationService -VirtualPath $authenticationVirtualPath if(-not $authentication) { \# Add an Authentication service using the IIS path of the Store appended with Auth $authentication = Add-STFAuthenticationService $authenticationVirtualPath } else { Write-Output "An Authentication service already exists at the specified virtual path and will be used." } <!--NeedCopy--> -
Erstellt den neuen Store-Dienst, der mit einem XenDesktop-Controller konfiguriert ist, mit den im Array $XenDesktopServers definierten Servern am angegebenen virtuellen Pfad, falls noch keiner existiert.
\# Determine if the store service at the specified virtual path exists $store = Get-STFStoreService -VirtualPath $StoreVirtualPath if(-not $store) { \# Add a Store that uses the new Authentication service configured to publish resources from the supplied servers $store = Add-STFStoreService -VirtualPath $StoreVirtualPath -AuthenticationService $authentication -FarmName $Farmtype -FarmType $Farmtype -Servers $FarmServers -LoadBalance $LoadbalanceServers \` -Port $Port -SSLRelayPort $SSLRelayPort -TransportType $TransportType } else { Write-Output "A Store service already exists at the specified virtual path and will be used. Farm and servers will be appended to this store." \# Get the number of farms configured in the store $farmCount = (Get-STFStoreFarmConfiguration $store).Farms.Count \# Append the farm to the store with a unique name Add-STFStoreFarm -StoreService $store -FarmName "Controller$($farmCount + 1)" -FarmType $Farmtype -Servers $FarmServers -LoadBalance $LoadbalanceServers -Port $Port \` -SSLRelayPort $SSLRelayPort -TransportType $TransportType } <!--NeedCopy--> -
Fügt einen Citrix Receiver™ für Web-Dienst am angegebenen virtuellen IIS-Pfad hinzu, um auf Anwendungen zuzugreifen, die im oben erstellten Store veröffentlicht wurden.
\# Determine if the receiver service at the specified virtual path exists $receiver = Get-STFWebReceiverService -VirtualPath $receiverVirtualPath if(-not $receiver) { \# Add a Receiver for Web site so users can access the applications and desktops in the published in the Store $receiver = Add-STFWebReceiverService -VirtualPath $receiverVirtualPath -StoreService $store } else { Write-Output "A Web Receiver service already exists at the specified virtual path and will be used." } <!--NeedCopy--> -
Aktiviert XenApp-Dienste für den Store, damit ältere Citrix Receiver- oder Citrix Workspace-App-Clients eine Verbindung zu veröffentlichten Anwendungen herstellen können.
\# Determine if PNA is configured for the Store service $storePnaSettings = Get-STFStorePna -StoreService $store if(-not $storePnaSettings.PnaEnabled) { \# Enable XenApp services on the store and make it the default for this server Enable-STFStorePna -StoreService $store -AllowUserPasswordChange -DefaultPnaService } <!--NeedCopy-->
Beispiel: Eine Bereitstellung mit Remotezugriff erstellen
Das folgende Beispiel baut auf dem vorherigen Skript auf, um eine Bereitstellung mit Remotezugriff hinzuzufügen.
Bevor Sie beginnen, stellen Sie sicher, dass Sie die Schritte unter Erste Schritte mit dem SDK befolgt haben. Dieses Beispiel kann mit den beschriebenen Methoden angepasst werden, um ein Skript zur Automatisierung der StoreFront-Bereitstellung zu erstellen.
Hinweis:
Um sicherzustellen, dass Sie immer die neuesten Verbesserungen und Korrekturen erhalten, empfiehlt Citrix, das in diesem Dokument beschriebene Verfahren zu befolgen, anstatt das Beispielskript zu kopieren und einzufügen.
Das Skript verstehen
Dieser Abschnitt erklärt, was jeder Teil des von StoreFront erstellten Skripts tut. Dies wird Ihnen bei der Anpassung Ihres eigenen Skripts helfen.
-
Legt die Anforderungen für die Fehlerbehandlung fest und importiert die erforderlichen StoreFront-Module. Imports sind in neueren PowerShell-Versionen nicht erforderlich.
Param( [Parameter(Mandatory=$true)] [Uri]$HostbaseUrl, [Parameter(Mandatory=$true)] [long]$SiteId = 1, [string]$Farmtype = "XenDesktop", [Parameter(Mandatory=$true)] [string[]]$FarmServers, [string]$StoreVirtualPath = "/Citrix/Store", [bool]$LoadbalanceServers = $false, [int]$Port = 80, [int]$SSLRelayPort = 443, [ValidateSet("HTTP","HTTPS","SSL")] [string]$TransportType = "HTTP", [Parameter(Mandatory=$true)] [Uri]$GatewayUrl, [Parameter(Mandatory=$true)] [Uri]$GatewayCallbackUrl, [Parameter(Mandatory=$true)] [string[]]$GatewaySTAUrls, [string]$GatewaySubnetIP, [Parameter(Mandatory=$true)] [string]$GatewayName ) Set-StrictMode -Version 2.0 \# Any failure is a terminating failure. $ErrorActionPreference = 'Stop' $ReportErrorShowStackTrace = $true $ReportErrorShowInnerException = $true \# Import StoreFront modules. Required for versions of PowerShell earlier than 3.0 that do not support autoloading Import-Module Citrix.StoreFront Import-Module Citrix.StoreFront.Stores Import-Module Citrix.StoreFront.Roaming <!--NeedCopy--> -
Erstellt eine StoreFront-Bereitstellung mit internem Zugriff, indem das Skript des vorherigen Beispiels aufgerufen wird. Die Basisbereitstellung wird erweitert, um Remotezugriff zu unterstützen.
\# Create a simple deployment by invoking the SimpleDeployment example $scriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent $scriptPath = Join-Path $scriptDirectory "SimpleDeployment.ps1" & $scriptPath -HostbaseUrl $HostbaseUrl -SiteId $SiteId -FarmServers $FarmServers -StoreVirtualPath $StoreVirtualPath -Farmtype $Farmtype \` -LoadbalanceServers $LoadbalanceServers -Port $Port -SSLRelayPort $SSLRelayPort -TransportType $TransportType <!--NeedCopy--> -
Ruft die in der einfachen Bereitstellung erstellten Dienste ab, da diese aktualisiert werden müssen, um das Remotezugriffsszenario zu unterstützen.
\# Determine the Authentication and Receiver sites based on the Store $store = Get-STFStoreService -VirtualPath $StoreVirtualPath $authentication = Get-STFAuthenticationService -StoreService $store $receiverForWeb = Get-STFWebReceiverService -StoreService $store <!--NeedCopy--> -
Aktiviert CitrixAGBasic für den Citrix Receiver für Web-Dienst, der für den Remotezugriff über Citrix Gateway erforderlich ist. Ruft die Authentifizierungsmethode CitrixAGBasic und ExplicitForms des Citrix Receiver für Web aus den unterstützten Protokollen ab.
\# Get the Citrix Receiver for Web CitrixAGBasic and ExplicitForms authentication method from the supported protocols \# Included for demonstration purposes as the protocol name can be used directly if known $receiverMethods = Get-STFWebReceiverAuthenticationMethodsAvailable | Where-Object { $_ -match "Explicit" -or $_ -match "CitrixAG" } \# Enable CitrixAGBasic in Receiver for Web (required for remote access) Set-STFWebReceiverService $receiverForWeb -AuthenticationMethods $receiverMethods <!--NeedCopy--> -
Aktiviert CitrixAGBasic für den Authentifizierungsdienst. Dies ist für den Remotezugriff erforderlich.
\# Get the CitrixAGBasic authentication method from the protocols installed. \# Included for demonstration purposes as the protocol name can be used directly if known $citrixAGBasic = Get-STFAuthenticationProtocolsAvailable | Where-Object { $_ -match "CitrixAGBasic" } \# Enable CitrixAGBasic in the Authentication service (required for remote access) Enable-STFAuthenticationServiceProtocol -AuthenticationService $authentication -Name $citrixAGBasic <!--NeedCopy--> -
Fügt ein neues Remotezugriffs-Gateway hinzu, wobei die optionale Subnetz-IP-Adresse angegeben und es beim Store für den Remotezugriff registriert wird.
\# Add a new Gateway used to access the new store remotely Add-STFRoamingGateway -Name "NetScaler10x" -LogonType Domain -Version Version10_0_69_4 -GatewayUrl $GatewayUrl ' \-CallbackUrl $GatewayCallbackUrl -SecureTicketAuthorityUrls $GatewaySTAUrls \# Get the new Gateway from the configuration (Add-STFRoamingGateway will return the new Gateway if -PassThru is supplied as a parameter) $gateway = Get-STFRoamingGateway -Name $GatewayName \# If the gateway subnet was provided then set it on the gateway object if($GatewaySubnetIP) { Set-STFRoamingGateway -Gateway $gateway -SubnetIPAddress $GatewaySubnetIP } \# Register the Gateway with the new Store Register-STFStoreGateway -Gateway $gateway -StoreService $store -DefaultGateway <!--NeedCopy-->
Beispiel: Eine Bereitstellung mit Remotezugriff und optimalem Start-Gateway erstellen
Das folgende Beispiel baut auf dem vorherigen Skript auf, um eine Bereitstellung mit Remotezugriff und optimalem Start-Gateway hinzuzufügen.
Bevor Sie beginnen, stellen Sie sicher, dass Sie die Schritte unter Erste Schritte mit dem SDK befolgt haben. Dieses Beispiel kann mit den beschriebenen Methoden angepasst werden, um ein Skript zur Automatisierung der StoreFront-Bereitstellung zu erstellen.
Hinweis:
Um sicherzustellen, dass Sie immer die neuesten Verbesserungen und Korrekturen erhalten, empfiehlt Citrix, das in diesem Dokument beschriebene Verfahren zu befolgen, anstatt das Beispielskript zu kopieren und einzufügen.
Das Skript verstehen
Dieser Abschnitt erklärt, was jeder Teil des von StoreFront erstellten Skripts tut. Dies wird Ihnen bei der Anpassung Ihres eigenen Skripts helfen.
-
Legt die Anforderungen für die Fehlerbehandlung fest und importiert die erforderlichen StoreFront-Module. Imports sind in neueren PowerShell-Versionen nicht erforderlich.
Param( [Parameter(Mandatory=$true)] [Uri]$HostbaseUrl, [long]$SiteId = 1, [string]$Farmtype = "XenDesktop", [Parameter(Mandatory=$true)] [string[]]$FarmServers, [string]$StoreVirtualPath = "/Citrix/Store", [bool]$LoadbalanceServers = $false, [int]$Port = 80, [int]$SSLRelayPort = 443, [ValidateSet("HTTP","HTTPS","SSL")] [string]$TransportType = "HTTP", [Parameter(Mandatory=$true)] [Uri]$GatewayUrl, [Parameter(Mandatory=$true)] [Uri]$GatewayCallbackUrl, [Parameter(Mandatory=$true)] [string[]]$GatewaySTAUrls, [string]$GatewaySubnetIP, [Parameter(Mandatory=$true)] [string]$GatewayName, [Parameter(Mandatory=$true)] [Uri]$OptimalGatewayUrl, [Parameter(Mandatory=$true)] [string[]]$OptimalGatewaySTAUrls, [Parameter(Mandatory=$true)] [string]$OptimalGatewayName ) Set-StrictMode -Version 2.0 \# Any failure is a terminating failure. $ErrorActionPreference = 'Stop' $ReportErrorShowStackTrace = $true $ReportErrorShowInnerException = $true \# Import StoreFront modules. Required for versions of PowerShell earlier than 3.0 that do not support autoloading Import-Module Citrix.StoreFront Import-Module Citrix.StoreFront.Stores Import-Module Citrix.StoreFront.Roaming <!--NeedCopy--> -
Ruft das Skript für die Remotezugriffs-Bereitstellung auf, um die grundlegende Bereitstellung zu konfigurieren und Remotezugriff hinzuzufügen.
\# Create a remote access deployment $scriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent $scriptPath = Join-Path $scriptDirectory "RemoteAccessDeployment.ps1" & $scriptPath -HostbaseUrl $HostbaseUrl -SiteId $SiteId -FarmServers $FarmServers -StoreVirtualPath $StoreVirtualPath -Farmtype $Farmtype \` -LoadbalanceServers $LoadbalanceServers -Port $Port -SSLRelayPort $SSLRelayPort -TransportType $TransportType \` -GatewayUrl $GatewayUrl -GatewayCallbackUrl $GatewayCallbackUrl -GatewaySTAUrls $GatewaySTAUrls -GatewayName $GatewayName <!--NeedCopy--> -
Fügt das bevorzugte optimale Start-Gateway hinzu und ruft es aus der Liste der konfigurierten Gateways ab.
\# Add a new Gateway used for remote HDX access to desktops and apps $gateway = Add-STFRoamingGateway -Name $OptimalGatewayName -LogonType UsedForHDXOnly -GatewayUrl $OptimalGatewayUrl -SecureTicketAuthorityUrls $OptimalGatewaySTAUrls -PassThru <!--NeedCopy--> -
Ruft den Store-Dienst ab, um das optimale Gateway zu verwenden, registriert es und weist es den Starts von der benannten Farm zu.
\# Get the Store configured by SimpleDeployment.ps1 $store = Get-STFStoreService -VirtualPath $StoreVirtualPath \# Register the Gateway with the new Store for launch against all of the farms (currently just one) $farmNames = @($store.FarmsConfiguration.Farms | foreach { $_.FarmName }) Register-STFStoreOptimalLaunchGateway -Gateway $gateway -StoreService $store -FarmName $farmNames <!--NeedCopy-->