StoreFront 软件开发工具包
Citrix StoreFront 提供了一个基于多个 Microsoft Windows PowerShell 2.0 版模块的 SDK。借助此 SDK,您可以执行与使用 StoreFront MMC 控制台相同的任务,以及仅使用控制台无法完成的任务。
注意:
PowerShell 软件开发工具包与 PowerShell 6 或更高版本不兼容。
有关 SDK 参考,请参阅 StoreFront 软件开发工具包。
使用 SDK
SDK 包含多个 PowerShell 管理单元,这些管理单元在您安装和配置各种 StoreFront 组件时由安装向导自动安装。
要访问和运行 cmdlet:
-
确保 StoreFront 管理控制台已关闭。
-
以管理员身份启动 PowerShell 命令行提示符或 Windows PowerShell 集成脚本环境。
您必须使用 StoreFront 服务器上本地管理员组的成员运行 shell 或脚本。
-
要在脚本中使用 SDK cmdlet,请将 PowerShell 中的执行策略设置为 RemoteSigned。有关 PowerShell 执行策略的详细信息,请参阅 Microsoft 文档。
SDK 入门
要创建脚本,请执行以下步骤:
- Take one of the provided SDK examples installed by StoreFront into the %ProgramFiles%\Citrix\Receiver StoreFront\PowerShellSDK\Examples folder.
- 为了帮助您自定义脚本,请查看示例脚本以了解每个部分的功能。有关更多信息,请参阅示例用例,其中详细解释了脚本的操作。
- 转换并调整示例脚本,以使其成为更易于使用的脚本。为此,请执行以下操作:
- 使用 PowerShell ISE 或类似工具编辑脚本。
- 使用变量来分配将要重用或修改的值。
- 删除任何不需要的命令。
- 请注意,StoreFront cmdlet 命令可以通过 STF 前缀进行识别。
- 使用 Get-Help cmdlet 并提供 cmdlet 名称和 -Full 参数,以获取有关特定命令的更多信息。
示例
注意:
创建脚本时,为确保始终获得最新的增强功能和修复,Citrix® 建议您遵循上述过程,而不是复制和粘贴示例脚本。
| 示例 | 功能描述 |
|---|---|
| 创建一个简单的部署 | 脚本:创建一个简单的部署,其中包含一个配置了单个 XenDesktop 服务器的 StoreFront 控制器。 |
| 创建一个远程访问部署 | 脚本:基于之前的脚本,为部署添加远程访问。 |
| 创建具有最佳启动网关的远程访问部署 | 脚本:基于之前的脚本,添加首选的最佳启动网关,以提供更好的用户体验。 |
示例:创建简单部署
以下示例展示了如何创建配置了一个 XenDesktop® 控制器的简单部署。
在开始之前,请务必遵循 SDK 入门 中详述的步骤。可以使用所述方法自定义此示例,以生成用于自动化 StoreFront 部署的脚本。
注意:
为确保您始终获得最新的增强功能和修复,Citrix 建议您遵循本文档中描述的步骤,而不是复制粘贴示例脚本。
了解脚本的运作方式
本节解释了 StoreFront 生成的脚本的每个部分的功能。这将有助于您自定义自己的脚本。
-
设置错误处理要求并导入所需的 StoreFront 模块。在较新版本的 PowerShell 中,不需要导入。
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--> -
Automates the virtual path of the authentication and Citrix Receiver for Web services based on the $StoreVirtualPath supplied. $StoreVirtualPath is equivalent to $StoreIISpath because Virtual paths are always the path in IIS. Therefore in PowerShell they have a value such as “/Citrix/Store”, “/Citrix/StoreWeb”, or “/Citrix/StoreAuth”.
\# Determine the Authentication and Receiver virtual path to use based of the Store $authenticationVirtualPath = "$($StoreIISPath.TrimEnd('/'))Auth" $receiverVirtualPath = "$($StoreVirtualPath.TrimEnd('/'))Web" <!--NeedCopy--> -
如果部署尚不存在,则创建新部署,以准备添加所需的 StoreFront 服务。-Confirm:$false 抑制了确认部署可以继续的要求。
\# 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--> -
如果在指定的虚拟路径上不存在身份验证服务,则创建新的身份验证服务。默认的用户名和密码身份验证方法已启用。
\# 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--> -
如果在指定的虚拟路径上不存在应用商店服务,则创建新的应用商店服务,该服务配置了一个 XenDesktop 控制器,其服务器定义在数组 $XenDesktopServers 中。
\# 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--> -
在指定的 IIS 虚拟路径添加一个 Citrix Receiver™ for Web 服务,以访问在上面创建的商店中发布的应用程序。
\# 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--> -
为商店启用 XenApp 服务,以便旧版 Citrix Receiver 或 Citrix Workspace 应用程序客户端可以连接到已发布的应用程序。
\# 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-->
示例:创建远程访问部署
以下示例基于之前的脚本,添加了一个带远程访问的部署。
在开始之前,请确保您已遵循 (/zh-cn/storefront/2402-ltsr/sdk-overview.html#get-started-with-the-sdk) 中详述的步骤。此示例可以使用所述方法进行自定义,以生成用于自动化 StoreFront 部署的脚本。
注意:
为确保您始终获得最新的增强功能和修复,Citrix 建议您遵循本文档中描述的步骤,而不是复制粘贴示例脚本。
了解脚本内容
本节解释了 StoreFront 生成的脚本的每个部分的作用。这将有助于您自定义自己的脚本。
-
设置错误处理要求并导入所需的 StoreFront 模块。在较新版本的 PowerShell 中不需要导入。
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--> -
通过调用之前的示例脚本创建内部访问 StoreFront 部署。基本部署将扩展以支持远程访问。
\# 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--> -
获取在简单部署中创建的服务,因为需要更新这些服务以支持远程访问场景。
\# 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--> -
Enables CitrixAGBasic on the Citrix Receiver for Web service required for remote access using Citrix Gateway. Get the Citrix Receiver for Web CitrixAGBasic and ExplicitForms authentication method from the supported protocols.
\# 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--> -
在身份验证服务上启用 CitrixAGBasic。这是远程访问所必需的。
\# 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--> -
添加新的远程访问网关,提供可选的子网 IP 地址,并将其注册到商店以进行远程访问。
\# 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-->
示例:创建具有最佳启动网关的远程访问部署
以下示例基于之前的脚本,添加了一个具有最佳启动网关远程访问的部署。
开始之前,请务必遵循 SDK 入门 中详述的步骤。可以使用所述方法自定义此示例,以生成用于自动化 StoreFront 部署的脚本。
注意:
为确保您始终获得最新的增强功能和修复,Citrix 建议您遵循本文档中描述的步骤,而不是复制粘贴示例脚本。
深入理解脚本
本节解释了 StoreFront 生成的脚本的每个部分的作用。这将有助于您自定义自己的脚本。
-
设置错误处理要求并导入所需的 StoreFront 模块。在较新版本的 PowerShell 中,不需要导入。
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--> -
对远程访问部署脚本进行调用,以配置基础部署并添加远程访问功能。
\# 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--> -
添加首选的最佳启动网关,并从已配置网关列表中获取它。
\# 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--> -
获取商店服务以使用最佳网关,并注册它,将其分配给来自指定场的启动。
\# 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-->