StoreFront

StoreFront PowerShell-Module

Citrix StoreFront bietet eine Reihe von Microsoft Windows PowerShell Version 2.0-Modulen, die bei der Installation von StoreFront enthalten sind. Mit diesen Modulen können Sie dieselben Aufgaben ausführen wie mit der StoreFront-Verwaltungskonsole, sowie Aufgaben, die Sie mit der Konsole allein nicht erledigen können.

Hinweis:

Die StoreFront PowerShell-Module sind nicht mit PowerShell 6 oder höher kompatibel.

Eine Referenz zu den PowerShell-Modulen finden Sie in der StoreFront-Entwicklerdokumentation.

Erste Schritte

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

  2. Starten Sie eine PowerShell-Befehlszeile 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.

  3. Um Cmdlets innerhalb von Skripten zu verwenden, setzen Sie die Ausführungsrichtlinie in PowerShell auf RemoteSigned. Weitere Informationen zur PowerShell-Ausführungsrichtlinie finden Sie in der Microsoft-Dokumentation.

  4. Sie können die Beispielskripte als Ausgangspunkt verwenden.

  5. Verwenden Sie das Cmdlet Get-Help mit dem Cmdlet-Namen und dem Parameter -Full, um weitere Informationen zu einem bestimmten Befehl zu erhalten.

Virtueller Pfad

Cmdlets zum Abrufen oder Erstellen eines Stores, einer Website oder von Authentifizierungsdiensten verwenden einen Parameter VirtualPath. Dies ist der Pfad, unter dem die Anwendung in IIS gehostet wird. Der Store- und Website-Pfad kann auch in der StoreFront-Verwaltungskonsole gefunden werden. Typischerweise ist der Authentifizierungspfad konventionsgemäß derselbe wie der Store-Pfad mit dem Suffix Auth, und die Website ist derselbe wie der Store-Pfad mit dem Suffix Web. Beispiel: Für den virtuellen Store-Pfad /Citrix/Store hat der Authentifizierungsdienst den Pfad /Citrix/StoreAuth und die Website den Pfad /Citrix/StoreWeb.

Beispiel: Um einen Store-Dienst abzurufen, dessen Pfad /Citrix/Store ist, führen Sie den Befehl aus:

Get-STFStoreService -VirtualPath '/Citrix/Store'
<!--NeedCopy-->

Wenn Sie den VirtualPath weglassen, werden alle Dienste zurückgegeben. Wenn nur ein Dienst vorhanden ist, behandelt PowerShell diesen als einzelnes Objekt.

Site-ID

Einige Cmdlets enthalten einen Parameter SiteId. Wenn Sie mehrere Bereitstellungen auf demselben Server auf verschiedenen IIS-Sites haben, müssen Sie die SiteId angeben. Wenn Sie nur eine Site haben, ist der Parameter nicht erforderlich.

Beispielskripte

StoreFront enthält einige Beispielskripte, die sich im Ordner %ProgramFiles%\Citrix\Receiver StoreFront\PowerShellSDK\Examples befinden. Sie können diese als Vorlagen für die Erstellung Ihrer eigenen Skripte verwenden.

  • Verwenden Sie die PowerShell ISE, Visual Studio Code 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 Befehle, die nicht benötigt werden.
  • Beachten Sie, dass StoreFront-Cmdlets am Präfix STF erkennbar sind.
Beispiele Beschreibung
Einfache Bereitstellung erstellen Skript: Erstellt eine einfache Bereitstellung mit einem StoreFront-Controller, der mit einer einzelnen CVAD-Site 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.

Eine einfache Bereitstellung erstellen

Das folgende Beispiel zeigt, wie eine einfache Bereitstellung mit einer CVAD-Site konfiguriert wird.

Bevor Sie beginnen, stellen Sie sicher, dass Sie die unter Erste Schritte beschriebenen Schritte befolgen. Dieses Beispiel kann angepasst werden, um ein Skript zur Automatisierung der StoreFront-Bereitstellung zu erstellen.

Dieser Abschnitt erklärt, was jeder Teil des Skripts bewirkt. Dies wird Ihnen bei der Anpassung Ihres eigenen Skripts helfen.

  • Legt die Anforderungen für die Fehlerbehandlung fest und importiert die erforderlichen StoreFront-Module. In modernen PowerShell-Versionen sind Importe 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 gleichbedeutend mit 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 unter dem 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 einer Site (auch als Farm bezeichnet) konfiguriert ist, mit den im Array $XenDesktopServers definierten Servern unter dem 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 eine Website unter dem 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 unter Erste Schritte beschriebenen Schritte befolgen. Dieses Beispiel kann mit den beschriebenen Methoden angepasst werden, um ein Skript zur Automatisierung der StoreFront-Bereitstellung zu erstellen.

Dieser Abschnitt erklärt, was jeder Teil des von StoreFront erstellten Skripts bewirkt. Dies wird Ihnen bei der Anpassung Ihres eigenen Skripts helfen.

  • Legt die Anforderungen für die Fehlerbehandlung fest und importiert die erforderlichen StoreFront-Module. In modernen PowerShell-Versionen sind Importe 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-->
    
  • Erstellen Sie eine StoreFront-Bereitstellung mit internem Zugriff, indem Sie das Skript der vorherigen Beispiele aufrufen. 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 Dienste ab, die in der einfachen Bereitstellung erstellt wurden, 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. Rufen Sie die Authentifizierungsmethoden 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 wird, und registriert es beim 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: 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 unter Erste Schritte beschriebenen Schritte befolgen. Dieses Beispiel kann mit den beschriebenen Methoden angepasst werden, um ein Skript zur Automatisierung der StoreFront-Bereitstellung zu erstellen.

Das Skript verstehen

Dieser Abschnitt erklärt, was jeder Teil des von StoreFront erstellten Skripts bewirkt. Dies wird Ihnen bei der Anpassung Ihres eigenen Skripts helfen.

  • Legt die Anforderungen für die Fehlerbehandlung fest und importiert die erforderlichen StoreFront-Module. In modernen PowerShell-Versionen sind Importe 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 Site 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-->
    
StoreFront PowerShell-Module