StoreFront

StoreFront SDK

Citrix StoreFront bietet ein SDK, das auf Modulen von Windows PowerShell Version 2.0 beruht. Mit dem SDK können Sie die gleichen Tasks wie mit der Citrix StoreFront-MMC-Konsole ausführen und darüber hinaus weitere Tasks, die mit der Konsole allein nicht möglich sind.

Hinweis:

Das PowerShell SDK ist nicht mit PowerShell 6 oder höher kompatibel.

Die SDK-Referenz finden Sie unter StoreFront SDK.

Verwenden des SDKs

Das SDK enthält mehrere PowerShell-Snap-Ins, die automatisch vom Installationsassistenten installiert werden, wenn Sie verschiedene StoreFront-Komponenten installieren und konfigurieren.

Zugreifen auf die Cmdlets:

  1. Stellen Sie sicher, dass die StoreFront-Verwaltungskonsole geschlossen ist.

  2. Starten Sie eine PowerShell-Eingabeaufforderung oder Windows PowerShell ISE als Administrator.

    Zum Ausführen der Shell bzw. des Skripts müssen Sie als Mitglied der lokalen Administratorgruppe auf dem StoreFront-Server angemeldet sein.

  3. Legen Sie die Ausführungsrichtlinie in PowerShell mit RemoteSigned fest, um SDK-Cmdlets in Skripts zu verwenden. Weitere Informationen zur PowerShell-Ausführungsrichtlinie finden Sie in der Dokumentation von Microsoft.

Erste Schritte mit dem SDK

Führen Sie folgende Schritte für das Erstellen eines Skripts aus:

  1. Verwenden Sie eines der SDK-Beispiele, die zusammen mit StoreFront im Ordner %ProgramFiles%\Citrix\Receiver StoreFront\PowerShellSDK\Examples installiert wurden.
  2. Das Beispielsskript zeigt die Aufgaben der verschiedenen Teile und hilft Ihnen, Ihr eigenes Skript anzupassen. Weitere Informationen finden Sie im Beispiel eines Anwendungsfalls, in dem die Skriptaktionen ausführlich beschrieben werden.
  3. Passen Sie die Beispielskripts für Ihre Zwecke an. Gehen Sie hierzu folgendermaßen vor:
    • Verwenden Sie die PowerShell-ISE oder ein ähnliches Tool zum Bearbeiten des Skripts.
    • Verwenden Sie Variablen für Werte, die wiederverwendet oder geändert werden sollen.
    • Entfernen Sie alle Befehle, die nicht erforderlich sind.
    • StoreFront-Cmdlets können mit dem Präfix “STF” gekennzeichnet werden.
    • Verwenden Sie das Cmdlet Get-Help, geben Sie den Cmdlet-Namen und den Parameter -Full an, um Informationen zu einem bestimmten Befehl aufzurufen.

Beispiele

Hinweis:

Um beim Erstellen eines Skripts sicherzustellen, dass Sie immer die aktuellen Verbesserungen und Fixes erhalten, empfiehlt Citrix, dass Sie den oben erläuterten Schritten folgen, anstatt das Beispielskript zu kopieren und einzufügen.

Beispiele Beschreibung
Erstellen einer einfachen Bereitstellung Skript: erstellt eine einfache Bereitstellung mit einem StoreFront-Controller, der mit einem einzelnen XenDesktop-Server konfiguriert ist.
Erstellen einer Remotezugriffbereitstellung Skript: erstellt eine Bereitstellung wie im vorherigen Skript plus Remotezugriff.
Erstellen einer Remotezugriffbereitstellung mit Gateway für den optimalen Start Skript: erstellt eine Bereitstellung wie im vorherigen Skript und ermöglicht das Hinzufügen bevorzugter Gateways für den optimalen Start zur Verbesserung der Benutzererfahrung.

Beispiel: Erstellen einer einfachen Bereitstellung

Anhand des folgenden Beispiels wird die Erstellung einer einfachen Bereitstellung mit einem einzelnen XenDesktop-Controller erläutert.

Bevor Sie beginnen, stellen Sie sicher, dass Sie die in Erste Schritte mit dem SDK aufgeführten Schritte ausführen. Das Beispiel kann unter Verwendung der beschriebenen Methoden zur Erstellung eines Skripts für die Automatisierung der StoreFront-Bereitstellung angepasst werden.

Hinweis:

Um sicherzustellen, dass Sie immer die aktuellen Verbesserungen und Fixes erhalten, empfiehlt Citrix, dass Sie den in diesem Dokument beschriebenen Schritten folgen, anstatt das Beispielskript zu kopieren und einzufügen.

Inhalt des Skripts

In diesem Abschnitt wird die Funktion jedes Teils des Skripts erläutert, das StoreFront erstellt. Dies hilft Ihnen bei der Anpassung des eigenen Skripts.

  • Legt Fehlerbehandlungsanforderungen fest und importiert die erforderlichen StoreFront-Module. Importe sind in neueren Versionen von PowerShell 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 angegebenen $StoreVirtualPath. $StoreVirtualPath entspricht $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, sofern es noch keine gibt, zur Vorbereitung auf das Hinzufügen der erforderlichen StoreFront-Dienste. -Confirm:$false unterdrückt die Anforderung einer Bestätigung zum Fortfahren der Bereitstellung.

     # 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, sofern noch nicht vorhanden, einen neuen Authentifizierungsdienst an dem angegebenen virtuellen Pfad. Die Standardauthentifizierungsmethode mit Benutzernamen 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 einen neuen Storedienst mit einem XenDesktop-Controller und mit im Array $XenDesktopServers definierten Servern an dem angegebenen Pfad, sofern noch nicht vorhanden.

     # 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 an dem angegebenen virtuellen IIS-Pfad ein für den Zugriff auf Anwendungen, die in dem 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-/Citrix Workspace-App-Clients eine Verbindung mit 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: Erstellen einer Remotezugriffbereitstellung

Das folgende, auf dem vorherigen Skript aufbauende Beispiel dient zum Erstellen einer Bereitstellung mit Remotezugriff.

Bevor Sie beginnen, stellen Sie sicher, dass Sie die in Erste Schritte mit dem SDK aufgeführten Schritte ausführen. Das Beispiel kann unter Verwendung der beschriebenen Methoden zur Erstellung eines Skripts für die Automatisierung der StoreFront-Bereitstellung angepasst werden.

Hinweis:

Um sicherzustellen, dass Sie immer die aktuellen Verbesserungen und Fixes erhalten, empfiehlt Citrix, dass Sie den in diesem Dokument beschriebenen Schritten folgen, anstatt das Beispielskript zu kopieren und einzufügen.

Inhalt des Skripts

In diesem Abschnitt wird die Funktion jedes Teils des Skripts erläutert, das StoreFront erstellt. Dies hilft Ihnen bei der Anpassung des eigenen Skripts.

  • Legt Fehlerbehandlungsanforderungen fest und importiert die erforderlichen StoreFront-Module. Importe sind in neueren Versionen von PowerShell 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 unter Aufruf des vorherigen Beispielskripts. Die Basisbereitstellung wird um Unterstützung des Remotezugriffs erweitert.

     # 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 für die einfache Bereitstellung erstellten Dienste ab, da sie für die Unterstützung des Remotezugriffs aktualisiert werden müssen.

     # 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 in dem für Remotezugriff mit Citrix Gateway erforderlichen Citrix Receiver für Web-Dienst. Ruft die Citrix Receiver für Web CitrixAGBasic- und die ExplicitForms-Authentifizierungsmethode von 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 Remotezugriffsgateway hinzu sowie die optionale Subnetz-IP-Adresse, falls diese angegeben wird, und registriert es bei dem Store für den Remotezugriff.

     # 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: Erstellen einer Remotezugriffbereitstellung mit Gateway für den optimalen Start

Das folgende, auf dem vorherigen Skript aufbauende Beispiel dient zum Erstellen einer Bereitstellung mit Remotezugriff und Gateway für den optimalen Start.

Bevor Sie beginnen, stellen Sie sicher, dass Sie die in Erste Schritte mit dem SDK aufgeführten Schritte ausführen. Das Beispiel kann unter Verwendung der beschriebenen Methoden zur Erstellung eines Skripts für die Automatisierung der StoreFront-Bereitstellung angepasst werden.

Hinweis:

Um sicherzustellen, dass Sie immer die aktuellen Verbesserungen und Fixes erhalten, empfiehlt Citrix, dass Sie den in diesem Dokument beschriebenen Schritten folgen, anstatt das Beispielskript zu kopieren und einzufügen.

Inhalt des Skripts

In diesem Abschnitt wird die Funktion jedes Teils des Skripts erläutert, das StoreFront erstellt. Dies hilft Ihnen bei der Anpassung des eigenen Skripts.

  • Legt Fehlerbehandlungsanforderungen fest und importiert die erforderlichen StoreFront-Module. Importe sind in neueren Versionen von PowerShell 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 zur Erstellung einer Remotezugriffbereitstellung zum Konfigurieren der einfachen Bereitstellung mit Remotezugriff auf.

     # 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 Gateway für den optimalen Start 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-->
    
  • Bewirkt, dass der Storedienst das optimale Gateway verwendet und es für Startvorgänge aus der angegebenen Farm registriert.

     # 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-->
    
StoreFront SDK