Delivery Controller 2311 and Licensing

Last Modified: Mar 6, 2024 @ 3:45 am

Navigation

💡 = Recently Updated

Change Log

Upgrade

If you are performing a new install of Delivery Controller, then skip to the next section.

Starting in August 2018, XenApp and XenDesktop is renamed to Citrix Virtual Apps and Desktops (CVAD) and Versioning changed to YYMM (year month) format.

You can in-place upgrade directly from any Delivery Controller version 7.0 or newer. The operating system must be Windows Server 2016 or newer. And SQL must be SQL 2016 or newer.

During the upgrade of Delivery Controller, be aware that a database upgrade is required. Either get a DBA to grant you temporary sysadmin permission, or use Citrix Studio to generate SQL scripts that a DBA must then run in SQL Studio.

  1. CVAD Versions you can upgrade from – XenApp/XenDesktop 7.15 with CU5 or newer, CVAD 1912 with any Cumulative Update, any supported Current Release version.
  2. Virtual Channel Allow List – the Citrix Policy setting named Virtual Channel Allow List is enabled by default in VDA 2203 and newer. Whitelist your non-Citrix (e.g., Zoom) virtual channels before upgrading your VDAs, or else your non-Citrix virtual channels will stop working.
  3. NVIDIA – ensure your NVIDIA Virtual GPU software supports the version of CVAD that you are upgrading to.
  4. Consider Utilizing Local Host Cache for Nondisruptive Database Upgrades at Citrix Docs.
  5. License Server Upgrade – Before upgrading to Delivery Controller 2311, upgrade your Citrix License Server to 11.17.2.0 Build 46000. Citrix now requires Licensing telemetry as described in CTX477614 Citrix License Telemetry FAQ

    • Citrix now requires Licensing telemetry as described in CTX477614 Citrix License Telemetry FAQ. The build must be 40000 or newer and you must upgrade within 6 months of release.
    • You can run LicServVerify.exe from the Citrix Virtual Apps and Desktops (CVAD) ISO to verify that the License Server is compatible. Example syntax is: "E:\x64\XenDesktop Setup\LicServVerify.exe" -h myLicenseServer -p 27000 -v

  6. Current Release– Citrix Virtual Apps and Desktops (CVAD) 2311 is a Current Release, which means it is supported for only 6 months. For longer term support, deploy LTSR 2203. See Lifecycle Milestones for Citrix Virtual Apps & Citrix Virtual Apps and Desktops. See CTX205549 FAQ: Citrix Virtual Apps and Desktops and Citrix Hypervisor Long Term Service Release (LTSR).
  7. Delivery Controller OS Compatibility – Delivery Controller 2311 is supported on Windows Server 2022, Windows Server 2019 and Windows Server 2016.
  8. SQL Compatibility – Delivery Controller 2311 does not support several older database engines, including the previously included SQL 2014 LocalDB database engine for the Local Host Cache.
    • SQL Server 2022 is supported with Delivery Controller 2308 and newer.
    • SQL Server 2014, SQL Server 2012, and SQL Server 2008 R2, are no longer supported for the site database.
    • SQL Server Express LocalDB version 2014 is no longer supported for the local host cache database. The Delivery Controller installer does not upgrade this component, so you’ll have to do it manually. See Replace SQL Server Express LocalDB at Citrix Docs.
  9. VDA OS Compatibility – Virtual Delivery Agent (VDA) 2212 is only supported on a limited number of Windows operating system versions, specifically, Windows 10 (1607+), Windows Server 2016, Windows Server 2019, and Windows Server 2022.
    • For VDAs running Windows Server 2012 R2, leave their VDA at version 1912 LTSR (with latest Cumulative Update). VDA 1912 LTSR can communicate with Delivery Controllers 2311.
    • For VDA machines running Windows 7 or Windows Server 2008 R2, leave their VDA software at version 7.15 LTSR (with latest Cumulative Update). VDA 7.15 LTSR can communicate with Delivery Controllers 2311. Note that 7.15 is no longer supported by Citrix.
  10. Cloud VDAs support – Delivery Controller 2203 and newer support public cloud (native Azure, native AWS, native Google Cloud) hosting connections, but only if your Citrix licenses are Citrix Cloud licenses with Hybrid rights or Citrix Universal Licenses. Normal on-prem licenses won’t work. If you used cloud hosting connections in CVAD 1912, then you must upgrade your licenses before you upgrade to Delivery Controller 2311. See CTX270373 Citrix Virtual Apps and Desktops: Public cloud support with Current Releases and Long Term Service Releases.
  11. Snapshot. Take a snapshot of the Delivery Controller machine before attempting the upgrade. The Citrix installer requires a reboot before upgrading, so it’s probably best to shut down the machine before you snapshot it.
  12. Download the Citrix Virtual Apps and Desktops 7 2311 ISO.
  13. On an existing Delivery Controller, run AutoSelect.exe from the 2311 ISO.
  14. On the top left, in the Upgrade box, click Studio and Server Components.
  15. In the Licensing Agreement page, select I have read, understand, and accept the terms, and click Next.
  16. In the Ensure Successful Upgrade page, read the steps, check the box next to I’m ready to continue, and click Next.
  17. If you see the Unsupported Features and Platforms page, read the list, check the box next to I understand the risk of upgrading a deployment that has unsupported features or platforms, then click Next.
  18. If you see a Licensing Errors page, then you need to upgrade your License Server or install updated license file.

  19. If you see a SQL Server version error, then you might need to upgrade your SQL Server, or move the Citrix databases to a supported SQL server.
  20. If you see a SQL Server Express LocalDB version error, then click the Learn More link to see instructions to upgrade it.
  21. If you see a window saying “We cannot determine which SQL version is currently installed”, click OK.
  22. In the Preliminary Site Tests page, click Start Preliminary Tests.
  23. The tests will take a few minutes. Click Next when done.
  24. In the Firewall page, click Next.
  25. In the Summary page, click Upgrade. Notice that StoreFront is not in this list. StoreFront is upgraded separately.
  26. Click OK when asked to start the upgrade.
  27. The machine will probably restart a couple times.

    1. After the reboot, and after logging in again, you might see a Locate ‘Citrix Virtual Apps and Desktops 7’ installation media window. Don’t click anything yet.
    2. Go to the Citrix_Virtual_Apps_and_Desktops_7_2311.iso file and mount it.
    3. Go back to the Locate ‘Citrix Virtual Apps and Desktops 7’ installation media window.
    4. On the left, expand This PC, and click the DVD Drive.
    5. Click Select Folder.
  28. If the upgrade fails:
    1. Look for MetaInstaller log files under %localappdata%\Temp\Citrix\XenDesktop Installer\MSI Log Files.
    2. Look for StoreFront log files under C:\Program Files\Citrix\Receiver StoreFront\Admin\logs.
    3. Citrix has a MSI Log Analyzer.
  29. If you see a License Server Data page, click Next.
  30. In the Finish page, check the box next to Launch Citrix Site Manager, and click Finish.
  31. Web Studio and StoreFront – If you installed Web Studio and StoreFront on the same server, then see Citrix Docs to fix Web Studio.

Studio – Upgrade Database, Catalogs, and Delivery Groups

  1. After Site Manager or Citrix Studio launches, if you have sysadmin permissions on SQL, then click Start the automatic Site upgrade. If you don’t have full SQL permission, then get a DBA to help you, click Manually upgrade this site, and follow the instructions.


    • If you choose to Manually upgrade this site, then note that there might not be an upgrade for the Logging Database schema, depending on what version you are upgrading from.

    • Run the DisableServices.ps1 script before upgrading the database.
    • The .sql scripts must be run in SQLCMD mode. Re-enable SQLCMD mode for each script.
  2. After all Controllers and VDAs are upgraded to 2112, in Citrix Studio, view your Machine Catalog for the current functional level (Set to VDA version). Citrix Virtual Apps and Desktops (CVAD) 2112 lets you upgrade your Catalogs and Delivery Groups to functional level 2003 assuming all of the VDAs are running 2003 and newer.

    1. Don’t upgrade the Catalog or Delivery Group until all VDAs within the Catalog and Delivery Group are VDA version 2003 or newer.
    2. Right-click the Catalog and click Upgrade Catalog.
    3. Review the message regarding suitability of the upgrade and then click Upgrade.
    4. Then upgrade the Delivery Groups by right-clicking on a Delivery Group and clicking Upgrade Delivery Group.
    5. Review the suitability message and then click Upgrade.

CVAD 2212 and newer include Web Studio at https://ControllerFQDN/citrix/webstudio or from the Start Menu.

  • Citrix Site Manager is a reduced functionality version of Citrix Studio that is only for database connections or adding Delivery Controllers to the site/farm.

Other Citrix Virtual Apps and Desktops components can also be in-place upgraded:

New Install Preparation

Current Release

Citrix Virtual Apps and Desktops (CVAD) 2311 is a Current Release, which means it is supported for only 6 months. For longer term support, deploy LTSR 2203. See Lifecycle Milestones for Citrix Virtual Apps & Citrix Virtual Apps and Desktops. See CTX205549 FAQ: Citrix Virtual Apps and Desktops and Citrix Hypervisor Long Term Service Release (LTSR).

OS Compatibility

Delivery Controller 2311 is supported on Windows Server 2022, Windows Server 2019 and Windows Server 2016. Windows Server 2012 R2 and older are no longer supported.

Virtual Delivery Agent (VDA) 2311 is only supported on a limited number of Windows operating system versions, specifically, Windows 11, Windows 10 (1607+), Windows Server 2016, Windows Server 2019, and Windows Server 2022.

  • If you have older VDA machines running Windows Server 2012 R2, you can install VDA software version 1912 LTSR. Citrix supports VDA 1912 LTSR communicating with Delivery Controller 2311.
  • If you have older VDA machines running Windows 7 or Windows Server 2008 R2, you can install VDA software version 7.15 LTSR. Citrix supports VDA 7.15 LTSR communicating with Delivery Controller 2311.

Citrix Licensing

Upgrade your Citrix License Server to 11.17.2.0 build 46000.

  • Citrix now requires Licensing telemetry as described in CTX477614 Citrix License Telemetry FAQ. The build must be 40000 or newer and you must upgrade within 6 months of release.
  • You can run LicServVerify.exe from the Citrix Virtual Apps and Desktops (CVAD) ISO to verify that the License Server is compatible. Example syntax is: "E:\x64\XenDesktop Setup\LicServVerify.exe" -h myLicenseServer -p 27000 -v

Multiple License Types – Multiple license types (but not multiple editions) are supported in a single farm. See CTX223926 How to Configure Multiple License Types within a Single XenApp and XenDesktop Site.

Cloud VDAs support – Delivery Controller 2203 and newer support public cloud (native Azure, native AWS, native Google Cloud) hosting connections, but only if your Citrix licenses are Citrix Cloud licenses with Hybrid rights. Normal on-prem licenses won’t work. See CTX270373 Citrix Virtual Apps and Desktops: Public cloud support with Current Releases and Long Term Service Releases.

SQL Databases for Citrix Virtual Apps and Desktops

  • Citrix article CTX114501 – Supported Databases for Virtual Apps and Desktops (XenApp and XenDesktop) AND Provisioning (Provisioning Services)
    • SQL Server 2022 is supported with Delivery Controller 2308 and newer.
    • Citrix Virtual Apps and Desktops (CVAD) 2203 and newer no longer support SQL 2014 and older.
  • Citrix CTX209080 XenDesktop 7.x: Database Sizing Tool
  • Three databases – There are typically three databases: one for the Site (aka farm), one for Logging (audit log) and one for Monitoring (Director).
    • The name of the monitoring database must not have any spaces in it. See CTX200325 Database Naming Limitation when Citrix Director Accesses Monitoring Data Using OData APIs
    • If you want Citrix Studio to create the SQL databases automatically, then the person running Studio must be a sysadmin on the SQL instances. No lesser SQL role will work. sysadmin permissions can be granted temporarily and revoked after installation.
    • Alternatively, you can use Citrix Studio to create SQL scripts and then ask a DBA to run those scripts on the SQL server. In that case, the person running the scripts only needs the dbcreator and securityadmin roles.
    • It is possible to create the three databases in advance. However, you must use the non-default collation named Latin1_General_100_CI_AS_KS
  • SQL High Availability Options:
    • Basic Availability Groups – Build two SQL 2016 (or newer) Standard Edition servers, and create three Basic Availability Groups, one for each database. Each Basic Availability Group has its own Listener.
    • AlwaysOn Availability Group – Build two SQL Enterprise Edition servers, and create one AlwaysOn Availability Group with one Listener.
    • Failover Clustering – Build two SQL Enterprise Edition servers, and configure SQL Database Failover Clustering.
  • Cloud – Azure SQL is not supported. AWS RDS is supported by AWS, but not by Citrix. You’ll need to build your own SQL Servers on IaaS VMs.

Windows Feature

Installing Group Policy Management (GPMC) on the Delivery Controllers lets you edit Citrix-targeted Group Policy Objects (GPOs) directly from the Delivery Controllers.

Citrix has a Citrix Group Policy Management Plug-in that adds the Citrix Policies node to the Group Policy Editor. The Citrix Group Policy Management Plug-in is included with the installation of Citrix Studio, meaning that running GPMC on the Delivery Controller automatically grants you access to the Citrix Policies node in the GPOs. If you edit GPOs on a machine that doesn’t have Citrix Studio installed, then you won’t see the Citrix Policies node in GPOs until you manually install the Citrix Group Policy Management Plug-in.

vCenter Service Account

Create a role in vSphere Client. Assign a service account to the role at the vCenter Datacenter or higher level. Delivery Controller will use this service account to login to vCenter.

Delivery Controller New Install

  1. A typical size for the Controller VMs is 2-4 vCPU and 8+ GB of RAM. If all components (Delivery Controller, StoreFront, Licensing, Director, SQL Express) are installed on one server, then you might want to bump up memory to 10 GB or 12 GB. 5 GB is the minimum memory.
  2. From Local Host Cache sizing and scaling at Citrix Docs:
    1. Add two cores for LHC.
    2. For LHC SQL LocalDB, assign the Controller VMs a single CPU socket with multiple cores. SQL LocalDB uses a maximum of one CPU socket. Configure the Delivery Controller VM with four cores per socket.
    3. Add at least three more Gigs of RAM and watch the memory consumption.
    4. Since there’s no control over LHC election, ensure all Controllers in the site/farm have the same specs.
  3. Operating System: Citrix Virtual Apps and Desktops (CVAD) 2311 is supported on Windows Server 2022, Windows Server 2019 and Windows Server 2016. Windows Server 2012 R2 and older are no longer supported.
  4. Make sure the User Right Log on as a service includes NT SERVICE\ALL SERVICES or add NT SERVICE\CitrixTelemetryService to the User Right.
  5. Download the Citrix Virtual Apps and Desktops 7 2311 ISO.
  6. On two Delivery Controllers, to install the Delivery Controller software, run AutoSelect.exe from the mounted 2311 ISO.
  7. Click Start next to either Virtual Apps or Virtual Apps and Desktops. The only difference is the product name displayed in the installation wizard.
  8. On the top left, click Delivery Controller.
  9. In the Licensing Agreement page, select I have read, understand, and accept the terms, and click Next.
  10. In the Core Components page, you can install all components on one server, or on separate servers. Splitting out the components is only necessary in large environments, or if you have multiple farms and want to share the Licensing, and Director components across those farms. Notice that StoreFront is no longer an option and must be installed separately.
  11. CVAD 2212 and newer include Web Studio as an option. Studio is no longer selected by default. Citrix says that Web Studio and StoreFront should be installed on separate servers. Click Next.
  12. CVAD 2212 and newer let you add a Delivery Controller that Web Studio will manage.
  13. In the Features page, uncheck the box next to Install Microsoft SQL Server 2022 Express CU9, and click Next.
  14. In the Firewall page, click Next.
  15. In the Summary page, click Install.
  16. The machine will probably restart a couple times.

    1. After the reboot, and after logging in again, you might see a Locate ‘Citrix Virtual Apps and Desktops 7’ installation media window. Don’t click anything yet.
    2. Go to the Citrix_Virtual_Apps_and_Desktops_7_2311.iso file and mount it.
    3. Go back to the Locate ‘Citrix Virtual Apps and Desktops 7’ installation media window.
    4. On the left, expand This PC, and click the DVD Drive.
    5. Click Select Folder.
    6. Installation will resume. Repeat these instructions after each reboot.
  17. If you see a Diagnostics page, you can optionally Collect diagnostic information by clicking Connect and entering your Citrix Cloud or MyCitrix.com credentials. Click Next.
  18. In the Finish page, click Finish. Either Citrix Site Manager (CVAD 2212 or newer with Web Studio) or Citrix Studio will automatically launch.
  19. Web Studio and StoreFront – If you installed Web Studio and StoreFront on the same server, then see Citrix Docs to fix Web Studio.
  20. Anti-affinity – Ensure the two Delivery Controller VMs do not run on the same hypervisor host. Create an anti-affinity rule at vSphere Cluster > Manage > VM/Host Rules > Add. Set the Type to Separate Virtual Machines.
  21. Citrix Tech Zone Endpoint Security and Antivirus Best Practices: provides guidelines for configuring antivirus software in Citrix Virtual Apps and Desktops environments

Create Site – Create Database

There are several methods of creating the databases for Citrix Virtual Apps and Desktops (CVAD):

  • If you have sysadmin permissions to SQL, let Citrix Studio create the databases automatically.
  • If you don’t have sysadmin permissions to SQL, then use Citrix Studio to generate SQL scripts, and send the scripts to a DBA.

Use Citrix Site Manager or Citrix Studio to Create the Databases Automatically

  1. Launch Citrix Studio. After it loads, click Deliver applications and desktops to your users.

  2. In the Introduction page, select An empty, unconfigured site. This reduces the number of pages in this Setup wizard. The removed pages will be configured later.
  3. Enter a Site Name (aka farm name) and click Next. Only administrators see the farm name.
  4. In the Databases page, if you are building two Delivery Controllers, click Select near the bottom of the same page.

    1. Click Add.
    2. Enter the FQDN of the second Delivery Controller, and click OK. Note: the Delivery Controller software must already be installed on that second machine.
    3. Then click Save.
  5. If the person running Citrix Studio has sysadmin permissions to the SQL Server, then enter the SQL server name/instance in the three Location fields, and click Next.
  6. If you don’t have sysadmin permission, then jump to the SQL Scripts section below.
  7. On the Licensing page, enter the name of the Citrix License Server, and click Connect. If you installed Citrix Licensing with your Delivery Controller, then simply enter localhost.
  8. If the Certificate Authentication appears, select Connect me, and click Confirm.
  9. Select your license type, and click Next. If you see both User/Device and Concurrent, then you usually must select User/Device licenses. Also see Multi-type licensing at Citrix Docs.
  10. In the Summary page, if your databases are mirrored or in an Availability Group, each database will show high availability servers, and the name of the Mirror server. Click Finish.

  11. It will take some time for the site to be created.
  12. Once done, skip to the Second Delivery Controller section.

Use Citrix Studio to create SQL scripts

  1. If you don’t have SQL sysadmin permissions, then change the selection to Generate scripts to manually set up databases on the database server. Change the database names if desired, and click Next.
  2. In the Summary page, click Generate scripts.
  3. A folder will open with many scripts.
    • There’s a Principal script for each of the three databases.
    • The Mixed scripts and SysAdmin scripts create SQL Server logins whereas the DbOwner scripts do not. Either run the Mixed scripts that contain all tasks or run the SysAdmin and DbOwner scripts separately. The idea is that the separate scripts are run by different SQL admins that have different permissions.
    • The Replicas scripts add logons to secondary SQL servers.
  4. Before running the scripts, create the three databases.

    1. At the top of each script is the Database Name that was entered in Citrix Studio. The database name needs to match the script.
    2. On the Options tab, change the Collation to Latin1_General_100_CI_AS_KS.
    3. In the bottom part, find Is Read Committed Snapshot On and set it to True.
    4. Repeat this for all three databases.
    5. You can then add these three databases to an AlwasyOn Availability Group.
  5. Now do the following to run either the Mixed scripts or run the SysAdmin and DbOwner scripts separately. The scripts must be run in SQLCMD mode.
    1. On the Principal SQL Server, open the file Site_Mixed_Principal.sql.

    2. Open the Query menu, and click SQLCMD Mode to enable it.
    3. Then execute the script.
    4. If SQLCMD mode was enabled properly, then the output should look something like this:
    5. If you have a mirrored database, then run the Replicas script on the mirror SQL instance. Make sure SQLCMD mode is enabled.
    6. Repeat for the Logging_Mixed_Principal.sql script.
    7. You’ll have to enable SQLCMD Mode for each script you open.


    8. Repeat for the Monitoring_Mixed_Principal.sql script.
    9. Once again enable SQLCMD Mode.


    10. The person running Citrix Studio must be added to the SQL Server as a SQL Login and granted the public server role so that account can enumerate the databases.

  6. Back in Citrix Studio, click the Continue database configuration and Site setup button.
  7. In the Databases page, enter the SQL server name and instance name, and then click Next.

  8. On the Licensing page, enter the name of the Citrix License Server, and click Connect. If you installed Citrix Licensing with your Delivery Controller, then simply enter localhost.
  9. If the Certificate Authentication window appears, select Connect me, and click Confirm.
  10. Then select your license, and click Next. See CTX223926 How to Configure Multiple License Types within a Single XenApp and XenDesktop Site.
  11. In the Summary page, if your databases are mirrored, each database will show high availability servers and the name of the Mirror server. Click Finish.

  12. It will take some time for the site to be created.

Second Controller

During Site creation on the first Delivery Controller, in the Site Setup wizard, you might have selected more than one Delivery Controller.  In that case, on the second Delivery Controller, simply run Citrix Studio and it should already be configured.

Otherwise, additional Delivery Controllers need to be added to the SQL databases.

  • If you have sysadmin permissions to SQL, let Citrix Studio modify the databases automatically.
  • If you don’t have sysadmin permissions to SQL then use Citrix Studio to generate SQL scripts and send them to a DBA.

To use Citrix Studio to create the SQL Scripts:

  1. On the first Delivery Controller, if StoreFront is installed on the Controller, then delete the default StoreFront store (/Citrix/Store) and recreate it with your desired Store name (e.g. /Citrix/Company).
  2. On the second Delivery Controller machine, install Delivery Controller as detailed earlier.
  3. After installation, launch Citrix Studio on the second controller, and click Connect this Delivery Controller to an existing Site.
  4. Enter the name of the first Delivery Controller, and click OK.
  5. If you don’t have full SQL permissions (sysadmin), click No when asked if you want to update the database automatically.
  6. Click Generate scripts.
  7. A folder will open with multiple SQL scripts. These SQL script files follow the same pattern as the first Delivery Controller where the Mixed scripts do everything, but the DbOwner and SysAdmin scripts are intended to be run by different SQL administration roles. Always run each of these scripts in SQLCMD mode. There are separate scripts for mirrored databases.

    1. On the SQL Server, open one of the .sql files.

    2. Open the Query menu, and click SQLCMD Mode.
    3. Then execute the SQL script.
    4. If SQLCMD mode was enabled properly, then the output should look something like this:
  8. Repeat for the remaining script files. Enable SQLCMD mode for each script.
  9. Back in Citrix Studio, click OK.
  10. In Citrix Studio, under Configuration > Controllers, you should see both controllers.

SSL for Delivery Controller

SSL certificates should be installed on each Delivery Controller to encrypt the traffic between StoreFront and Delivery Controller. The traffic between StoreFront and Delivery Controller contains user credentials.

The SSL certificate on each Delivery Controller needs to match the FQDN of the Delivery Controller.

  • If StoreFront is installed on the Delivery Controller, then you have two FQDNs to consider: the Delivery Controller FQDN, and the StoreFront FQDN. Make sure the certificate matches the Delivery Controller FQDN, but it’s usually not necessary for the same certificate to also match the StoreFront FQDN.
    • The StoreFront certificate is usually hosted on a Citrix ADC SSL Load Balancing Virtual Server. Users connect to Citrix ADC instead of directly to the StoreFront servers. The StoreFront certificate only needs to be valid between the user and the ADC.
    • For the connection between ADC and StoreFront server, ADC does not validate the certificate, so the certificate on the StoreFront server can be anything. That means you can install a certificate that matches the Delivery Controller FQDN and there’s no need for the certificate to match the StoreFront FQDN.

To enable SSL for a Delivery Controller:

  1. Run certlm.msc, go to Personal > Certificates and create or install a server certificate that matches the Delivery Controller’s FQDN. This can be an internally-signed certificate if the StoreFront server trusts internally-signed certificates.
  2. If IIS is installed on the Delivery Controller, then simply run IIS Manager, go to Default Web Site, click Edit Bindings, and add an https binding using the chosen certificate.

If IIS is not installed on the Delivery Controller, then we need to build a command line to bind the certificate to Citrix Broker Service. Binding Your SSL Server Certificate to the Citrix Broker Service by Ray Kareer at CUGC has a script to automate this process.

  1. Open a command prompt as administrator.
  2. Enter the following text but don’t press Enter yet.
    netsh http add sslcert ipport=0.0.0.0:443 certhash=
  3. Right after certhash= paste the certificate thumbprint using the following procedure:
    1. Go to certlm.mscPersonal Certificates.
    2. Double-click the certificate you want to bind.
    3. On the Details tab, scroll down to Thumbprint and copy the thumbprint.
    4. Paste the thumbprint into the command line we’re building.
    5. Remove the special character at the beginning of the thumbprint.
    6. Remove the spaces.
  4. Add the following to the command line:
     appid=
  5. Michael Shuster at HowTo: Enable SSL on Citrix Delivery Controllers – Easy Method says you can run the following PowerShell to get the Broker Service GUID.
    Get-WmiObject -Class Win32_Product | Select-String -Pattern "broker service"
  6. Paste the GUID for Citrix Broker Service that you got from the Get-WmiObject. Make sure the GUID has curly braces on both sides with no space between appid and the left curly brace.
  7. Press <Enter> to run the command.
  8. If you entered everything correctly, then it should say SSL Certificate successfully added.
  9. To confirm the certificate binding, run the following:
    netsh http show sslcert ipport=0.0.0.0:443

Studio – Slow Launch

If your Delivery Controller or Citrix Studio machine doesn’t have Internet access, then the following adjustment can be made if Citrix Studio starts slowly:

  • Within Internet Explorer, go to Tools – Internet Options – Tab Advanced – Section Security, and uncheck the option Check for publisher’s certificate revocation

Registry setting (can be deployed using Group Policy Preferences):

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing
    • State“=dword:00023e00

Concurrent Logon Hard Limit

From Samuel Legrand XenApp 7.14 – (Really) Manage a DR! – Citrix Policies has a setting called Concurrent Logon Tolerance. However, it is not a hard limit, meaning once the limits are reached, it continues to let users connect. You can configure the Controllers to make it a hard limit by setting the following registry value on the Delivery Controllers:

  • HKLM\Software\Policies\Citrix\DesktopServer
    • LogonToleranceIsHardLimit (DWORD) = 1

Local Host Cache

Local Host Cache (LHC) allows new sessions to be started even if SQL database is unavailable.

From Local Host Cache sizing and scaling at Citrix Docs:

  1. For LHC LocalDB, assign the Controller VMs a single CPU socket with multiple CPU cores.
  2. Add two CPU cores for LHC.
  3. Add at least three more Gigs of RAM and watch the memory consumption.
  4. Since there’s no control over LHC election, ensure all Controllers have the same specs.
  5. The Docs article has scripts for monitoring LHC performance.

From XenApp 7.12, LHC and a reboot at Citrix Discussions:

  • If the rebooted Delivery Controller is the elected one, a different DDC will take over (causing registration storm) and when the Delivery Controller gets back, it will take over brokering causing second registration storm. Site will sort itself out and all will work.
  • If the rebooted Delivery Controller is not the elected one, it will not impact any functionality.
  • If you turn the Delivery Controller down when site is working, and start it during outage, LHC will not trigger on that machine. This Delivery Controller will not impact the LHC unless it would become the elected one. In that scenario it will take control, however, not start LHC and resources would not be available.

Trentent Tye at Citrix XenDesktop/XenApp 7.15 – The local host cache in action has a video showing LHC in action.

As mentioned by Citrix Docs, make sure PowerShell Execution Policy is set to RemoteSigned, Unrestricted, or Bypass.

If you did a fresh install of 2311, then Local Host Cache should be enabled by default. In PowerShell, you can run Get-BrokerSite to confirm.

If not enabled, you can run some PowerShell commands to enable Local Host Cache:

Set-BrokerSite -ConnectionLeasingEnabled $false
Set-BrokerSite -LocalHostCacheEnabled $true

George Spiers Local Host Cache XenApp & XenDesktop shows the Event Log entries when LHC is enabled.

Database Maintenance

Enable Read-Committed Snapshot

The Delivery Controller Database can become heavily utilized under load in a large environment. Therefore, Citrix recommends enabling the Read_Committed_Snapshot option on the Delivery Controller databases to remove contention on the database from read queries. This can improve the interactivity of Studio and Director. It should be noted that this option may increase the load on the tempdb files. See Citrix article CTX137161 How to Enable Read-Committed Snapshot in XenDesktop for configuration instructions.

Change Database Connection Strings

Sometimes the database connection strings need to be modified:

  • When moving the SQL databases to a different SQL server
  • For AlwaysOn Availability Groups, to add MultiSubnetFailover to the SQL connection strings
  • For SQL mirroring, to add Failover Partner to the SQL connection strings

Here are general instructions for moving the database and assigning the correct permissions:

  1. Backup the three Citrix databases on the original SQL server and restore them on the new SQL server. See Microsoft’s documentation for details.
  2. In SQL Management Studio > Security > Logins, add the Delivery Controller computer accounts (e.g., CORP\DDC01$)
  3. When adding the SQL Login, on the User Mapping page, select the three Citrix databases (Site database, Monitoring database, and Logging database)
  4. For each of the three Citrix databases, add the Delivery Controller computer account to the various database roles as listed below. The Site database has many more roles than the Logging and Monitoring databases.
    • Site database – ADIdentitySchema_ROLE
    • Site database – Analytics_ROLE (7.8 and newer)
    • Site database – AppLibrarySchema_ROLE (7.8 and newer)
    • Site database – chr_Broker
    • Site database – chr_Controller
    • Site database – ConfigLoggingSchema_ROLE
    • Site database – ConfigLoggingSiteSchema_ROLE
    • Site database – ConfigurationSchema_ROLE
    • Site database – DAS_ROLE
    • Site database – DesktopUpdateManagerSchema_ROLE
    • Site database – EnvTestServiceSchema_ROLE
    • Site database – HostingUnitServiceSchema_ROLE
    • Site database – Monitor_ROLE
    • Site database – MonitorData_ROLE
    • Site database – OrchestrationSchema_ROLE (7.11 and newer)
    • Site database – public
    • Site database – StorefrontSchema_ROLE (7.8 and newer)
    • Site database – TrustSchema_ROLE (7.11 and newer)
    • Monitoring database – Monitor_ROLE
    • Monitoring database – public
    • Logging database – ConfigLoggingSchema_ROLE
    • Logging database – public

From Citrix Docs Update database connection strings when using SQL Server high availability solutions: Citrix offers several PowerShell scripts that update Delivery Controller database connection strings when you are using SQL Server high availability database solutions such as AlwaysOn and mirroring. The scripts, which use the Citrix Virtual Apps and Desktops PowerShell API, are:

  • DBConnectionStringFuncs.ps1: The core script that does the actual work. This script contains common functions that the other scripts use.
  • Change_XD_Failover_Partner_v1.ps1: Updates (adds, changes, or removes) the failover partner. This script prompts for the failover partner location (FQDN) for each database. (Providing a blank failover partner removes the failover partner. You can also use the ClearPartner option to remove a partner.) Do not set the failover partner to the same location as the principal database server.
  • Change_XD_To_ConnectionString.ps1: Uses the provided connection strings to update the connection strings to the databases. This script ensures that certain Citrix services are up and running, and then updates those services in the correct order on all Controllers in the site. Enclose connection string information for each database in quotes.
  • Change_XD_To_MultiSubnetFailover.ps1: Toggles the addition and removal of MultiSubnetFailover=true. If you use AlwaysOn Availability Groups, Microsoft recommends that the connection string include MultiSubnetFailover=true. This option speeds up recovery when a high availability event occurs, and is recommended for both single and multi-subnet environments. Run this script once to add the option. Run the script again to remove it.
  • Change_XD_To_Null.ps1: Resets all the connection strings on the localhost because something has gone wrong. By resetting the connection strings to null, this script places the Controller into an “initial” state. If you run Studio after running this script, you’ll be asked if you want to create a site or join an existing site. This is useful if something has gone wrong and a reset is needed. After the reset, you can try again to set the connection strings.

Here are the DB Connections that must be changed. Make sure you include all of the DB Connections shown below. You can get the full list of database commands by running Get-Command Set-*DBConnection. When changing the DB connections, AdminDBConnection must be the last to be set to NULL, and the first to be configured with the new connection string. Repeat these instructions on all Delivery Controllers in the farm.

Remove the existing Database connections

At the Delivery Controller, open PowerShell as Administrator and run the following commands to clear the existing database connections.

## Disable configuration logging for the XD site:
Set-LogSite -State Disabled

## ## Clear the current Delivery Controller database connections
## Note: AdminDBConnection must be the last command
Set-ConfigDBConnection -DBConnection $null
Set-AppLibDBConnection -DBConnection $null    #7.8 and newer
Set-OrchDBConnection -DBConnection $null      #7.11 and newer
Set-TrustDBConnection -DBConnection $null     #7.11 and newer
Set-AcctDBConnection -DBConnection $null
Set-AnalyticsDBConnection -DBConnection $null # 7.6 and newer
Set-HypDBConnection -DBConnection $null
Set-ProvDBConnection -DBConnection $null
Set-BrokerDBConnection -DBConnection $null
Set-EnvTestDBConnection -DBConnection $null
Set-SfDBConnection -DBConnection $null
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null   #Monitoring Database
Set-MonitorDBConnection -DBConnection $null                      #Site Database
Set-LogDBConnection -DataStore Logging -DBConnection $null       #Logging Database
Set-LogDBConnection -DBConnection $null                          #Site Database
Set-AdminDBConnection -DBConnection $null -force

Specify the new Database connection strings

Run the following commands to set the new SQL connection strings. Adjust the variables to match your desired connection string. For example, if you wish to add “;MultiSubnetFailover=True” to the connection strings, then set the $csSite variable to "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True;MultiSubnetFailover=True". Repeat this for the $csLogging and $csMonitoring variables.

## Replace <dbserver> with the SQL server name, and instance if present, e.g "ServerName\SQLInstanceName". If no SQL Instance name is mentioned, this commandlet will try to connect to the default SQL instance.
## Replace <dbname> with the name of your restored Database
## Note: AdminDBConnection should be first

$ServerName = "<dbserver>"
$SiteDBName = "<SiteDbName>"
$LogDBName = "<LoggingDbName>"
$MonitorDBName = "<MonitorDbName>"
$csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True;MultiSubnetFailover=True"
$csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True;MultiSubnetFailover=True"
$csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True;MultiSubnetFailover=True"

Set-AdminDBConnection -DBConnection $csSite
Set-ConfigDBConnection -DBConnection $csSite
Set-AcctDBConnection -DBConnection $csSite
Set-AnalyticsDBConnection -DBConnection $csSite # 7.6 and newer
Set-HypDBConnection -DBConnection $csSite 
Set-ProvDBConnection -DBConnection $csSite
Set-AppLibDBConnection –DBConnection $csSite # 7.8 and newer
Set-OrchDBConnection –DBConnection $csSite # 7.11 and newer
Set-TrustDBConnection –DBConnection $csSite # 7.11 and newer
Set-BrokerDBConnection -DBConnection $csSite
Set-EnvTestDBConnection -DBConnection $csSite
Set-SfDBConnection -DBConnection $csSite
Set-LogDBConnection -DBConnection $csSite
Set-LogDBConnection -DataStore Logging -DBConnection $null
Set-LogDBConnection -DBConnection $null
Set-LogDBConnection -DBConnection $csSite
Set-LogDBConnection -DataStore Logging -DBConnection $csLogging
Set-MonitorDBConnection -DBConnection $csSite
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null
Set-MonitorDBConnection -DBConnection $null
Set-MonitorDBConnection -DBConnection $csSite
Set-MonitorDBConnection -DataStore Monitor -DBConnection $csMonitoring
Set-LogSite -State Enabled

Test the new Database connection strings

Run the following commands to verify connectivity to the database:

## Copy these variables from the previous step
## If you haven’t closed your PowerShell window, then the variables might still be defined. In that case, just run the Test commands
$ServerName = "<dbserver>"
$SiteDBName = "<SiteDbName>"
$LogDBName = "<LoggingDbName>"
$MonitorDBName = "<MonitorDbName>"
$csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True"
$csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True"
$csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True"

Test-AcctDBConnection -DBConnection $csSite
Test-AdminDBConnection -DBConnection $csSite
Test-AnalyticsDBConnection -DBConnection $csSite # 7.6 and newer
Test-AppLibDBConnection -DBConnection $csSite # 7.8 and newer
Test-BrokerDBConnection -DBConnection $csSite
Test-ConfigDBConnection -DBConnection $csSite
Test-EnvTestDBConnection -DBConnection $csSite
Test-HypDBConnection -DBConnection $csSite
Test-LogDBConnection -DBConnection $csSite
Test-LogDBConnection -DataStore Logging -DBConnection $csLogging
Test-MonitorDBConnection -DBConnection $csSite
Test-MonitorDBConnection -Datastore Monitor -DBConnection $csMonitoring
Test-OrchDBConnection -DBConnection $csSite # 7.11 and newer
Test-ProvDBConnection -DBConnection $csSite
Test-SfDBConnection -DBConnection $csSite
Test-TrustDBConnection -DBConnection $csSite # 7.11 and newer

Director Grooming

If your Citrix Virtual Apps and Desktops is not Premium Edition, then all historical Director data is groomed at 30 days.

For Citrix Virtual Apps and Desktops Premium Edition, by default, most of the historical Director data is groomed at 90 days. This can be adjusted up to 367 days by running a PowerShell cmdlet.

  1. On a Delivery Controller, run PowerShell elevated (as administrator).
  2. Run Get-MonitorConfiguration to see the current grooming settings.
  3. Run Set-MonitorConfiguration to change the grooming settings.

View Logging Database

To view the contents of the Logging Database, in Studio, click the Logging node. On the right is Create Custom Report. See Citrix article CTX138132 Viewing Configuration Logging Data Not Shown for more info.

The Logging Database can be queried using Get-LogLowLevelOperation. See Stefan Beckmann Get user who set maintenance mode for a server or client for an example script that uses this PowerShell cmdlet.

Logging Database Grooming

By default, the Logging Database does not groom old entries. You can enable grooming in Citrix PowerShell by running the Set-LogSite cmdlet with the -LoggingDBPurgeDurationDays parameter. More info at Schedule periodic data deletion at Citrix Docs.

Export/Import Configuration

Ryan Butler has a PowerShell script that can export configuration from one Citrix Virtual Apps and Desktops farm and import it to another.

Kaspars Vilde at XenDesktop/XenApp 7.X Applications – Exporting / Importing at Citrix Discussions has scripts to export published apps from one farm and import to another farm.

Studio Administrators

Full Administrators

  1. In the Studio, under Configuration, click the Administrators node. The first time you access the node you’ll see a Welcome page. Feel free to check the box to Don’t show this again, and then click Close.
  2. On the Administrators tab, right-click, and click Create Administrator.
  3. In the Administrator and Scope page, Browse to a group (e.g. Citrix Admins) that will have permissions to Citrix Studio and Director. These groups typically have access to all objects, so select the All scope. Alternatively, you can create a Scope to limit the objects. Click Next.
  4. On the Role page, select a role, and then click Next. For example:
    • Full Administrator for the Citrix Admins group
    • Help Desk Administrator for the Help Desk group
    • Machine Catalog Administrator for the desktop team
  5. In the Summary page, click Finish.

Help Desk

  1. In Citrix Studio, under Configuration, click the Administrators node. On the Administrators tab, right-click, and click Create Administrator.
  2. In the Administrator and Scope page, Browse to a Help Desk group that will have permissions to Citrix Studio and Director. Select the All scope. And click Next.
  3. On the Role page, select the Help Desk Administrator role, and then click Next.
  4. In the Summary page, click Finish.
  5. When administrators in the Help Desk role log into Director, all they see is this.

    To jazz it up a little, add the Help Desk group to the read-only role.
  6. Right-click the Help Desk Administrator, and click Edit Administrator.
  7. Click Add.
  8. In the Scope page, select a scope, and click Next.
  9. In the Role page, select Read Only Administrator, and click Next.
  10. In the Summary page, click Finish.
  11. Then click OK. Now Director will display the dashboard.

Customer Experience Improvement Program

Citrix Virtual Apps and Desktops enables CEIP by default.

If desired, you can disable it in Citrix Web Studio (CVAD 2212 and newer):

  1. Go to https://ControllerFQDN/Citrix/WebStudio
  2. On the left, click Settings.
  3. On the top right, move the slider for Citrix Customer Experience Improvement Program.
  4. Click Apply at the bottom.

If desired, you can disable it in Citrix Studio:

  1. On the left, go to the Configuration node.
  2. On the right, switch to the Product Support tab.
  3. Click End.
  4. Click Yes.

Citrix Studio collects data for Google Analytics. You can disable this in the registry at HKLM\Software\Citrix\DesktopStudio\GAEnabled = 0.

Each Citrix Virtual Apps and Desktops component has a separate configuration for disabling Customer Experience Improvement Program:

Web Studio Settings

Web Studio 2311 and newer under Logging can show you PowerShell and APIs that Web Studio is using.

Web Studio has a Settings page:

  1. Web Studio 2308 and newer support Integrated Windows authentication.
  2. Web Studio 2308 and newer let you configure an Inactivity timeout.
  3. Web Studio 2311 and newer have multiple site management in the Settings node.

    • Use the Site selector at the top right of the page.
  4. Web Studio 2308 and newer support Vertical load balancing.

    • CVAD 2311 and newer let you set Vertical load balancing at the Delivery Group instead of only at the Site.
  5. Web Studio 2308+ lets you create folders of Machine Catalogs.
  6. Web Studio 2308+ lets you create folders of Delivery Groups.

Hosting Connection – VMware vCenter

Citrix Virtual Apps and Desktops uses an Active Directory service account to log into VMware vCenter. This service account needs specific permissions in vCenter. To facilitate assigning these permissions, create a new vCenter role and assign it to the service account. The permissions should be applied at the vCenter datacenter object or higher level.

Import vCenter Root Certificate

If the vCenter certificate is valid and trusted, then you can skip to the Hosting Resource section.

For newer versions of vCenter, you can import the root certificate that signed the vCenter Server/Appliance certificate.

  1. Point your browser to the root path of the vCenter Server URL.
  2. On the bottom right, click Download trusted root CA certificates.
  3. Extract the downloaded files.
  4. Go to \certs\win.
  5. Sort the files by date, and double-click the newest .crt file.
  6. On the General tab, click Install Certificate.
  7. In the Welcome to the Certificate Import Wizard page, change the Store Location selection to Local Machine, and click Next.
  8. In the Certificate Store page, click Browse.
  9. Select Trust Root Certification Authorities, and click OK.
  10. In the Completing the Certificate Import Wizard page, click Finish.
  11. If you close your browser and reopen it, and then go to the vCenter URL, there should no longer be any certificate errors.
  12. Skip to the Hosting Resource section.

Import vCenter Certificate

If the vCenter certificate is valid and trusted, then you can skip to the Hosting Resource section.

Alternatively, you can import the actual vCenter Server certificate (instead of the root). This is the only option for older self-signed vCenter certificates.

Newer versions of Citrix Virtual Apps and Desktops (CVAD) have the ability to import the vCenter certificate thumbprint into the database so every Delivery Controller trusts it. However, it is difficult to update the thumbprint whenever the vCenter certificate changes. It might instead be more reliable to use the older method of configuring the Trusted People store on the Delivery Controllers. Whenever the vCenter certificate is changed, you’ll need to repeat these steps.

  1. Get the vCenter certificate.
    1. Open a browser and point it to the vCenter URL. Note: this procedure to get the certificate won’t work in Internet Explorer.
    2. If Google Chrome, click the Secure box in the address bar, and then click Certificate.
    3. On the Details tab, click Copy to File.
    4. In the Welcome to the Certificate Export Wizard page, click Next.
    5. In the Export File Format page, either format will work. Click Next.
    6. In the File to Export page, browse to a new file, and click Next.
    7. In the Completing the Certificate Export Wizard page, click Finish.
  2. On the Delivery Controller, run certlm.msc. This opens the MMC console with the Certificates snap-in already added and pointing to Local computer.
  3. On the left, right-click the Trusted People node, expand All Tasks, and click Import.
  4. In the Welcome to the Certificate Import Wizard page, click Next.
  5. In the File to Import page, browse to the certificate you saved earlier, and click Next.
  6. In the Certificate Store page, click Next.
  7. In the Completing the Certificate Import Wizard page, click Finish.
  8. Click OK to acknowledge that the import was successful.
  9. Repeat these steps on the second Delivery Controller. It is important that you import the certificate on all Delivery Controllers before you add the Hosting Resource in Citrix Studio.
  10. If you open a browser and point to the vCenter Server, there should be no certificate errors.

Hosting Resources

Hosting Resources are used by both Machine Creation Services (MCS) and by Citrix Provisioning’s CVAD Setup Wizard.

A Hosting Resource = vCenter + Cluster (Resource Pool) + Storage + Network. When you create a machine catalog, you select a previously created Hosting Resource and the new virtual machines are created on the Cluster, Storage, and Network defined in the Hosting Resource object. If you need some VDA machines on a different Cluster+Storage+Network, then you’ll need to define more Hosting Resources in Studio.

Hosting Connections and Hosting Resources are two different objects. The Hosting Connection defines the type of hypervisor and the credentials that Delivery Controller uses to log into the hypervisor. A single Hosting Connection can have multiple Hosting Resources for multiple clusters, multiple datastores, etc. The first time you run the wizard both objects are created. Later you add Hosting Resources to a pre-existing Hosting Connection.

Citrix CTX131239 Supported Hypervisors for Virtual Desktops and Provisioning (Provisioning Services). vSphere 7 is supported in CVAD 2203 and newer. vSphere 8 is supported in CVAD 2212 and newer. SCVMM 2022 is supported in CVAD 2203 and newer.

  1. In Citrix Studio, expand Configuration and click Hosting. Right-click Hosting, and click Add Connection and Resources.
  2. In the Connection page, for Connection type, select VMware vSphere.
  3. Notice there’s a Learn about user permissions blue link to an article that describes the necessary permissions.
  4. In the Connection address field, enter a vCenter URL similar to https://vcenter01.corp.local/sdk. The URL must contain the FQDN of the vCenter server.
  5. Enter credentials of a service account that can log into vCenter.
  6. In the Connection name field, give the connection a name. Typically, this matches the name of the vCenter server.
  7. If you are not using Machine Creation Services (MCS) or Citirx Provisioning (PVS) and instead only need the vCenter connection for machine power management, change the Create virtual machines using selection to Other Tools.
  8. If you intend to use MCS or PVS, leave Create virtual machines using set to Studio Tools.
  9. Click Next.

  10. In the Storage Management page, click Browse and select a vSphere cluster.
    • Note: as detailed at CTX223662, make sure there’s no comma in the datacenter name.
  11. Select Use storage shared by hypervisors.
  12. Beware of Optimize temporary data on available local storage. From Mark Syms at Citrix Discussions: “If you use just MCS caching to local storage then the VM is not agile at all and cannot be moved even when powered off as it has a virtual disk permanently associated with a single host.”
  13. Click Next.
  14. In the Storage Selection page, OS and Temporary must be selected on at least one datastore.

    • For maximum virtual machine placement flexibility, only select one datastore per Hosting Resource. To select additional datastores, run this wizard again to create a separate Hosting Resource for each datastore.
    • When creating a Machine Catalog you select a Hosting Resource. If the Hosting Resource only has one datastore selected, then you know which datastore the new VMs will be placed on. However, if the Hosting Resource has multiple datastores, then the datastores are selected round robin and you don’t have any control over which datastore is selected for each new machine.
  15. If you selected the temporary data on local storage option, on the bottom, click Select, and choose the datastores you want to use for disk caching. By default, all local datastores are selected. Click Next when done.
  16. In the Network page, enter a name for the Hosting Resource. Since each Hosting Resource is a combination of vCenter, Cluster, Network, and Datastores include those names in this field (e.g. vCenter01-Cluster01-Network01-Datastore01).
  17. Select a network and click Next.
  18. In the Summary page, click Finish.
  19. If you need to rename Storage, Network, or Datacenters in vCenter, see Citrix CTX225019 XA/XD 7.13: Renaming Storage, Network or Datacenters When Used With MCS or PVS. Either run Update-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\MyConnection", or right-click the Hosting Resource and click Edit Storage. You can cancel the wizard.

If you have multiple datastores for your VDAs, then create multiple Hosting Resources (one for each datastore):

  1. Run the Add Connection and Resources wizard again.
  2. You can use the existing vCenter connection.
  3. This time, select a different datastore. Remember, don’t select more than one datastore per Hosting Resource.
  4. Give the Hosting Resource a name that indicates the chosen datastore.

When you later create a MCS Machine Catalog:

  1. Select the Hosting Resource for the datastore where you want the VDAs to be placed.
  2. You can create multiple Machine Catalogs, with each of them on different datastores. You can then combine the Catalogs into a single Delivery Group.
  3. Later in the Machine Catalog wizard, you’re given an option to enable MCS memory caching and select a cache size. This is similar to the Citrix Provisioning (PVS) option “Cache in RAM with overflow to disk”. Only enable MCS memory caching if your storage is not “all flash” and thus needs IOPS reduction. This MCS memory caching requires the MCSIO driver to be selected when installing Citrix Virtual Delivery Agent software on the VDA machines.

Citrix License Server

Upgrade Citrix License Server to version 11.17.2.0 build 46000, which might be newer than what’s on the CVAD ISO.

New License Server

If you’re building a new standalone Citrix License Server:

  1. Citrix now requires Licensing telemetry as described in CTX477614 Citrix License Telemetry FAQ. The build must be 40000 or newer and you must upgrade within 6 months of release.
  2. Extract the downloaded Citrix License 11.17.2.0 build 46000.
  3. Run CitrixLicensing.exe
  4. In the Software License Agreement page, check the box next to I have read, understand, and accept the terms, and click Next.
  5. In the Install Location page, click Next.
  6. In the Configure Ports page, click Next.
  7. In the Configure Customer Success Services Renewal page, click Install.
  8. In the Summary page, click Finish.

Upgrade License Server

Upgrade your Citrix License Server to 11.17.2.0 build 46000 if it isn’t already.

  1. Citrix now requires Licensing telemetry as described in CTX477614 Citrix License Telemetry FAQ. The build must be 40000 or newer and you must upgrade within 6 months of release.
  2. Go to the downloaded Citrix License 11.17.2.0 build 46000 and run CitrixLicensing.exe.

  3. If you see the Subscription Advantage Renewal page, make a selection, and click Next.
  4. In the Upgrade page, click Upgrade.
  5. Click Finish.
  6. If you login to the Citrix Licensing Manager (:8083), the top of the page shows the version number.

  7. After upgrading Citrix License Server, in Citrix Studio, go to Configuration > Licensing.
  8. On the right, click Authenticate Certificate.
  9. Change the selection to Connect me, and click Confirm.

Citrix Licensing Manager

Newer versions of License Server come with a new management web site.

  1. From the Start Menu, run Citrix Licensing Manager. Or go to https://<My_Licensing_Server>:8083
  2. You might be prompted to login.

    • To eliminate this login, add the License Server URL to the Local Intranet zone.
  3. Licensing Manager might prompt you to register with Citrix Cloud.

    1. On the Settings > Usage and Statistics page, in the Share usage statistics with Citrix section, click Register.
    2. You’ll see a screen with a registration code. Click the Copy button and then click Register to be take to Citrix Cloud.
    3. The Register button in the Citrix License Server takes you to Identity and Access Management > API Access > Product Registrations. Click Register.
    4. Paste in the copied code and then click Continue.
    5. Click Register.
    6. Back in the on-premises Licensing Manager, it will eventually show as Registered.
    7. On the same Usage & Statistics page, scroll down, and then click Upload now. This should cause data to upload to Citrix Cloud and show up in Citrix Cloud Licensing.
  4. Licensing Manager 11.17.2.0 build 43000 and newer has a Product Information tab showing you component versions.
  5. Licensing Manager has a new Dashboard page to replace the one in the License Administration Console.

    • Click the arrow next to a license to see when it expires and the number of licenses in use.
  6. If you click the gear icon on the top right…
  7. On the Account tab, you can add License Server Administrators.
  8. The Update Licenses tab lets you check for license renewals and download them.

Activate Citrix License

The easy way to install and activate a Citrix license is through Citrix Studio:

  1. In Citrix Studio, expand Configuration, right-click Licensing, and click Allocate Licenses.
  2. Enter the license access code and click Show.
  3. Then click the Allocate licenses button.

    • Another method of allocating licenses is in the Citrix Licensing Manager at https://MyLicenseServer:8083 > Install Licenses tab.
  4. After licenses are installed, right-click the Licensing node, and click Edit Product Edition
  5. Change the edition to match your licenses. If you see both Virtual Apps and Virtual Desktops licenses, you must select Virtual Desktops. If you see both Concurrent and User/Device, then you must select User/Device. Click OK when done.
  6. Citrix Virtual Apps and Desktops supports mixed licensing in a single site/farm. See the following:

License Server CEIP

Citrix License Server enables CEIP by default. This can be disabled:

  1. In the Citrix Licensing Manager (https://MyLicenseServer:8083) by clicking the gear icon.
  2. Switch to the Usage and Statistics tab and make a selection in the Share usage statistics with Citrix section.

Citrix License Management Service

Citrix License Server includes the Citrix License Management Service. This service helps you avoid prohibited practices:

  • Duplication of licenses outside a Disaster Recovery (DR) environment
  • Use of legacy licenses for new product versions
  • Use of rescinded licenses

Citrix License Server Monitoring

Citrix Licensing Manager has historical usage reporting:

  1. Run Citrix Licensing Manager from the Start Menu. Or use a browser to connect to https://MyLicenseServer:8083
  2. On the Historical Use tab, use the drop-down menus to select a license type, select dates, and export to a .csv file.
  3. At the bottom of this page is a link to change the retention period.

Jonathan Medd Monitor Citrix License Usage With PowerShell.

Lal Mohan – Citrix License Usage Monitoring Using Powershell

Remote Desktop Licensing Server

Install Remote Desktop Licensing Server

Do the following on your Delivery Controllers:

  1. In Server Manager, open the Manage menu, and click Add Roles and Features.
  2. In the Installation Type page, select Role-based or feature-based installation.
  3. Click Next until you get to the Server Roles page. Check the box next to Remote Desktop Services, and click Next.
  4. Click Next until you get to the Role Services page. Check the box next to Remote Desktop Licensing, and click Next.
  5. Click Add Features if prompted.
  6. Then finish the wizard to install the role service.

Activate Remote Desktop Licensing

  1. After RD Licensing is installed, in Server Manager, open the Tool menu, expand Terminal Services (or Remote Desktop Services), and click Remote Desktop Licensing Manager.
  2. The tool should find the local server. If it does not, right-click All servers, click Connect, and type in the name of the local server.
  3. Once the local server can be seen in the list, right-click the server and click Activate Server.
  4. In the Welcome to the Activate Server Wizard page, click Next.
  5. In the Connection Method page, click Next.
  6. In the Company Information page, enter the required information, and click Next.
  7. All of the fields on the Company Information page are optional, so you do not have to enter anything. Click Next.
  8. In the Completing the Activate Server Wizard page, uncheck the box next to Start Install Licenses Wizard now, and click Finish. Since the session hosts will be configured to pull Per User licenses, there is no need to install licenses on the RD Licensing Server.
  9. In RD Licensing Manager, right-click the server, and click Review Configuration.
  10. Ensure you have green check marks. If the person installing Remote Desktop Licensing does not have permissions to add the server to the Terminal Server License Servers group in Active Directory, ask a domain admin to do it manually. If you have the proper permissions, click Add to Group.
  11. Click Continue when prompted that you must have Domain Admins privileges.
  12. Click OK when prompted that the computer account has been added.
  13. Click OK to close the window.

Citrix Scout

Delivery Controller includes Citrix Scout that can be launched from the Start Menu.

The tool can run a manual collection, run a trace, schedule periodic collection, or run a Health Check.

Health Check:

  1. When adding machines, you can select StoreFront or Windows VDA.
  2. When you select machines, it might tell you to enable PSRemoting.
  3. Winrm is usually not enabled on desktop machines. Login to the machine, open command prompt as administrator, and run winrm quickconfig. It’s also possible to use Group Policy to enable winrm.
  4. Go back to Citrix Scout and click Continue.
  5. Click Start Checking.
  6. You can click View Details to view the issues it found.

Collect:

  1. The wizard is identical to the Health Check wizard, except there’s another screen to upload the data.

  2. If Citrix Cloud credentials, then you need to Generate a token.
  3. After logging into Citrix Cloud, copy the token.
  4. Go back to Citrix Scout and paste the token. Click Continue.
  5. Click Start Upload.
  6. Click View Analysis.

Links with more information:

Citrix Virtual Apps and Desktops Health Check

Sacha Thomet Finally 1.0 – but never finalized!: XenApp & XenDesktop 7.x Health Check script has now Version 1.0.

Pavan900 posted a PowerShell-based Health Check script at Citrix Studi – Colors for Maintenance Mode at Citrix Discussions.

Andrew Morgan – New Free Tool: Citrix Director Notification Service: The Citrix Director Notification service sits on an edge server as a service (or local to the delivery controller) and periodically checks the health of:

  • Citrix Licensing.
  • Database Connections.
  • Broker Service.
  • Core Services.
  • Hypervisor Connections.

And if any of these items fall out of bounds, an SMTP alert is sent to the mailbox of your choice for action. The tool will also send “All Clear” emails when these items are resolved, ensuring you are aware when the service has resumed a healthy state.

Related Pages

93 thoughts on “Delivery Controller 2311 and Licensing”

  1. Citrix official website does not have permission to download the latest image of Citrix Virtual Apps and Desktops. Can you share the full set of ISO image files with me?

  2. Carl,

    I could have sworn that Citrix XenApp requires only Microsoft RDS *Per User* license.
    I swear it used to be in the prod docs but I can no longer find the reference.

    Am I wrong here?

  3. I’m sorry, because I don’t have permission to download and contact the agent (China has quit).

    Can you share all the ISO web disk download addresses of CVAD 2311 Premium Edition Components?

    Here sincere thanks!!

  4. Hi Carl!

    Thank you for a great and comprehensive upgrade guide!
    I have a questtion regarding Nvidia vgpu driver versions. We are running version Nvidia driver 16.1 currently and are upgrading to CVAD 2308 from 1912 LTSR.
    According to Nvidia only version 16.2 is supported by CVAD version 2308.
    We have already upgraded our VDA agent to 2308, which is working fine with all GPU profiles.
    Do we really need to upgrade one minor version of Nvidia drivers to upgrade to CVAD 2308?

  5. The statement below is quotation marks is not true. Citrix does not support any XA/XD 7.15, it is EOL. The XA/XD 7.15 VDA will communicate with Delivery Controllers 2308 but it is not a supported configuration.

    “If you have older VDA machines running Windows 7 or Windows Server 2008 R2, you can install VDA software version 7.15 LTSR. Citrix supports VDA 7.15 LTSR communicating with Delivery Controller 2308.”

  6. Hi Carl,
    I have a question about licences.
    The parameter ‘Total Unique Licensed Users’ indicates the maximum number of connected unique users, correct?

    If that value is 1069 and I have a total of 1020 licences, do I need to add them?

    Thank you

    1. If you own user/device licenses, then probably. Your Citrix License Server would have a more accurate count of the required licenses and usage.

      1. I have this situation:

        LicensedSessionsActive : 666
        PeakConcurrentLicenseUsers : 535
        TotalUniqueLicenseUsers : 1069

        Licensing has 1020 User/Device Licenses and reports being in Overdraft.
        Isn’t it showing me an incorrect count?

        Thank you

  7. Hi Carl,
    Thanks again for you blog.
    Regarding licenses, we plan to leave the maintenance due to the new universal license. We understood that we will loose new version at the date we stop the renewal of the contract but is it still allow to install CU for version that we own with a perpetual license ?

  8. Hello!

    So I have a dilemma here. My environment is currently on 2203 LTSR CU3 on Server 2022. There may be a chance when a user attempts to log in, it says “Please wait for the Remote Desktop Configuration”. When I try to log in via the console of vSphere, it gives me the same thing, and it seems it may just be this version. Has anyone seen this before?

      1. Hey Carl,

        So the only event that I can think in my head (not currently at the environment) is Event ID 6005. “The winlogon notification subscriber is taking l long time to handle the notification event (Unlock)”. Next thing I know, I can look into my networking console and see the Server fading in and out. I can ping it, access event viewer, access services, but the thing I can’t do is log into it.

      2. I just ended up biting the bullet and went with 2305. So far, I have not seen any RDP connection drops, so I guess my issue is resolved!

  9. Hi Carl. Thanks in advance for all your work.
    I have 2 servers
    The first is the storefront on windows server 2019
    The second have the rest services (Deliver Controller, Director, License, Studio) on windows server 2019
    The version of CVAD7 is 2012

    If I take a look at menu I see that the SQL Server version for Configuration Manager and other tools is 2017 but
    if a take a look at services I see that the SQL Server Services Instance is MSSQL14.SQLEXPRESS version 14.0.1000.169

    My question is if there is a problem to upgrade in-place from 2012 to 2303.
    Thanks for all.

  10. Hi Carl, Apologies realised I posted this in the wrong thread before.

    I will preface the below by saying that I’m a novice with citrix and have learnt everything on the fly by myself so far. While my colleagues are further ahead in experience then me they also have minimal to no knowledge of Citrix and how to set it up as it was originally configured by a technician that is no longer with us.

    I am building a new Citrix environment from scratch we had to update our servers from 2012 to 2019 and also update our virtual apps and desktop version from 1912 LTSR to the 2212 version. Currently we have 3 DC’s, 3 Storefronts and 6 VDAs with netscaler as our load balancer and the licensing server. Because of this it seemed like the best way was to completely rebuild it on a new group of servers. We are shrinking a little bit only going with 2 DC’s and 2 Storefronts and I’m not recreating the Netscaler with the intention being to point it at the new servers once we are ready.

    My issue at the moment is how can I connect to the new VDA’s as if I was a user to properly test the store front and application groups are working correctly without impacting our current working environment (this part is my problem it has to be running all the way up until cut over).

    1. If you’re building new StoreFront, then you can connect directly to a StoreFront server. Or you can create a new Load Balancing VIP on the NetScaler.

      Another option is to add the new farm to existing StoreFront. In StoreFront Console, click your store and then click Manage Delivery Controllers. Add the new farm. Make sure the published icons in the new farm are only assigned to your test users.

      1. I went with the new farm in the existing StoreFront which I am able to log into but when I try to start an application I get the message that the application cannot start and haven’t been able to find a solution for it yet I’m sure I have just missed something but not sure what as I have gone over the settings multiple times and compared it to the working storefront can’t find any differences?

      2. Please disregard I found the solution needed to run the following command on the DC Set-BrokerSite -TrustRequestsSentToTheXmlServicePort $true

        Forgot to say thank before as well for your suggestion really helped me.

  11. Dear Carl, in CVAD2212 I´´´ ve seen Citrix Site Manager for the first time. I´ve upgraded several customer environments so far. Today I was in a quite dodgy situation. Same procedure as every time and this time the delivery controllers got stuck in the state of “Transitioning”. Had to revert controllers and farm dbs. I only found CTX215952 – but that does not help. Do you have an idea what might be happening here under the hood ? I will raise a support case if it is reproductible.

    1. I don’t think I’ve seen Transitioning before. Normally I look at logs under C:\Windows\Temp\Citrix and troubleshoot from there. Note that the main log file might point to other log files.

  12. Thank you for your continued contribution to CItrix documentation! I was having issues with changing SQL databases but ran through your guide including the critical part of assigning role membership to each of the Citrix DBs for the CDC computer account. All working fine after running through your guide.

  13. I am trying to add a secondary delivery controller to my test lab on a different server,
    Howver, when it tries to update the database, I get the following error message
    “The services could not connect to the database” same message in this url https://support.citrix.com/article/CTX233581
    The firewall is turned off and i can ping both delivery controllers from each other.
    the sql server express service is started and running.
    any other ideas what could be causing the issue?

    1. In SQL Server Configuration, is TCP/IP enabled? And is it set to a static port number like 1433? If you run SQL Management Studio on a remote machine, can you connect to SQL Express?

    1. It won’t be. Currently only CVAD 2009 supports vSphere 7. CVAD 1912 will probably support it in a future Cumulative Update.

      1. you 100% on that one Carl? I talked to chat support the other day and they felt the latest CU for 7.15 LTSR could possibly support it. not sure when that release will be. We’re probably gonna have to upgrade to the 1912 LTSR when its supported.

  14. Hi Carl,

    I stumbled across an error with the Powershell script under “Database Maintenance” –> “Specify the new Database connection strings”

    In the 3 lines
    Set-AppLibDBConnection –DBConnection $csSite # 7.8 and newer
    Set-OrchDBConnection –DBConnection $csSite # 7.11 and newer
    Set-TrustDBConnection –DBConnection $csSite # 7.11 and newer

    in front of the DBConnection option instead of a normal dash (Char 045) an en dash (Char 8211) is used. This can cause problems with Powershell, because the en dash is not always recognized as dash.

    Since the source of the script is https://support.citrix.com/article/CTX216504 I checked the Citrix article and found the same error and already reported it.

    It would be nice if you could edit the script in your post.

    Thank you!

  15. Hi Carl,

    Your blog has been making my job easier for years. Now I have a question for you.

    After upgrading to version 1909, my DC no longer connects to the license server. The error message is not very helpful for me at this point.

    The license server has been updated to the correct version 11.16.3.0 build 29000. The certificates are all ok. Before the upgrade, communication was possible without any problems.

    Do you have an idea where to start troubleshooting?

    By the way. We are currently migrating our domain to another domain and have set up a new Citrix farm in the new target domain. The problem occurs in the target domain farm. Our old Citrix farm in the old domain has no problems with the license server.

    #####

    Error Details:

    Error Id: XDDS:970C7A1D

    Ausnahme:
    DesktopStudio_ErrorId : UnknownError
    Error Source : CitrixLicensingAdmin
    Sdk Error Message : UnknownError
    Sdk Error ID : Citrix.PowerShell.LicensingAdminStatus.UnknownError,Citrix.Licensing.Admin.SDK.Commands.GetLicCertificateCommand
    ErrorCategory : NotSpecified
    DesktopStudio_PowerShellHistory : Zertifikat für Lizenzierungsdienst abrufen
    08.01.2020 07:33:25

    Get-LicCertificate -AdminAddress “https://dressv09000.elisabeth-vinzenz.de:8083/”
    Get-LicCertificate : UnknownError
    + CategoryInfo : InvalidOperation: (Get-LicCertificate:String) [Get-LicCertificate], InvalidOperationException
    + FullyQualifiedErrorId : Citrix.PowerShell.LicensingAdminStatus.UnknownError,Citrix.Licensing.Admin.SDK.Commands.GetLicCertificateCommand

    StackTrace: Citrix.Orchestration.Base.LogicModels.Exceptions.ScriptException Ein Fehler ist auf dem Citrix Lizenzserver aufgetreten. Überprüfen Sie, ob der Lizenzserver ordnungsgemäß ausgeführt wird, und versuchen Sie es noch einmal.
    bei Citrix.Orchestration.Base.PowerShellInteraction.CmdletExecutionMethods.CreateException[T](ICommonLog logger, ExecutionResults`1 results, ICmdletExecutionHost host)
    bei Citrix.Orchestration.Base.PowerShellInteraction.CmdletExecutionMethods.Execute[T](ISdkCmdlet`1 sdkCmd, ICmdletExecutionHost host, Boolean allowFailover)
    bei Citrix.Orchestration.Base.PowerShellSdk.LicensingService.Scripts.GetCertificateScript.RunScript()
    bei Citrix.Orchestration.Base.PowerShellInteraction.PowerShellScript`1.Run()
    bei Citrix.Console.Licensing.UI.Mmc.LicensingTabViewModel.c__DisplayClass31_0.b__0()
    bei Citrix.Console.CommonControls.ViewModelBase.c__DisplayClass90_0.b__0(Object s, DoWorkEventArgs e)

    #####

  16. Hello Carl,
    just imagine that you have 2 domains (no trust between the 2) and you have only on SQL Cluster for the 2 installations of citrix director why couldn’t the connect string for the database be :
    ConnectionString “Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=False;User ID=DOMAIN\USERACCOUNT;Password=PASSWORD;MultiSubnetFailover=True”

    Regards

    1. I’m not sure if that would work. Citrix uses Controller SIDs inside the database. I don’t know if that relies on the Controllers using their computer accounts to login to SQL.

      1. the ID is not on the connect string, but for you makes sense having two domains and two storefronts/delivery controller connected to a 3 domain (resource domain) with only the SQL (or imagine that it’s AzureSQL)

  17. It seems their is a bug in the “Create Site – Create Database” when you let the studio connect and create the site on database automaticly and your setting ise using an Always-On availability group that is not on the default instance while using the listender of corse, the scripts rights the site wrong.
    for example if you make \ it will create the scripts with the database address.
    \:
    that is wrong the second instance name should be removed and it would work.

  18. Carl, I have created a new Prod site. I have Studio/storefront and license server on one machine(NON CORE) and I added Delivery controller and director to a second 2016 Server (CORE). I created site from studio on Non Core machine. I have installed second Delivery controller and director on New Second Server(CORE) and need to figure out how to join existing Site since I can install Studio on CORE server. I would imagine its a powershell command?

  19. Hi,
    Looking for an up to date How-to for Citrix Virtual XenDesktop full installation, and your blogs seems to be the most up to date site, but i can’t understand the flow of how to follow your directions, as you can read i am newby, but found a simple old blog, its not up-to-date nor have any new stuff (WEM, FSLogix, O365, etc..), but it’s very easy to follow:

    https://carlwebster.com/citrix-xendesktop-7-6-provisioning-services-7-6-xendesktop-setup-wizard-write-cache-personal-vdisk-drives/

    A few other people also seem to like the style of how this tutorial is written.

    Do you have any how-to like this or how can i copy and paste your blog to see this type steps needed to do full deploy of 1909 with WEM 1909, FSLogix, O365, Gateway 1909?

    Please & Thanks.

  20. Hello Carl. https://www.carlstalhood.com/delivery-controller-cr-and-licensing/#ssl in the certificate location the name may change across versions. Registry key might exist that shows “Citrix Broker Service” and a document such as https://support.citrix.com/article/CTX130213 would work. But if a newer product is installed or patched it might need a different key that shows something like “Broker_Service_x64”, ran into this with 7.15 CU4 install, different GUID.

  21. Hi Carl
    Is there a way to secure the SDK? i see that brokerService uses por 80 for SDK, (brokerservice.exe /show)
    my company’s ciso does not approve openning port 80 through FW, and require ssl,

    is that possible?
    thanks
    itamar

  22. Hi Carl,

    Hope your doing well!!

    This is regarding Sacha Tomet health check script may be it is not related to you. I have implemented the health checks Script in our current environment and everything working fine except license server details. In my case I am using Enterprise license and the license server is currently located on another server. I am looking for modification to pull out the license server report if license server hosted on separate servers.

    Thanks you in Advanced.

    1. Hello Ahmed, that’s possible, but need that according ports to the license server are open. See the PowerShell code and try to query the license directly from the server where the script is running on it. If that works, also the script will work.

      1. Thanks Sacha for your kind support… I wanted to know do I need to specify license server host name in script if license server hosted on other server?

        1. No, just be sure in the config file enable it on line 119 and choose the correct license mode on line 126.

          if you want to troubleshoot see line 836, the command you can use to test starts with Get-WmiObject …

  23. Has anyone seen slowness in Studio 1903? We upgraded from 7.15 LTSR and have seen consistent slowness in our NP and Pre-Prod environments. Citrix workaround is to install previous version of studio.

  24. We are trying to upgrade to 1808. All components done except the controllers. It failed on the pre-requisites (IIS Features).

    Add-WindowsFeature : The request to add or remove features on the specified server failed.
    Installation of one of more roles, role services,or features failed. Error: 0x800f0831

      1. It turned out to be an issue with Windows Updates that had not installed correctly. This was resolved and the installation went smoothly.

  25. Carl,

    I have setup mirroring on the 3 databases, site, logging, monitoring. (this was on a site already in use, not fresh)
    I ran the powershell scripts to update all connection strings and doing various checks in powershell shows all have the failover setting in their strings now.

    In Studio, on configuration I see the server and mirror addresses for all three fine.

    However, if i failover the logging db to the secondary server to test, it stops logging.
    In studio if i check the logging preferences, it only lists the primary server location.

    Should that have both entries (does it support that?) or will I need to manually update this to the 2nd sql server to fail this over? Same for monitoring/site?

    I can not seem to find anything on this online or in citrix docs.

    Thanks

    1. Did you use “Set-LogDBConnection -DataStore Logging -DBConnection $mySQLString” to set the string? The key is “-datastore logging”.

      Logging service connects to the Site database. From there, it gets the string for the Logging database and connects to that. In other words, Logging has two strings.

      1. I had run the citrix power shell ones, Change_XD_Failover_Partner_v1.ps1, not manually.
        Maybe I should have to run Change_XD_To_ConnectionString.ps1 as well or do it manually for each.

        I thought I had checked all the various get-logdbconnection, etc and they all have the failover but maybe I missed something like the one you mentioned above. All registry entries seem to have the correct strings as well.

        Will try that thanks

  26. Hi Carl,

    I need to move the databases to a new standard SQL server. In your Database Maintenance Section I understand I need to run Change_XD_To_ConnectionString.ps1. That script will clear the connections to the old database and set the connections to the new string supplied correct? So where you show the steps to Remove the existing Database connections and Specify the new Database connection strings – that is just for reference?

  27. The part about RDS licensing got me confused. You say not to install licenses on the licensing server since the hosts will be configured to pull licenses. But how can they pull a license if no licenses are available since none are installed? Also, obviously as a I see it, RD Licensing Diagnoser on a RD Host says there are no licenses available on the specified licensing server.

    1. In “Per User” mode, since there’s no enforcement, it’s not necessary to install licenses, but you certainly can if you want to track them. Of course you are required to own them. The lack of licenses on the server should not stop connections.

  28. Hi Carl,

    I am working on a Citrix Cloud POC. Citrix cloud tenant has been set and our server VDAs are in AWS. I have created new test VPC for this POC and kept master image under this POC.

    I am unable to create MCS catalog using MCS service as it is throwing below error message. However, I can use other services and make the Xenapp 2016 session host server work without any issues.

    I have all neccessary permissions given to the IAM role, still no luck Any ideas?

    Error Id: XDDS:067EDB65

    Exception:
        Citrix.Orchestration.Base.LogicModels.Exceptions.ProvisioningTaskException An error occurred while preparing the image.
           at Citrix.Orchestration.Base.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeTask.ThrowOnTerminatingError(SdkProvisioningSchemeAction sdkProvisioningSchemeAction)
           at Citrix.Orchestration.Base.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeTask.WaitForProvisioningSchemeActionCompletion(Guid taskId, Action`1 actionResultsObtained)
           at Citrix.Orchestration.Base.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeCreationTask.StartProvisioningAction()
           at Citrix.Orchestration.Base.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeCreationTask.RunTask()
           at Citrix.Orchestration.Base.PowerShellSdk.BackgroundTaskService.BackgroundTask.Task.Run()
        
        DesktopStudio_ErrorId : ProvisioningTaskError
        ErrorCategory : NotSpecified
        ErrorID : FailedToCreateImagePreparationVm
        TaskErrorInformation : Terminated
        InternalErrorMessage : Value (ami-028237498284723) for parameter volumes is invalid. Expected: ‘vol-…’.
        DesktopStudio_PowerShellHistory : Create Machine Catalog ‘CitrixXA’
        3/6/2019 12:37:48 PM
        
        Get-LogSite  -AdminAddress “p26686-2-1.prodcp9.local:80” -BearerToken ********
        Start-LogHighLevelOperation  -AdminAddress “p26686-2-1.prodcp9.local:80” -BearerToken ******** -Source “Studio” -StartTime “3/6/2019 12:36:36 PM” -Text “Create Machine Catalog `’CitrixXA`'”
        New-BrokerCatalog  -AdminAddress “p26686-2-1.prodcp9.local:80” -AllocationType “Random” -BearerToken ******** -IsRemotePC $False -LoggingId “361d33e1-4910-43a9-9ea3-c2c1ef7aca7c” -MinimumFunctionalLevel “L7_6” -Name “CitrixXA” -PersistUserChanges “Discard” -ProvisioningType “MCS” -Scope @() -SessionSupport “MultiSession” -ZoneUid “348c6f84-605d-4498-8632-cd45894ecaf4”
        New-AcctIdentityPool  -AdminAddress “p26686-2-1.prodcp9.local:80” -AllowUnicode -BearerToken ******** -Domain “TESTPOC.COM” -IdentityPoolName “CitrixXA” -LoggingId “361d33e1-4910-43a9-9ea3-c2c1ef7aca7c” -NamingScheme “TESTPOCXA##” -NamingSchemeType “Numeric” -Scope @() -ZoneUid “348c6f84-605d-4498-8632-cd45894ecaf4”
        Set-BrokerCatalogMetadata  -AdminAddress “p26686-2-1.prodcp9.local:80” -BearerToken ******** -CatalogId 16 -LoggingId “361d33e1-4910-43a9-9ea3-c2c1ef7aca7c” -Name “Citrix_DesktopStudio_IdentityPoolUid” -Value “95249e31-4339-4604-85aa-38d90e3075ad”
        Test-ProvSchemeNameAvailable  -AdminAddress “p26686-2-1.prodcp9.local:80” -BearerToken ******** -ProvisioningSchemeName @(“CitrixXA”)
        New-ProvScheme  -AdminAddress “p26686-2-1.prodcp9.local:80” -BearerToken ******** -CleanOnBoot -CustomProperties “” -HostingUnitName “test vpc” -IdentityPoolName “CitrixXA” -InitialBatchSizeHint 2 -LoggingId “361d33e1-4910-43a9-9ea3-c2c1ef7aca7c” -MasterImageVM “XDHyp:\HostingUnits\testvpc\CitrixCloudPOCBase (ami-02ae67095842aed64).template” -NetworkMapping @{“0″=”XDHyp:\HostingUnits\poc vpc\\us-east-1b.availabilityzone\173.x.x.x“/24 (vpc-0de1bca62e3f93448).network”} -ProvisioningSchemeName “CitrixXA” -RunAsynchronously -Scope @() -SecurityGroup @(“XDHyp:\HostingUnits\test vpc\default.securitygroup”,”XDHyp:\HostingUnits\test vpc\test POC.securitygroup”,”XDHyp:\HostingUnits\test vpc\CitrixCloudConnector.securitygroup”) -ServiceOffering “XDHyp:\HostingUnits\poc vpc\M1 Large Instance.serviceoffering”
        Remove-ProvTask  -AdminAddress “p26686-2-1.prodcp9.local:80” -BearerToken ******** -LoggingId “361d33e1-4910-43a9-9ea3-c2c1ef7aca7c” -TaskId “b1beba4d-279e-492e-92ef-b38f4c4b4dee”
        Stop-LogHighLevelOperation  -AdminAddress “p26686-2-1.prodcp9.local:80” -BearerToken ******** -EndTime “3/6/2019 12:37:48 PM” -HighLevelOperationId “361d33e1-4910-43a9-9ea3-c2c1ef7aca7c” -IsSuccessful $False
       ************************************************************************************
      N.B: I am getting below message I test resource host connection.(3 Successful tests)

    Check for connection maintenance mode.

    Check that the hypervisor for the connection is not in maintenance mode.
    Test run on entire Site
     Host 3/6/2019 1:00:56 PM Successful 
    Check the hypervisor connection.

    Check that a connection to the hypervisor can be established.
    Test run on controllers: p26686-2-1.prodcp9.local
     Host 3/6/2019 1:00:58 PM Successful 
    Check hypervisor specific connection details

    Check the details of the hypervisor connection and run tests specific to the target hypervisor.
    Test run on controllers: p26686-2-1.prodcp9.local
     Host 3/6/2019 1:00:58 PM Successful 
    **************************************************************************************

    Below error message appears when I test network connection (3 fail tests)

    Check the hypervisor storage.

    Run the hypervisor-specific storage tests on storage locations defined in the hosting unit.
    Test run on controllers: p26686-2-1.prodcp9.local

    Controller p26686-2-1.prodcp9.local: Object reference not set to an instance of an object. 
    An unexpected error occurred.
     Host 3/6/2019 1:02:17 PM Failed 
    Check the hypervisor infrastructure.

    Run the hypervisor-specific infrastructure tests for the hosting unit.
    Test run on controllers: p26686-2-1.prodcp9.local

    Controller p26686-2-1.prodcp9.local: Object reference not set to an instance of an object. 
    An unexpected error occurred.
     Host 3/6/2019 1:02:17 PM Failed 
    Check the hypervisor networks.

    Run the hypervisor-specific network tests on the networks defined in the hosting unit.
    Test run on controllers: p26686-2-1.prodcp9.local

    Controller p26686-2-1.prodcp9.local: Object reference not set to an instance of an object. 
    An unexpected error occurred.
     Host 3/6/2019 1:02:17 PM Failed 
    Check for connection maintenance mode.

    Check that the hypervisor for the connection is not in maintenance mode.
    Test run on entire Site

    Test requires an object of type ‘HypervisorConnection’ but no object of that type was found because no root object was provided for discovery 

      3/6/2019 1:02:17 PM Not run 
    Check the hypervisor connection.

    Check that a connection to the hypervisor can be established.
    Test run on controllers: p26686-2-1.prodcp9.local

    Controller p26686-2-1.prodcp9.local: Test requires an object of type ‘HypervisorConnection’ but no object of that type was found because no root object was provided for discovery 

      3/6/2019 1:02:17 PM Not run 
    Check hypervisor specific connection details

    Check the details of the hypervisor connection and run tests specific to the target hypervisor.
    Test run on controllers: p26686-2-1.prodcp9.local

    Controller p26686-2-1.prodcp9.local: Test requires an object of type ‘HypervisorConnection’ but no object of that type was found because no root object was provided for discovery 

      3/6/2019 1:02:17 PM Not run 

    1. Hi Googletry,

      We’re experiencing the same issue when creating a machine catalog on AWS. Running the 1903 build.

      Were you able to find a solution to this issue?

    2. We get this with 1909 using VMware Cloud on AWS;

      Error Id: XDDS:067EDB65

      Exception:
      DesktopStudio_ErrorId : ProvisioningTaskError
      ErrorCategory : NotSpecified
      ErrorID : FailedToCreateImagePreparationVm
      TaskErrorInformation : Terminated

      InternalErrorMessage : A specified parameter was not correct: deviceChange[1].device.key A specified parameter was not correct: deviceChange[1].device.key

      DesktopStudio_PowerShellHistory : Create Machine Catalog ‘SDDC’
      1/21/2020 11:51:10 AM

      Error Source : Citrix Studio

      StackTrace: Citrix.Orchestration.Base.LogicModels.Exceptions.ProvisioningTaskException An error occurred while preparing the image.
      at Citrix.Orchestration.Base.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeTask.ThrowOnTerminatingError(SdkProvisioningSchemeAction sdkProvisioningSchemeAction)
      at Citrix.Orchestration.Base.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeTask.WaitForProvisioningSchemeActionCompletion(Guid taskId, Action`1 actionResultsObtained)
      at Citrix.Orchestration.Base.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeCreationTask.StartProvisioningAction()
      at Citrix.Orchestration.Base.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeCreationTask.RunTask()
      at Citrix.Orchestration.Base.PowerShellSdk.BackgroundTaskService.BackgroundTask.Task.Run()

      1. We do have the same problem:
        Error Id: XDDS:067EDB65
        InternalErrorMessage : A specified parameter was not correct: deviceChange[1].device.key

        Any solution for it?

      2. I’m curious if you got anywhere on this issue? I have teh same issue trying to deploy VDI on an existing catalog that previously worked, and the same issue trying to create a new catalog with a new master image vm…

        1. I tried a new machine catalog as well! Same issue! I don’t have the possibilty of updating anything now.
          At least I am not the only one….
          Are you working with VMware? If yes, which vCenter version?

          1. we are using VMware, and I now our vcenter was upgraded last week FROM version 6.5 TO Version 7.0. here is an example log…

            Error Id: XDDS:0DAA3833

            Exception:
            Citrix.Console.Models.Exceptions.ProvisioningTaskException An error occurred while preparing the image.
            at Citrix.Console.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeTask.CheckForTerminatingError(SdkProvisioningSchemeAction sdkProvisioningSchemeAction)
            at Citrix.Console.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeTask.WaitForProvisioningSchemeActionCompletion(Guid taskId, Action`1 actionResultsObtained)
            at Citrix.Console.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeCreationTask.StartProvisioningAction()
            at Citrix.Console.PowerShellSdk.ProvisioningSchemeService.BackgroundTasks.ProvisioningSchemeCreationTask.RunTask()
            at Citrix.Console.PowerShellSdk.BackgroundTaskService.BackgroundTask.Task.Run()

            DesktopStudio_ErrorId : ProvisioningTaskError
            ErrorCategory : NotSpecified
            ErrorID : FailedToCreateImagePreparationVm
            TaskErrorInformation : Terminated
            InternalErrorMessage : A specified parameter was not correct: deviceChange[1].device.key A specified parameter was not correct: deviceChange[1].device.key
            DesktopStudio_PowerShellHistory : Create Machine Catalog ‘vdi_dev_1809’
            6/18/2020 7:41:15 AM

        2. [not sure why I can’t reply to your latest post June 19, 2020 at 2:54 pm so I use this post to reply….]

          We updated to vCenter Server from 6.5 to 7 as well. So it has to do with the update or version 7.

          I will try some more ideas within the next days. Or someone else comes up who solved it 🙂

          I will keep you updated here

          1. That’s an explanation…. thank you for the hint!
            Too bad because we needed to update only vCenter Server to version 7 (in order to update the ESX hosts with Update Manager) but didn’t update the ESX hosts itself. They are still on vSphere 6.7U3.

            That makes it realy complicated now because 2006 requires minimum Windows Server 2016 as well as SQL Server 2016. Both not in place so upgrades needed.

            Well, anyway thank you very much for saving me the additional time I would have spent trying other things.

          2. I guess I don’t understand, updating ONLY vCenter to version 7.0 is the ultimate issue? I guess I assumed if the hosts didn’t go to an unsupported version then it wouldn’t have been an issue… I have a call with tech support this morning so i’ll let you know the results….

          3. So with vCenter 7 installed you are lost for the moment according to Carl Stalhood‘s latest newsletter. Citrix dropped support in its latest version 2006 which would have been the only version supporting vCenter 7….. too bad. I’m stuck now. Won’t downgrade vCenter and (most probably) have to wait until 2009 comes out?!

          4. Phil, I am working on creating my VM/VDI systems inside vSphere, then adding them to a brand new catalog… bout the only thing I know to do at this point…

Leave a Reply

Your email address will not be published. Required fields are marked *