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 (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, vSphere, and XenServer.

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

Considerations

  • 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.

Limitations

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

Requirements

Hypervisor CVAD release required Supported Citrix Provisioning version
Azure 2311 2311 and later
VMware 2402 LTSR (Catalog creation only through PowerShell) 2402 and later
XenServer 2407 (Catalog creation only through PowerShell) 2407 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

Note:

  • For Azure environement, you can create a Citrix Provisioning catalog using Studio or Web Studio.
  • For VMware environment, You can now create Citrix Provisioning catalogs using Studio and PowerShell commands.
  • For XenSever environments, you can currently create the catalogs using only PowerShell commands.

If using Studio:

  1. Sign in to Citrix Cloud.
  2. In the left pane, select Machine Catalogs.

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 Studio 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 or VMware 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.

      Note:

      • The site field shows only sites registered with the Citrix Cloud.
      • While you create a Citrix Provisioning catalog, on the Target Device page, you might see that in the drop-down menu to select the farm and site for the machines to be provisioned, there are farms and sites listed that no longer exist. As a workaround, you can run the PowerShell command Unregister-HypPvsSite to remove the farms and sites from the database. For information on the PowerShell command, see DaaS: Unregister-HypPvsSite and Citrix Virtual Apps and Desktops: Unregister-HypPvsSite.
    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.

    Note:

    For VMware environment, configure and enable the write-back-cache on the Virtual Machines page.

  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.

    Note:

    This step is applicable for Azure environment only.

  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>.

    Note:

    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 and VMware 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 Studio 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
    <!--NeedCopy-->
    

    Example in VMware:

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

    Example in Azure:

    New-ProvScheme -AdminAddress "<address>" -CleanOnBoot `
    -ProvisioningSchemeType PVS `
    -CustomProperties "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`">
    <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\default.network"} `
    -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
    <!--NeedCopy-->
    

    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
    <!--NeedCopy-->
    

    Example in XenServer:

    $ps = New-ProvScheme -AdminAddress "<address>" -CleanOnBoot `
    -ProvisioningSchemeType PVS `
    -HostingUnitName "xen2" -IdentityPoolName   $catName `
    -InitialBatchSizeHint 1 `
    -VMCpuCount 2 `
    -VMMemoryMB 8192 `
    -NetworkMapping @{"0"="XDHyp:\HostingUnits\xen2\VM Network - 2607.network"} `
    -ProvisioningSchemeName $catName `
    -UseWriteBackCache -WriteBackCacheDiskSize 40 `
    -PVSSite e9524976-8fc3-4ada-bf46-2156afdf4aa1 -PVSvDisk 22404f4e-d65d-4072-abfe-161cbe7a952c `
    -MasterImageVM "XDHyp:\HostingUnits\xen2\pvstemplate.vm\pvs_template.snapshot"
    $ps
    Add-ProvSchemeControllerAddress -ProvisioningSchemeUid $ps.ProvisioningSchemeUid -ControllerAddress @("W2K22ST-U5DN1I0.serenity.local")
    <!--NeedCopy-->
    
  5. Create a broker catalog.

    Example in Azure:

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

    Example in VMware:

    New-BrokerCatalog `
    -AllocationType Random `
    -Name $catName `
    -PersistUserChanges Discard `
    -ProvisioningType MCS `
    -ProvisioningSchemeId $ps.ProvisioningSchemeUid `
    -SessionSupport MultiSession `
    -MinimumFunctionalLevel L7_34
    <!--NeedCopy-->
    
  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
    <!--NeedCopy-->
    

Delete WBC disk at shutdown

While creating an MCS provisioned Citrix Provisioning catalogs in Azure, you can provision the WBC disk to be non-persistent (PersistWBC as False). This configuration helps to delete the write-back cache (WBC) disk after you shut down the VM for MCS provisioned Citrix Provisioning catalogs in Azure.

Condition

You must set the custom property PreformatWriteBackCache as True for this feature to work.

Example

Example of creating an Azure catalog with PersistWBC as False and PreformatWriteBackCache as True:

$customProperties = @'
<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Property xsi:type="StringProperty" Name="PersistWBC" Value="false" />
<Property xsi:type="StringProperty" Name="PreformatWriteBackCache" Value="true" />
</CustomProperties>
'@

New-ProvScheme -CleanOnBoot `
-ProvisioningSchemeName "provisioningschemename" `
-HostingUnitName "hostingunitname" `
-IdentityPoolName "identitypoolnamename" `
-MasterImageVM "XDHyp:\HostingUnits\AzureHostingUnit\image.folder\rg.resourcegroup\masterImage.manageddisk" `
-CustomProperties $customProperties `
-NetworkMapping $networkMapping `
-UseWriteBackCache `
-WriteBackCacheDiskSize 30
<!--NeedCopy-->

You can update an existing catalog using the Set-ProvScheme command to update the PersistWBC custom property.

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
     <!--NeedCopy-->
    

    Note:

    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

    Note:

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