Citrix Provisioning

Create Citrix Provisioning catalogs in Citrix Studio

Currently, Citrix provides two provisioning solutions for creating VMs, Citrix Provisioning and Machine Creation Services (MCS).

To create a Citrix Provisioning catalog, you had to use the Citrix Virtual Apps and Desktops Setup Wizard. With this feature, you can now create a Citrix Provisioning catalog by using Citrix Studio (Full Configuration interface (for Citrix DaaS) and Web Studio (for on-premises Citrix Virtual Apps and Desktops deployment)), and PowerShell.

This implementation provides you the following advantages:

  • A single unified console to manage both MCS and Citrix Provisioning catalogs.
  • Have new features for Citrix Provisioning catalogs, such as, identity management solution, on-demand provisioning and so on.

Currently, this feature is available to Azure and VMware.

This article explains how to create an Azure Citrix Provisioning catalog using the Citrix Studio user interface and PowerShell commands.


  • Image management is done using the existing Citrix Provisioning console.
  • Only Boot Device Manager (BDM) is supported.
  • While provisioning Citrix Provisioning target VMs, select the site for the target VMs. Ensure that the site is registered.


Consider the following limitations for Azure:

  • Gen 2 VMs are only supported.
  • You can create a catalog using a machine profile. Do not enable hibernation in the machine profile input.
  • You cannot set the following custom properties while creating the catalog:

    • StorageType
    • OsType
    • MachinesPerStorageAccount
    • StorageAccountsPerResourceGroup
    • UseSharedImageGallery
    • SharedImageGalleryReplicaRatio
    • SharedImageGalleryReplicaMaximum
    • UseEphemeralOsDisk
    • UseManagedDisks
    • StorageTypeAtShutdown

Consider the following limitation for VMware:

  • Secure boot for the VM template is not supported. Therefore, do not select the Secure Boot check box under Boot Options in vSphere Client inventory.


Hypervisor CVAD release required Supported Citrix Provisioning version
Azure 2311 2311 and later
VMware 2402 (Catalog creation only through PowerShell) 2402 and later

Key steps

  1. Set up Citrix Provisioning.
  2. Join your farm with Citrix Cloud or Citrix Virtual Apps and Desktops site. See Join Citrix Cloud or Citrix Virtual Apps and Desktops site.
  3. Create a master target device.
  4. Create a vDisk using the Imaging Wizard. See Using the Imaging Wizard to create a virtual disk.
  5. Add a connection to the hypervisor. See Citrix DaaS: Create and manage connections and resources and Citrix Virtual Apps and Desktops: Create and manage connections and resources.
  6. Create a Citrix Provisioning catalog.
  7. Check the collections in the Citrix Provisioning Console under Sites.

Create a Citrix Provisioning catalog using the Citrix Studio interface


Currently, you can create a Citrix Provisioning catalog using the Full Configuration interface or Web Studio in only the Azure environment. In VMware environments, you can currently create the catalogs using only PowerShell commands.

If using the Full Configuration interface:

  1. Sign in to Citrix Cloud. In the upper left menu, select My Services > DaaS.
  2. From Manage > Full Configuration, select Machine Catalogs in the left pane.

If using the Web Studio:

  1. Sign in to Web Studio, select Machine Catalogs in the left pane.

To create a Citrix Provisioning catalog using the Full Configuration interface or Web Studio:

  1. Select Create Machine Catalog. The catalog creation wizard opens.
  2. On the Machine Type page, select a machine type for this catalog, such as Multi-session OS or Single-session OS.
  3. On the Machine Management page, select the settings as follows:

    1. Select Machines that are power managed (for example, virtual machines or blade PCs).
    2. Select Citrix provisioning technology. Then, select Citrix Provisioning Services (PVS).
    3. In the Resources field, select an Azure network resource for this catalog.
  4. (Viewable only to single-session-OS catalogs) On the Desktop Experience page, select the random or static desktop experience as needed.
  5. On the Target Device page, select the following:

    1. Select the farm and site for the machines to be provisioned.


      The site field shows only sites registered with the Citrix Cloud.

    2. Select the vDisk to use with the provisioned machines.
    3. Select a machine profile for the provisioned machines.
  6. On the Storage and License Types page, select the storage to use for this catalog and select the Windows volume licenses to provision VMs in Azure.
  7. On the Virtual Machines page, select the count of VMs, VM size, and availability zone.
  8. On the NICs page, add the NICs you want the VMs to use.
  9. On the Disk Settings page, select the storage type and size of the write-back cache disk.
  10. On the Resource Group page, choose whether to create resource groups or use existing groups. When you select Create a resource group to provision machines, a resource group is created with a name in the following format: citrix-xd-<ProvSchemeId>-<Random5CharacterSuffix>.


    When you delete the catalog, the associated resource group is also deleted along with it.

  11. On the Machine Identities page:

    1. Select an Identity type. Currently, you can select Hybrid Azure Active Directory joined only for Azure environment.
    2. Select Create new Active Directory accounts. Specify an account naming scheme.
  12. On the Domain Credentials page, click Enter credentials. Enter your domain credentials to perform account operations in the target Active Directory domain.
  13. On the Summary page, enter a name for the machine catalog, and click Finish.

A Citrix Provisioning machine catalog is now created.

Create a customer-managed encryption key enabled catalog

You can create a Citrix Provisioning catalog enabled with customer-managed encryption key (CMEK) using the Full Configuration interface and PowerShell commands in Azure environments.

You can create a machine-profile based catalog. The important considerations are:

  • If there is a custom property or machine profile with DES Id, it always overrides the master image DES Id if they’re different.
  • If master image does not have DES Id, then DES Id in custom property overwrites DES Id value in the machine profile.
  • You can change the DES Id of an existing catalog if the master image does not have DES Id. The new VMs only have the new DES Id.
  • You can update an existing catalog to a CMEK enabled catalog.
  • You cannot apply DES Id change to the existing VMs.

For more information on Azure Customer-managed encryption key, see Azure Customer-managed encryption key.

Create a Citrix Provisioning catalog using PowerShell commands

  1. If you are not on the Citrix Provisioning server or on a system that has the Citrix Provisioning console installed, then download and install the latest Remote PowerShell SDK. For more information, see Install and use the Remote PowerShell SDK.
  2. Open the PowerShell window.
  3. Run the PowerShell commands to create a broker catalog and identity pool.

    Example in Azure:

    New-AcctIdentityPool -IdentityPoolName $catName -NamingScheme "$($catName)##" -NamingSchemeType Numeric -Domain serenity.local

    Example in VMware:

    New-AcctIdentityPool `
    -IdentityPoolName $catName `
    -NamingScheme "$($catName)##" `
    -NamingSchemeType Numeric `
    -Domain $domain `
    -ZoneUid $zone.Uid
  4. Run the New-ProvScheme command to create the catalog.

    Example in Azure:

    New-ProvScheme -AdminAddress "<address>" -CleanOnBoot `
    -ProvisioningSchemeType PVS `
    -CustomProperties "<CustomProperties xmlns=`"`" xmlns:xsi=`"`">
    <Property xsi:type=`"StringProperty`" Name=`"UseManagedDisks`" Value=`"true`" />
    <Property xsi:type=`"StringProperty`" Name=`"OsType`" Value=`"Windows`" />
    <Property xsi:type=`"StringProperty`" Name=`"StorageType`" Value=`"Premium_LRS`" />
    <Property xsi:type=`"StringProperty`" Name=`"PersistWBC`" Value=`"true`" />
    <Property xsi:type=`"StringProperty`" Name=`"PersistOsDisk`" Value=`"false`" />
    <Property xsi:type=`"StringProperty`" Name=`"PersistVm`" Value=`"false`" />
    <Property xsi:type=`"StringProperty`" Name=`"WBCDiskStorageType`" Value=`"Premium_LRS`" />
    <Property xsi:type=`"StringProperty`" Name=`"UseTempDiskForWBC`" Value=`"false`" />
    <Property xsi:type=`"StringProperty`" Name=`"ResourceGroups`" Value=`"acbdpvs`" />
    <Property xsi:type=`"StringProperty`" Name=`"LicenseType`" Value=`"Windows_Server`" />
    <Property xsi:type=`"StringProperty`" Name=`"Zones`" Value=`"1`" />
    </CustomProperties>" `
    -HostingUnitName "AzueRes"
    -IdentityPoolName $catName `
    -InitialBatchSizeHint 1 -LoggingId "854xxxxx-2xxx-42e0-axxx-8c6xxx406xxx" `
    -MachineProfile "XDHyp:\HostingUnits\AzueRes\machineprofile.folder\abcdpvs.resourcegroup\abvda.vm" `
    -NetworkMapping @{"0"="XDHyp:\HostingUnits\AzueRes\\virtualprivatecloud.folder\East US.region\virtualprivatecloud.folder\abcdpvs.resourcegroup\fbgv-vnet.virtualprivatecloud\"} `
    -ProvisioningSchemeName $catName `
    -ServiceOffering "XDHyp:\HostingUnits\AzueRes\serviceoffering.folder\Standard_D2s_v3.serviceoffering" `
    -UseWriteBackCache -WriteBackCacheDiskSize 40 `
    -PVSSite 6556cxxx-fc88-45f6-8xxx-ea4b665e9xxx -PVSvDisk cf056xxx-f69b-xxxx-9a60-c41072b8xxxx

    Example in VMware:

    $ps = New-ProvScheme -CleanOnBoot  `
    -ProvisioningSchemeType PVS `
    -HostingUnitName $hostingUnit `
    -IdentityPoolName $catName `
    -MasterImageVM $machineProfile `
    -ProvisioningSchemeName $catName `
    -UseWriteBackCache -WriteBackCacheDiskSize 32
    -PVSSite $pvsSite.SiteId `
    -PVSvDisk $vDisk.DiskLocatorId
  5. Create a broker catalog.

    Example in Azure:

    New-BrokerCatalog -AllocationType Random -Name $catName -PersistUserChanges Discard -ProvisioningType MCS -ProvisioningSchemeId $ps.ProvisioningSchemeUid -SessionSupport MultiSession

    Example in VMware:

    New-BrokerCatalog `
    -AllocationType Random `
    -Name $catName `
    -PersistUserChanges Discard `
    -ProvisioningType MCS `
    -ProvisioningSchemeId $ps.ProvisioningSchemeUid `
    -SessionSupport MultiSession `
    -MinimumFunctionalLevel L7_34
  6. Add one VM to the catalog using the Studio UI or the following PowerShell command. Example:

    $adId = New-AcctADAccount -Count 1 -IdentityPoolName $catName
    New-ProvVM -ProvisioningSchemeName $catName -ADAccountName $adId.SuccessfulAccounts.ADAccountName

Check the collections in the Citrix Provisioning Console under Sites

After the Citrix Provisioning catalog is created, in the Citrix Provisioning console, you can see two types of collections under Site in the Citrix Provisioning console:

  • PVS Provisioned Collections: All PVS-provisioned collections in the site
  • Studio Provisioned Collections: All Studio-provisioned collections in the site

In the Studio Provisioned Collections, you can see collections with the same name as the Studio catalog.

Image of collections in the Citrix Provisioning console under site

Citrix Provisioning PowerShell SDK to get site and vDisk information

  • To get the list of Citrix Provisioning sites where each site lists the Citrix Provisioning servers that are in that site, run the PowerShell command Get-HypPvsSite. For example:

     Get-HypPvsSite -SiteId 00000000-0000-0000-0000-000000000000 -SiteName "exampleSite" -FarmId 00000000-0000-0000-0000-000000000000 -FarmName "exampleFarm" -ResourceLocation 00000000-0000-0000-0000-000000000000


    All the parameters are optional in Get-HypPvsSite command. If you don’t enter any parameters, you get the list of all the registered sites.

  • To get a list of vDisks where each vDisk lists the site that it can be used with that vDisk, run the PowerShell command Get-HypPvsDiskInfo. For example, you can run one of the following:

    • Get-HypPvsDiskInfo -FarmId 00000000-0000-0000-0000-000000000000
    • Get-HypPvsDiskInfo -SiteId 00000000-0000-0000-0000-000000000000 -StoreId 00000000-0000-0000-0000-000000000000
    • Get-HypPvsDiskInfo -SiteId 00000000-0000-0000-0000-000000000000 -DiskLocatorId 00000000-0000-0000-0000-000000000000


    The command queries FarmId from registered sites using SiteId when no FarmId is given.