VMware Horizon 2312: Virtual Desktop Pools

Last Modified: Jan 25, 2024 @ 10:21 am

This article details Horizon pool configuration for Virtual Desktops. RDS Farms and pools are detailed in a separate article at https://www.carlstalhood.com/vmware-horizon-8-rds-farms-pools/.


This post applies to all VMware Horizon versions 2006 (8.0) and newer.

Change Log

Non-Persistent – Instant Clones

All editions of Horizon 2006 and newer include Instant Clones so there is no need to use Composer. Composer is deprecated in Horizon 2006. Composer was removed from Horizon 2012 (8.1) and newer.

Notes on Instant Clones:

  • The master VM snapshot is copied to every LUN containing instant clones. Composer does the same.
  • If you deploy 12+ VMs per host of the same pool, then “Parent” machines are created on each ESXi host for each datastore. These “parent” machines are powered on and consume CPU/Memory/Disk resources. If you have six hosts and three datastores containing instant clones, then Horizon creates 18 parent virtual machines. Composer does not need parent virtual machines.
    • For lower density, Horizon 2006 and newer support Smart Provisioning, which eliminates the need for “Parent” machines. See the Smart Provisioning YouTube video for an overview.
    • Horizon 2306 (8.10) and newer now default to no longer creating parent virtual machines.
  • Horizon 2306 (8.10) and newer support Persistent Disks with dedicated Instant Clones. See VMware 93091 Guidelines for Persistent Disk Migration from Horizon 7 Environments to Horizon 8.
    • An alternative is Microsoft FSLogix, or VMware App Volumes Writable Volumes
  • See Instant-Clone Desktop Pools at VMware Docs.
  • Also see VMware Technical White Paper VMware Horizon 7 Instant-Clone Desktops and RDSH Servers

Infrastructure Prep

  • Instant Clones in Horizon 2303 and newer require vSphere 7 or newer. vSphere 6.7 and older will not work.
  • Each desktop pool points to one vSphere cluster.
  • Ensure vSwitch has sufficient ports for the new virtual desktops.
    • Instant Clones in Horizon 8.1 and newer support all port bindings, including ephemeral. Older versions of Horizon, including Horizon 7.x, require static port binding.
  • Ensure the VLAN has enough DHCP addresses for the desktop pool.
  • KMS Licensing is required, preferably using Active Directory-based activationMAK licensing (VMware Docs) is not supported until Horizon 2212 and newer.
  • The virtual desktop pools will use the same hardware specs (e.g., vCPUs, memory size, network label, GPU) specified on the master virtual desktop. Adjust accordingly.
  • The master image should be in the same vSphere cluster where the instant clone virtual desktops will be created.
  • ESXi must be version 6 update 1 or newer
  • Master VM must be version hardware version 11 or newer
  • In Horizon Console, add Instant Clone Domain Accounts
  • In Horizon Console, enable View Storage Accelerator on your vCenter connection.
  • If you upgrade vCenter from version 6.5 or older to version 6.7 or later, then you must upgrade your ESXi hosts to version 6.7 or later at the same time. Afterwards, take a new snapshot of the master image and perform a push operation. See Upgrade Instant-Clone Desktop Pools When You Upgrade vCenter Server to vSphere 6.7 or Later at VMware Docs.
  • Windows 11 – VMware says don’t add vTPM to the gold image. Instead add the vTPM when creating the Instant Clone pool or Full Clone pool. There are various methods of installing Windows 11 without a vTPM. See VMware KB article 85960 VMware Horizon and Horizon Cloud readiness for Microsoft Windows 11.
  • vTPM requires a Key Provider. vSphere 7 has a Native Key Provider that does not need any additional servers or licenses.
    1. In vSphere Client, in Inventory, click the vCenter object. On the right, on the Configure tab, scroll down to Key Providers and add a Native Key Provider.
    2. After it’s added, select it and then click Back-up to activate it.

Disk space

  • One or more LUNs (datastores) for storage of the virtual desktops.
  • By default, Replicas are copied to each LUN that contains virtual desktops.
    • It’s possible to place the Replica and the instant clones on separate LUNs. If you use a dedicated Replica LUN, then there is only one copy of the Replica no matter how many LUNs are used for storing virtual desktops.
    • Note: NFS VAAI requires the Replica to be copied to each virtual desktop LUN.
  • .vswp files – Plan for disk space for memory swap and graphics memory overhead. If the master virtual desktop has 4 GB of RAM configured and if none of its memory is reserved then each linked clone will have a 4 GB .vswp file.
    • To reduce the size of the .vswp files, edit each virtual desktop and reserve its memory. Whatever memory is reserved will be subtracted from the .vswp file size.
  • Instant Clone Delta disks – Delta disks start small whenever the virtual desktop boots and grow until the user logs off of the virtual desktop and it reboots.

Non-Persistent, Floating, Automatic, Instant Clone Desktop Pool

Master Image Preparation

Do the following on the master image that the virtual desktops will link to:

  1. Video Memory – shut down the master, Edit Settings (hardware) in vSphere client, expand Video card, and set video memory. More video memory means more client monitors. The maximum number of displays and maximum resolution of client monitors depends on the ESXi version, the Horizon version, and the Windows version with newest versions providing the greatest number of client monitors.
  2. DHCP – Make sure the master VM is configured for DHCP.
  3. Join domain – Join the master VM to the domain.
  4. Computer Group Policy – Make sure the Master VM is in the same OU as the Instant Clones so the Master VM will get the computer-level GPO settings. Run gpupdate on the master after moving the VM to the correct OU. New Instant Clones do not immediately refresh group policy so the group policy settings must already be applied to the master VM. See VMware 2150495 Computer-based Global Policy Objects (GPOs) that require a reboot to take effect are not applied on instant clones.
  5. KMS Licensing or Active Directory-Based Activation (recommended) is required.
  6. Snapshot – Shut down the master image and take a new snapshot.

Floating Pool

Use Horizon Console to create an Instant Clone pool:

  1. Login to Horizon Console.
  2. On the left, under Inventory, click Desktops.
  3. On the right, if you select an existing pool, you can click Duplicate to copy the settings to a new pool.
  4. On the right, click Add.
  5. In the Type page, select Automated desktop pool.
  6. In the vCenter Server page, select Instant Clone, select a vCenter server, and click Next. Notice that Composer is no longer an option.
  7. In the User Assignment page, select Floating, and click Next.
  8. In the Storage Optimization page, if you want to use storage tiering, check the box for Select separate datastores for replica and OS disk. Click Next.
  9. In the Desktop Pool Identification page, do the following:
    1. Give the pool a unique ID, which is not shown to the users. Horizon creates a vCenter VM folder with the same name as the Pool ID.
    2. Enter a Display name, which is shown to the users.
    3.  If you intend to use Identity Manager (aka VMware Access), then leave Access group set to /. Otherwise, if you intend to delegate administration of this pool, then select an Access group that the delegated administrators have been assigned to.
  10. Click Next.
  11. In the Provisioning Settings page, do the following:
    • In Virtual Machine Naming, enter a Naming Pattern. You can use {n:fixed=3} to specify the location for incremented numerals in the machine names. Make sure the naming pattern does not conflict with any existing machines. Remember, the maximum computer name length is 15 characters.
      • Horizon 2103 (8.2) and newer let you Specify Names Manually instead of using a naming pattern.
    • In Desktop Pool Sizing, enter the maximum number of desktops to create. Ensure that the DHCP scope has enough addresses for the Max number of desktops specified here. If your desktop pool size exceeds a single VLAN, then you can create multiple pools and combine them into a Cloud Pod Global Entitlement.
    • Select Provision all machines up-front to create all of the machines now.
    • Or select Provision machines on demand, which tells Horizon to create the machines (up to the maximum) as users connect.
    • If you’re not creating all machines up-front, then specify the Number of spare (powered on) machines. As users connect, Horizon creates more machines to try to keep this number of spare machines running and waiting for a new connection.
  12. If Windows 11, consider checking the box to Add vTPM Device to VMs.
  13. Click Next.
  14. In the vCenter Settings page, most of these are self-explanatory. Click Browse next to each option and make your selection.

    • If the Golden Image VM (aka Parent VM or Master VM) is not showing up in the list, then check the box next to Show all parent VMs and click the … next to the VM to see the issue.
    • Instant Clones monitors/resolution – the number of monitors configured on the Master Image (snapshot) is displayed. If not correct, delete the snapshot, edit the master VM’s Hardware Settings, expand video card, make your desired changes, and take another snapshot.
    • Scroll down for more settings.
    • VM Folder Location – Horizon will create a folder under the location (e.g., datacenter) you choose. Make sure the folder names don’t have any spaces in them.
    • Datastores – select one or more datastores on which the virtual desktops will be placed.
    • If you selected to put Replica on a different datastore, then you’ll have another Browse button for Replica disk datastores.
    • When selecting Networks, you can use the Network from the parent image, or uncheck the box and select a different network.
  15. In Horizon 2206 and newer, in the VM Compute Profile Settings section, you can change the CPU, RAM, and Cores per socket assigned to each new virtual desktop.
  16. Click Next when done.
  17. In the Desktop Pool Settings page:
    1. You can select a Category Folder where the published icon will be placed on the client’s Start Menu and/or Desktop.

      1. Change the selection to Select a category folder from the folder list.
      2. You can type in a new category, or select an existing one.
      3. Then click Submit.
    2. In the Desktop Pool Settings page, Horizon Enterprise Edition lets you select a Session Type, which means you can optionally publish applications from virtual desktops.
    3. Change the selection for Logoff after disconnect to After, and specify a disconnect timer.

      • You can also use Group Policy to configure this. The GPO overrides the pool setting. Install the Horizon GPO Templates if you haven’t already. Edit a GPO that applies to the Horizon Agents. Find the Disconnect Session Time Limit (VDI) setting at VMware View Agent Configuration > Agent Configuration.
      • Horizon also has an Idle Time Until Disconnect (VDI) for virtual desktops. Note: RDSH idle timer is configured using Microsoft RDSH GPO settings, not Horizon GPO settings.
    4. You can allow users to restart their machines.
    5. If you choose Dedicated assignment instead of Floating assignment, there’s an option for Refresh OS disk after logoff. Leaving it set to Always is strongly recommended. The other options cause the delta disk to grow, and will cause data loss surprise for the users when you later push a new image. Instant Clones floating assignment pools always refresh on logoff.
    6. Reclaim VM disk space is also an option for Dedicated assignment pools. Floating assignment pools always refresh on logoff so there’s no need to reclaim disk space.
  18. Click Next.
  19. In the Remote Display Settings page:
    1. In 3D Renderer, there’s an option for NVIDIA GRID VGPU if you have GPUs installed.
    2. There’s an Allow Session Collaboration checkbox, which adds a VMware Horizon Collaboration icon in the system tray of the remote desktop, which lets you invite users to collaborate.  See Session Collaboration for details.
  20. Click Next.
  21. In the Guest Customization page,
    1. Next to AD container, click Browse, and select the OU where virtual desktop computer objects will be placed. You can type (paste) into the AD container field.
    2. Consider checking the box next to Allow reuse of pre-existing computer accounts.
  22. Click Next.
  23. In the Ready to Complete page, you may entitle users now, or leave it unchecked and do it later. Click Submit.

If you opted to add entitlements now:

  1. In the Add Entitlements window, click Add.
  2. Find a group that will have permission to log into these desktops, and click OK.
  3. Then click OK.

To check the status of the virtual desktops:

  1. Go to Inventory > Desktops.
  2. You might have to click the refresh icon on the top right to see the new pool.
  3. Click the link for the pool name.
  4. On the Summary page, if you scroll down, the vCenter Server section has a State field where you can see the status of the pool creation process.  It takes several minutes to publish the master image snapshot. After the snapshot is copied to the Replica, vSphere creates a digest file for View Storage Accelerator, which takes a few more minutes.
  5. Horizon Console has a Pending Image progress bar that doesn’t update automatically. To refresh it, scroll up and click the refresh icon.

  6. You can watch the progress in vSphere Client’s Recent Tasks list. In high-density pools, Instant Clones are forked from the cp-parent machine. In low-density pools, Instant Clones are cloned from the cp-replica.

  7. Eventually the pool’s tabs named Machines and Machines (InstantClone Details) will show the new machines.
  8. iccleanup.cmd can show you (list) the structure of the Instant Clones. For higher-density pools, there is a cp-parent at the bottom of the hierarchy. For Smart Provisioning of lower-density pools, there is no cp-parent.

If you wish to automate the creation of the pool, Aresh Sarkari at Automating Desktop Pool creation using PowerCLI – VMware Horizon 7.x explains New-HVPool -spec 'C:\temp\DesktopPool\LinkedClone.json' and the contents of the JSON file.

Entitle Virtual Desktops

To make a pool accessible by a user, it must be entitled.

  1. In Horizon Console, go to Inventory > Desktops.
  2. Click the link for a pool name.
  3. Switch to the Entitlements tab to see the existing entitlements.
  4. Click Add entitlements.
  5. In the Add Entitlements window, click Add.
  6. Find a group that will have permission to log into these desktops, and click OK.
  7. Then click OK.

Add Machine to Pool

  1. In Horizon Console, on the left, expand Inventory, and click Desktops.
  2. On the right, click the link for an existing Desktop Pool.
  3. At the top, click Edit.
  4. Switch to the Provisioning Settings tab, scroll down, and change the Max number of machines. Then click OK.
  5. With Instant Clones, this won’t take very long. In high-density pools, the new machine is forked from the cp-parent. In low-density pools, the new machine is cloned from the cp-replica.

  6. If you open the pool, the tabs named Machines and Machines (InstantClone Details) show the new machines.

Update a Pool

Master Image Preparation

  1. Power on the master/parent virtual desktop.
  2. After making your changes, shut down the master virtual desktop.
  3. Right-click the virtual machine and take snapshot. You must create a new snapshot.
  4. You’ll need to periodically delete the older snapshots. Right-click the master VM, and click Manage Snapshots.
  5. Delete one or more of the snapshots.
  6. In Horizon Console, go to Inventory > Desktops.
  7. Click the link for a pool name.
  8. On the Summary tab, click Maintain, and then click Schedule.
  9. In the Image page, select the new snapshot. Notice the snapshot’s monitor/resolution settings. Click Next.
  10. In the Scheduling page, decide when to apply this new image. If you select Force users to log off, notice you can customize the logoff message in Global Settings. Click Next.
  11. In the Ready to Complete page, click Finish.
  12. The pool’s Summary tab, near the bottom, indicates that the image is being pushed.

  13. You can click the tab named Machines (InstantClone Details) to check on the status of the push task. Notice the Pending Image.
  14. The snapshot is copied to each datastore.
  15. The snapshot is attached to a Replica, powered on, then powered off. Digest is then computed.
  16. Then the Replica is attached to a parent, and the parent is powered on. This all takes a bit of time. But the existing Instant Clones remain accessible until the Replica preparation is complete.
  17. Once Replicas are prepared, each machine is rebooted once.
  18. Eventually the Pending Image field will be cleared and the desktops are available again.

Host Maintenance – Instant Clones

Horizon 2012 (8.1) and newer have an option to Disable ParentVMs so vSphere Update Manager can put the hosts into maintenance mode. This uses the parentless Smart Provisioning technology. Find the option at Settings > Servers, select a vCenter server, click the More menu, and select Disable ParentVMs.

ESXi hosts running Instant Clones can be placed into maintenance mode without any special instructions.

Instant-Clone Maintenance Utilities at VMware Docs:

  • IcCleanup.cmd – use this utility to unprotect and delete some or all of the internal VMs created by instant clones. This is the easiest method of cleaning up Instant Clone internal machines.
  • IcUnprotect.cmd – use this utility to unprotect folders and VMs, delete VMs, and detect VMs whose master image or snapshot is deleted.
  • IcMaint.cmd – This command deletes the master images, which are the parent VMs in vCenter Server, from the ESXi host, so that the host can be put into maintenance mode. This utility generally isn’t needed. Also see VMware 2144808 Entering and exiting maintenance mode for an ESXi host that has Horizon instant clones.

Persistent Full Clones – Automated

Horizon can clone your Template machine to a specified number of Full Clones. Once Full Clones are created, you’ll need a Software Deployment tool, like Microsoft SCCM, to manage the Full Clones.

Customization Specification

Horizon uses a Customization Specification to specialize each machine cloned from the template:

  1. In vSphere Client, open the Menu and click Policies and Profiles.
  2. Make sure you have a Customization Specification with the settings detailed in the next few steps. You can create a new Customization Specification.
  3. In the Computer name page, set it to Use the virtual machine name.
  4. In the Windows license page, you can optionally set it to Include server license information but change it to Per seat.
  5. In the Network page, make sure the networks are set to DHCP. Once the machines are created you can manually set them to Static or configure DHCP reservations.
  6. In the Workgroup or domain page, enter credentials to join the new Full Clones to the domain.

Gold Image Template

  1. On the gold image machine, in sysdm.cpl > Advanced > User Profiles > Settings, make sure there are no local profiles other than your administrator profile and the Default Profile. Delete all others. Sysprep frequently fails if there is more than one profile on the template.
  2. If you have SCCM Client installed on your Gold Image, then see Prepare the client computer for imaging.
  3. Shut down the Gold Image.
  4. Right-click the gold image, expand Template, and then click Convert to Template.
  5. Before creating a pool, test deploying a new machine from the template to make sure SysPrep is successful.
    1. Right-click the Template and click New VM from This Template.
    2. In the Select clone options page, check the boxes next to Customize the operating system and Power on virtual machine after creation.
    3. In the Customize guest OS page, select the Customization Specification you created earlier.
    4. If cloning fails, then see VMware 2001932 Locations of sysprep log files. Store apps (aka UWP apps) are a frequent cause of SysPrep failures. You can convert your Template back to a Virtual Machine, power it on, fix the problem, power it off, and then convert it to a Template again.

Automated Full Clone Pool

  1. In Horizon Console, in the left menu, expand Inventory and then click Desktops.
  2. On the right, click Add.
  3. In the Type page, select Automated Desktop Pool and click Next.
  4. In the vCenter Server page, select Full Virtual Machines. Select your vCenter Server and then click Next.
  5. In the User Assignment page, you usually want Dedicated assignment.
  6. Automatic Assignment is an optional feature that avoids you having to manually assign users to each full clone desktop. But manual assignments give you more control over capacity planning. Click Next.
  7. In the Storage Optimization page, click Next.
  8. In the Desktop Pool Identification page, give the pool an ID (no spaces) and a Display Name that is shown to users. Horizon creates a vCenter virtual machine folder with the same name as the ID. Click Next.
  9. In the Provisioning Settings page, specify a Naming Pattern. You can hover your mouse over the information icon to see the syntax. Then scroll down.
  10. After scrolling down, specify the number of machines to create. If you specify All Machines Up-Front, then Horizon will create the Maximum Machines. If you specify Spare (Powered On) Machines, then Horizon will try to preserve this specified number of unassigned machines. Click Next.
  11. In the vCenter Settings page, click Browse next to Template and select the template you created earlier.
  12. Click Browse next to the other fields and specify where you want the new machines to be created. Make sure VM Folder Location doesn’t have any spaces in it. Click Next.
  13. In the Desktop Pool Settings page, these settings are the same as Instant Clones, but Remote Machine Power Policy might be different. Scroll down.
  14. After scrolling down, notice the option for Show Assigned Machine Name instead of the pool name. Hover your mouse over the information icons. Click Next when done.
  15. In the Remote Display Settings page, specify video settings and then click Next. Horizon 2106 (8.3) and newer let you choose 5K and 8K monitors for Blast only.
  16. In the Advanced Storage Options page, note that View Storage Accelerator is just a read cache (no write caching). If your storage can handle the reads then enabling this feature probably isn’t necessary. Click Next.
  17. In the Guest Customization page, select the Customization Specification that you created earlier. Consider checking the box next to Allow Reuse of Existing Computer Accounts.
  18. Horizon 2212 (8.8) and newer let you specify the OU for the new machines. Otherwise, they are created in the Computers container unless you pre-create the computer accounts in your desired OU. Click Next.

  19. In the Ready to Complete page, you can optionally Entitle users After Adding Pool. Click Submit. Note: users must both be entitled to the pool and assigned to an individual machine.

Machine Administration

  1. Cloning progress – Use vSphere Client Recent Tasks to watch the progress of the cloning. It will take time for the cloning to complete plus time for SysPrep to complete.
  2. If you click the Pool name link and then switch to the Machines tab, you should eventually see the new machines.
  3. Assign User to Machine – You can select a machine, click the drop-down for More Commands, and then Assign User.
  4. Machine alias – By default, the pool’s Display name is displayed to each user. You can instead change it to the individual Machine Name, or to an administrator-specified machine alias.
    1. Go to the pool’s Summary tab and click Edit.
    2. Switch to the tab named Desktop Pool Settings.
    3. Scroll down and find the checkboxes for Show Assigned Machine Name and Show Machine Alias Name. If you select Alias Name, then an additional command appears on the Machines page.
    4. After editing the pool and enabling Show Machine Alias Name, On the Machines tab, select a machine, and then click the drop-down for Update Machine Aliases. The Alias is shown to the user instead of the pool’s Display Name or the actual machine name.
  5. Add Machines – To create more Full Clone machines from the same template:
    1. Click the name (link) of the pool.
    2. On the Summary tab, click Edit.
    3. On the Provisioning Settings tab, scroll down and enter a larger Maximum Machines.

  6. Update Template – If you plan to create more Full Clone machines in the next few months, then you should update your Template by converting it to a virtual machine, update the virtual machine, and then convert it back to a Template. Note that the updated Template only applies to new Full Clones and has no effect on existing Full Clones. To update existing Full Clones, use a Software Deployment tool like Microsoft SCCM.

Related Pages

157 thoughts on “VMware Horizon 2312: Virtual Desktop Pools”

  1. Hello, Carl!
    Thank you for everything you do, it’s really soooooo coooooool!

    But, Can I receive the change log by mail or rss?
    The newsletter is awesome too, thank you very much! but the changes on these pages are more practical.

    1. For Instant Clones, you can create new pools and then delete the old pools.

      For Full Clones, you can simply Storage vMotion the VMs.

      1. I have deleted the old instant clone pool and created the New pool still snapshot is creating on every child VM.

        Every VM its creating a snapshot (base-snapshot)

  2. Hi Carl,

    Today, I have created Instant clone desktop Pool (floating) and published the Win10 VM and able to launch it but why for each VM which we create is having a Snapshot created ? its any bug?
    kindly advice me.

    Horizon version 2303

  3. Hi Carl,
    When deploying an Instant Clone desktop pool I get following error Message:

    Error during provisioning: Initial publish failed.Fault type is UNKNOWN_FAULT_FATAL – unknown error

      1. I’ve had this problem before, and I can’t specifically remember what I did. I’d recommend starting with deleting your snapshot and recreating it. Could be simple as that.

  4. Hello Carl,

    We have a manual desktop pool (vcenter managed) with horizon 13.1. Now we are planning to upgrade to horizon 8.0(2006), Do we need to create a new manual pool and add the vms after upgrading to 8.0(2006)? Or we can keep it as it is (As this is manual pool)?

    1. You can in-place upgrade the Connection Servers. Then you need to upgrade the Horizon Agents, which can also be done in-place.

  5. I install Vmware horizon 8. i use floating pool. when client sign out, the vm restart after that the IP is change to new one, but when we login again we cannt login because, the IP is different with ip on DNS, are you have this case.


    1. VMware used to have a KB article explaining this, but I can’t find it. If your DNS zone has Secure Updates enabled, then the recomposed instant clones that are deleted and recreated won’t have permission to update the DNS record. VMware recommended changing DNS permissions to allow all instant clones to update DNS records for all other instant clones.

  6. What is the best practice for managing snapshots on a parent? How long should an admin retain a snapshot for a parent?

  7. Hey Carl
    Our primary domain controller is not receiving the right Hostname and IP from instant clones, which is a problem.

    Our secondary DC environment is configured using Horizon, which replicates to our primary.
    Each time an instant clone is generated, a new IP address is given to it. This is not always consistent with what is on our primary DC, which is why we are experiencing GPO problems.

  8. You should update, as the 13th of January 2023, MAK licensing is supported in an instant-clone environment!

      1. Hello Carl.
        Quick Question.
        I am deploying a dedicated virtual machine pool and enabling VM OS customization. How can the virtual machine be the same as the OS system name when deploying multiple virtual machines simultaneously?

        1. For non-persistent machines, Instant Clones automatically changes the machine name. Or SysPrep does it for full clones.

          1. okay. Do I use the VM customization tools in vcenter for the Sysprep or the Horizon Server desktop pool has the capability of doing that.


          2. For Full Clone pools that are automated by Horizon, Horizon will apply to the vCenter Customization Specification to the machines that it clones.

  9. Hi Carl,

    First of all thank you for your sharing and your great work!

    I have many “CP-PARENT” and “CP-REPLICA” VMs in my environment after various tests.

    Is there any way to know which ones are used and which ones I can delete?

    Thank you

  10. Hi Carl,
    Not sure if i should ask this here. Apologies for that.

    Is there a mechnaism to create Instant Clone Pools (may be multiple pools) on multicluster environment. I mean based on resource availability can we create VDs on any existing cluster for same pool and assign user a VD from any cluster.

    With some level of scripting we can do some workaround like assign a different pool or change the resource cluster once VD pool is created in first cluster as i understood (API). But this critical feature is not available as i see in horizon.

  11. Hi Carl!!

    I can’t seem to get Horizon 2206 to use VAAI with Instant Clones in my home lab. The process times out after 90 minutes when the Pool shows about 38% complete. I do see the Replica VM clone process running in VCenter, but it’s obvious it’s not using VAAI because it takes several minutes to move 1 percent. Manual VAAI processes done outside of Horizon work fine for both NFS and iSCSI.

    Is VAAI supported with Instant Clones?


    Steve Hurd
    Floyds Knobs, IN

  12. Hi Carl,
    thank you for your great articles. We are in the process of converting our linked clones Horizon 7.13 to instant clones Horizon 2209. Is it possible that the clone prep process creates a registry key that performs a DHCP release with every restart? There is no entry for the interface on our golden image. After the ClonePrep finishes on every Instant Clone there is the following entry in:

    HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Interface Value}\ReleaseOnShutdown=1

    Is it possible to configure the clone prep so that it does not perform a DHCP release?

    kind regards


      1. Hi,
        I thought there might be the option to configure it directly in cloneprep.
        Now I delete the key with the script after synchronizing. That works great.

        Many Thanks

        1. I went about it the same way, but it appears that it still releases ip on shutdown.

          How did you make it work for you?

  13. In a recent project for deploying Horizon I was struggling with KMS activation for linked clones, due to KMS client minimum count requirement. I raised support call with Microsoft, VMware with standard response that sysprep should be executed.

    Your tip on using Active Directory-based activation for linked clones saved me a huge pain. Thank you very much Carl.

  14. I don’t think these questions are Horizon version specific, but we’re currently on Horizon 8 2111 running Windows 10 21H2 in case you need to know. These are all storage-related questions. We have 2 locations/pods with 250 users total.

    Should servers and instant clones be on different datastores?
    Recommendations for number of datastores for the instant clones (2 or more?)?
    Do you recommend different datastores for IC pools with different Master Images (primary difference are machine specs)?
    How about general datastore sizing?

    Thank you as always!

    1. Servers and Desktops are usually in different clusters, which usually means separate storage. Small environments might combine them.

      I usually minimize the datastores if the storage can handle it. More datastores means more replica disks and you have to wait on the multiple replicas every time you Push Image.

      In the old days there were problems with disk expansion locking the datastore thus requiring capping the # of desktops per datastore. There were also issues with storage adapter queue length requiring capping of disk I/O. Disk locks have been fixed. Today’s fast storage and fast adapters don’t see the queue length problem very often.

  15. Hey Carl,
    I just deployed a new Horizon 8 environment and we are migrating from Horizon 7 environment. I am running in to a issue where I am removing VDIs from automatic pool on Horizon 7 side and trying to add them to Horizon 8 manual pool side. The machines are all grayed out. Any help in this would be appreciated.

    1. Where do you see them grayed out? Is it when you try to add them to the new pool?

      The machines were originally full clones?

      1. Yes they are grayed out when I try to add them to dedicated manual pool. The machines were originally in automated pool full clones.

  16. Hello, Carl!

    Can you give an advice please: we have two datacenters connected with 10Gb LAN, and I need to publish TS Desktops with Instant Clone machines in active-active state on both DC’s for HA, how I must do that? Each DC have 1 vCenter and 1 Horizon CS.

    P.S.: In Citrix I’m just simply creating Delivery Goup and providing Machine Catalogs that I want.

    1. You could stretch a single Horizon pod if latency is really low. Otherwise, VMware wants to you build separate Horizon Pods in each datacenter and use global entitlements to combine them.

          1. Yes, it’s 2 ms.
            We have a working solution with Citrix, but we need to migrate in VMware.
            By stretch you mean disconnect hosts in one dc and connect to vCenter in second DC?

          2. I’m referring to the Horizon Pod, which contains one or more Connection Servers. If you build Replica Connection Servers, then they belong to the same pod.

            vCenters are a different topic. A single Horizon Pod can connect to multiple vCenter Servers.

  17. Hey Carl,

    Why the recommendation for the Master Image for instant clone to be in the same cluster as the VM’s? The instant clone process already clones out a replica machine to each cluster. We have multiple clusters/pools which use the same Master Image. Trying to understand the downside to this, otherwise we would have to clone the master images to each cluster.


    1. I was thinking that when creating a new pool it couldn’t find gold images outside the of the cluster, but I might be mixing this up with other VDI products.

  18. hello carl
    When I create an instant clone pool, I get an error saying “Invalid ID member value”. how do i solve it

    1. Do you see anything more specific in the debug log at C:\Programdata\VMware\VDM\logs on the Connection Server?

  19. Hi Carl, we built a horizon infra from scratch and tried creating an instant clone pool. It failed with ‘provisioning failed, agent customisation fault internal template vm-2049 customisation failed. Any thoughts? 🙂

  20. Hi Carl, i need some clarification in my Management they asking about the same,

    I am using Horizono View 8 with below specification with instant clone,

    1. 2 *4TB Datastore
    2. 175 Machines

    In Vcenter i can see the Utilization is less like only .25 utilized for Datastore if we open the datastore i can see some machine with provsioned space like TB and all.
    I got confused that why it acting like that any configuration i am missing like that.

    Kindly clarify, i am attaching the screenshot as well.


    1. Are you asking why consumed space is less than provisioned space? Instant Clones are linked to a shared parent disk that is only considered consumed space once no matter how many instant clones you have but each instant clone uses its size as provisioned space. Then each instant clone has a differencing disk that starts small and grows until reboot.

      1. Exactly i am asking that why consuming less space even my each desktop contain 100gb of C: drive. I want to show the screenshot but i cant able to paste over here and also attaching option not their here i am pasting the values here just have look,

        State Status Provisioned Space Used Space Host CPU
        Powered On Normal 7,562,599.6 TB 73.37 GB 479 MHz
        Powered On Normal 7,562,599.6 TB 69.6 GB 360 MHz
        Powered On Normal 7,562,599.6 TB 71.98 GB 240 MHz
        Powered On Normal 7,562,599.56 TB 59.08 GB 1.65 GHz
        Powered On Normal 7,548,211.38 TB 75.11 GB 1.53 GHz
        Powered On Normal 3,746,357.5 TB 71.99 GB 239 MHz
        Powered On Normal 2,961,456.4 TB 69.6 GB 239 MHz
        Powered On Normal 2,961,456.4 TB 69.6 GB 839 MHz
        Powered On Normal 2,106,670.52 TB 69.6 GB 300 MHz
        Powered On Normal 1.67 TB 71.41 GB 209 MHz


  21. Hi Carl,

    You are my go-to for anything Citrix or VMware! I have an error when provisioning from this tutorial that for the life of me I can’t find anyone with a similar issue.
    The error is “Error during Provisioning Initial publish failed: Fault type is VC_FAULT_FATAL – javax.xml.ws.soap.SOAPFaultException fault was thrown by the VC server: https://XXX.XXX.local:443/sdk. Error: The object ‘vim.dvs.DistributedVirtualPortgroup:dvportgroup-2108’ has already been deleted or has not been completely created::dvportgroup-2108 not found”
    The main thing that baffles me is the port group id 2108 is not one of our distributed port groups or has ever been (to my knowledge), and it is not the distributed port group the gold image/snapshot has assigned.
    Any insight would be wonderful!

    1. The dvPortGroup should be set to Static Port Binding with Auto Expand.

      When creating the pool, there’s an option to modify the network, or leave it set to whatever the parent image is using.

      1. yes I have it set to static with auto expand. I have also tried creating a new port group, modifying the network for the existing port group and the new one I created for testing. Every time it is the same port group error. it never changes the port group ID 2108 to any other port group ID.
        FYI It does create the folder in vcenter so I would assume it is not a communication problem with horizon and vcenter.
        I have also tried changing the vcenter server connection to use the master administrator account ( thinking it might be permissions with the horizonsvc account).


  22. Hi Carl,

    i have followed your guide preparing an Instant Clone Desktop, and it works great, except for one thing. I am trying to get KMS with a KMS-Server to work, but since i am using instant clones, the machines report with the same ID and the KMS count will not go up. How can I work around that without creating a full desktop pool?

    Thank you for the awesome guides!

  23. Hi Carl,

    I have an application for which I need to configure for every instant clone pool users. It is a ipphone dialer app, so for every users I need to configure the application with different settings.

    Now, once the user log out, the application settings are gone since it is instant clone. So, to solve the issue, I am using VMware Writeable Volumes with UIA+User profile. Now, After first time configuring the application, I don’t need to reconfigure for that particular users. Also, maybe it can be done using DEM, but I haven’t tried, need your suggestion if it is possible.

    However, my critical point here is, now I need to configure this application for 500+ users, so it is really a long time if I need to login every users an configure them one by one. Is there any way I can save the configuration on gold image or any other app pack method and push the configuration once a new user login?

    1. I usually use procmon to figure out where the application stores its settings. In procmon you can filter “category” = “write” to only see changes.

  24. Hi Carl,

    Need one info. After deploying the instant clone desktop pool, I want to restrict user not to be able to login from multiple thin/thick/zero client. When they are logged in to one client, they cannot login to other clients, how to to do this?

  25. Hello Carl,
    We are using Horizon 7.13 linked clones and planning to upgrade to 8. We are using an application which depends on MSMQ Windows Feature on VDI VMs. Our current setup has a script which we have configured as a post synchronization script triggered from Horizon. This script will install MSMQ components on the VMs and eventually this process will create MSMQ Object under the VM’s computer account in Active Directory. We succeed to configure the same setup in Horizon 8. Our current Horizon VDI VMs are configured to be deleted after the user log off. So the VMs will be deleted and the corresponding computer account also deleted from Active Directory, including the MSMQ Object under it. But we have observed that Horizon 8 delete the VMs after the user log off, but the computer account is not deleted, but the computer account is reset. This process will keep the MSMQ object under computer account in Active Directory. While preparing the new VMs, Horizon use the same name and after preparation we are triggering the script to install MSMQ but since the MSMQ object is already there, installation will not be complete. Is there any option to configure delete computer accounts from Active Directory after the user log off ?

  26. Hi Carl & Commenters,

    I just got off the phone with VMware about best practices regarding WIn10 OS Swap File (pagefile) and how to size it, they are saying to go with Microsoft recommendations for the golden image.

    I was wondering what people set their pagefile to and if they have noticed any benefits. In the past I would keep the setting of let Windows automatically chose the right size, but I wonder if that is causing some low level thrashing against our SAN and in general causing perf issues as it keeps on having to adjust the size. We have plenty of space on our Pure array, so I am thinking of doing x1.5 of the memory allocated like old school and we have some developers who build apps that consume a lot of memory, anyone have any recommendations/experience?


    1. Are you seeing disk latency 10ms or higher? If not then I doubt changing pagefile would make any difference.

      If you increase the RAM assigned to each VM then there should be less pagefile activity.

      1. Hi Carl. Not over 10, just something is off, and just going through all the things I cant find good documentation on. I will leave pagefile alone. We have users who are experiencing bursts of latency that is causing their whole system to freeze. It may be related to a bug we reported that VMware is fixing in 2106.1, client crashes on linux zero clients, which I hope will address some issues in the windows client. While they QA that, my primary focus is on FSLogix and if we have a problem there. Some of the users can recreate the freezing as they navigate through outlook emails, those caches reside on a fileserver mounting the fslogix vmdks, the only thing I can think of outside of storage/server is some low level network issues.


  27. Good morning Mr. Stalhood

    I have an issue

    I created an instant clone pool and it asked for a cluster and folder. I don’t know clusters. I go to make cluster and it ask for switch? I give switch my nic and then click configure. I get green check mark! then I go to make instant clone pool again. I follow your instructions and it fails. I think it is due to the cluster and folder configuration.

    Why is this happening? What is good cluster configuration? Do you have pre-req instructions prior to these instructions for that set up? I could not find things on VMware website.

    Thank you.

  28. After deploying instant clone pool, when I put VM from pull in to Maintenance mode I can’t get it back to Available state. All other pool types working well only instant clones are affected. Any ideas?

  29. Hi Carl,

    Can we convert the pools configured for instant clone to Full VM?
    We are generally deploying Full VM pools , but some how we now see that we have snapshots being created for Horizon VM, can we check somewhere if the created pool is a instant clone or Full VM , as i dont see anywhere in pool configuration page.

  30. Hi Carl,
    Thanks for the excellent article. I have successfully deployed a pool of persistent full clone. In release before 2106, I could recompose these persistent full clone using the composer. How the composer has been deprecated in this release.
    I found that after changing the VM template in the desktop pool definition, new full clone will be created from the new template. But there does not appear to be a way to recompose existing clones.
    Any hints on how to recompose existing VMs?

    1. I prefer it this way. Pools should be either non-persistent (refresh on logoff) or persistent (never refresh/recompose). The older Composer method lets you do something in between where it’s persistent for a period of time until you decide to Refresh or Recompose, which causes loss of all changes performed by the user.

      To manage persistent machines, use traditional desktop management technologies like SCCM or VMware Workspace ONE UEM.

      1. Yes, that makes sense. Thanks for the clarification. If I might ask a related but different question from your other post on App layering (https://www.carlstalhood.com/app-layering-os-layer/). This approach (using the Citrix App Layering Image Preparation Utility) is useful inaccelerating recomposition of the parent VM templates (by adding and removing app seamlessly) but does not helping recomposing existing persitent VM.

  31. Hi all…here is a vague one. Horizon 8….created a few desktop pool and suddenly get the error “An error occurred in adding desktop pool. please try again” I am using a Domain admin account with Admin rights to everything in Horizon and vsphere. It allowed me to create two pools and the third comes with this error. These are basic automated floating pools, nothing special….stumped.

    1. Any errors in Horizon Events? Any errors in vCenter tasks? If it’s a customization timeout, then look in C:\ProgramData\VMware\VDM\logs on the Horizon Agent machine. Look in the Connection Server logs under C:\ProgramData\VMware\VDM\logs

  32. Hi Carl,
    thank you very much for your content, it’s very helpful. I have a question about a multi site, multi data center deployment. What would you use to keep the golden master in each site synced? I thought about content libraries, or do you have a better solution?

    Br Tim

  33. Hi Carl,
    We just upgraded to Horizon 8 (2006). We have instant clones in our environment and they are ‘recomposing’ (not sure what the new term is) fine, however, I don’t see the cp-parent machines for each parent/snapshot used in our pod on every single host. I was under the impression that each cp-parent would be present in each esxi host and each datacenter. We have more than 10 cp-parent machines but they are scattered all over the place. Some esxi host has 2, some has 4, and so on. Also, we have 2 datastores and I see all the cp-parents in one but not the other but both datastores have the cp-template and cp-replica machines.

    Thank you.

    1. I think the threshold is 12 VMs per host. If you have a single host with 12 VMs in one pool, then there should be a parent. Other hosts that have less than 12 VMs won’t have a parent.

  34. Carl,
    horizon 8 (2006) environment with Windows 10 2004 an dI am using Microsoft 365 enterprise apps on my master image. All looks good – performance and login time is acceptable with DEM and App volume and fslogic.

    I have one issue, I have been trying to appstack Visio 2019 standard (VL). I think because I activate my Microsoft 365 apps with shared computer activation, the visio appstack fails each time, I tried specifying KMS server, shared activation off, and tried appstacking it with a clean system that has office 365 and one with out. Any suggestion?

    Thank you,

    1. I never split my Office products to avoid this problem. You could put Visio in the base image and then use NTFS permissions to block unlicensed users. You would also need a process to change file type associations for licensed and unlicensed users.

      If you didn’t have App Volumes then I would do FSLogix App Masking to hide Visio but I don’t think App Masking works properly with App Volumes.

      1. Carl,

        Thank you for such a quick response. I am considering using FSLogic app masking as well- I was NOT aware of the issue with app volumes.

        The main issue how ever is when I try to install Visio on the master image, it still have issues with licensing /activating.
        Any step I need to take to activate Visio differently than Microsoft 365?

        1. For shared computer activation it will ask the user to sign in to activate the product. I’m not sure if you can mix VL with SCA on the same machine.

          1. in that case, is there a version of office 2019 that I should use that activates the same way as Visio and project? as long as I am not forced to use office 2016 Pro Plus, I will consider anything that will make this work, I have about 100 Visio licenses and I am e3 with Microsoft Office licensing – just an FYI

          2. I think you can create separate configuration.xml files for Visio vs the rest of office. The one for Visio would be the volume license version while the one for Office would the ProPlus version with shared computer activation enabled.

  35. Hi Carl, thanks for the great article.
    I’m in the process of migrating from Horizon 6\7 to 8 (Lined Clones to Instants Clones specially) and I’m a little bit confused. From what I’ve been reading, Instant Clones are being deleted on each logoff (I’m guessing is when user logs off, no?) but my Instant Clone pool never gets deleted.
    I’ve created a dedicated Instant Clone pool (desktop) with Automatic Assignment set to Enable, “Refresh OS Disk After Logoff” to Never (I read in your article it is not advised to set it to never so I’ll change it later on today), and Log Off After Disconnect set to Immediately.
    I’ve logged in to the Horizon environment, got a VM, created a temp file and logged off, nothing happened.
    The VM didn’t get deleted and whenever I’m connecting to the environment, and get the exact VM (the desktop pool contains only one created VM) I can see my new temp file (isn’t exist on the golden image).
    Any ideas why or what I’m missing?
    Thanks in advance

    1. If you enable “Refresh OS Disk After Logoff”, then it should revert whenever you logoff. Or you can do a Maintain > Schedule (aka Recompose) to force rebuilding the VMs. Or the Machines tab of the pool has a Recover button.

      1. Hi Carl i cant understand the solution that you gave for this comment, every logoff machine got rebuild again need to avoid this what can we do for the same. If i didnt enable the “Refresh OS disk After logoff” i am getting an error message on vcenter this VM machine need an Disk Consolidation. kindly guide me how to overcome the machne recreated on each logoff.

      2. Hi Carl,
        thanks for the quick replay.
        We’re actually trying to avoid the VM refresh \ deletion every time the user logs off (due to our application limitations) and if we’re able to avoid it then it’s actually good for us. The Instant Clones description I’ve read mostly talks about that Instant Clones will delete the VM and re-create it every time user logs off so it good to know there’s a way to workaround it.

  36. Hello Carl Stalhood How can I solve when I want to create windows 10 instant clone I do all steps until Guest Customization tab.In the guest Customization tab I cannot choose domian or it is not loading the domain name 🥺

      1. Carl Stalhood I have anotherquestion.When i create windows 10 Instant clone.Do i have to do windows 10 sysprep? is it important?
        I have 2 RDSH(RDSH01 and RDSH02) host.How can I configure cluster for RDSH01 and RDSH02?

  37. Hey Carl

    Simple question about instant clones (non-persisten floating). The VM/template we use for the source on the pool, should we keep it off or on always? I keep it off. When I need to make changes I turn it on and make my change, turn it off and take my snapshot and leave it off until the next update/change.

    1. One option is to leave it on so patching (e.g. SCCM) happens automatically. Then have a scheduled script that shuts it down, pushes to the pool(s), and then powers it back on again. Fully automated.

      Another option is to completely rebuild the master every patch cycle. The rebuild should be automated.

  38. Hi all, recently having some strange issues regarding a instant clone pool, when connecting to the windows 10 vdi, a black screen randomly is shown, but if i press ctrl+alt+delete i’m able to access to the task manager and invoke the explorer.exe, then after some seconds i’m able to proceed to the “normal” login/access to the desktop, hope someone has any idea regarding this issue. thanks

    1. Do you have the Windows logon GPO setting Interactive logon: Message text for users attempting to log on?

  39. Carl, Great work as usual. I appreciate all your help all these years. This is my first question to you. Windows 10 2004, when my users login to their virtual desktops via horizon view, towards the end of the startup, I get a black screen for about 8-10 seconds then we dee desktop and icons. What could cause this? any help, I appreciate.

    Thank you

    1. It’s usually logon scripts or Active Setup. You can do a procmon trace during somebody’s logon to see what processes are running during that time frame.

  40. Hi Carl,
    we’re still using Linked Clones and I’m currently in the process of evaluating the move to Horizon 8 and Instant Clones.
    With Instant Clones, is it possible to push a new image/snapshot to only a few manually selected machines in a pool, instead of to the entire pool? This would be in a dedicated assignment (semi-persistent) desktop pool.
    I’m used to doing it this way with Linked Clones whenever I’m testing new images/snapshots and I’m afraid this wouldn’t be possible with Instant Clones?

      1. Thanks Carl.
        I’m a little wary of a problematic image immediately affecting a lot of users (i.e. the whole pool).
        How do people usually test new images before pushing them out? Separate test pools?

  41. Followed all these steps. Via html on the browser I can launch the workstation however from the client it spins and eventually disconnect. On the admin console I get a warning that the pending session has expired. Thanks for your help

  42. Hi Carl, I need to know on selection cluster some reason i am choosing an cluster and users are working later my management provided 3 machine which i need to create other cluster. Later can i change the cluster setting to the Desktop pool , will it affect any ? kindly advice me.

        1. When Instant Clones deletes the machine and re-creates it, then the new machine should go on the new cluster.

          1. It Means it will all the machine in the pool and recreate it in new Cluster is it?
            Also one more think we cant able to recompose one machine particularly in Instant clone?

          2. Instant Clone won’t recreate the machine until a user logs off or until you do a Push Image.

  43. Hello Carl, I’m making a lab with full-clones but it wont work.
    I have one Connection Server and One VM with win10 with agent install.
    I have clone to template this Win10 VM and use that template to serve as a Master, but when I create the pool desktop it wont create the VM in vCenter and as I tried to log in to the VDI it appears the error “there’s no desktop source available”
    Any thoughts I might be doing wrong?

    1. In vCenter, if you clone the VM manually and use a customization specification, does sysprep complete without issue?

  44. I saw the instructions, but kind of worried to upgrade current 7.12 with linked clones and persistent disks which both technologies are depreciated in Horizon 2006

  45. Hi Carl,

    Is it possible to share more information or steps how to migrate persistent disk to Horizon 8 ?

    Thank you.

      1. Good morning Carl, I’m in the same boat here with a similar issue.

        The machine is a RHEL7 using Horizon Server 8.6, with agent 8.9.0, Dell Wyse thin clients

        The pools spin up just fine, users can log in and use the session. However, on occasion they will lock their thin clients, go away and come back, they then log into the Thin Client login which brings them back to their RHEL session, here is where it prompts the user for their password. It tells me “Sorry, that didn’t work. Please try again.”

        If I go into the Horizon console and force a logout of the session they are then free to log in to a different instant clone.

        The only work around I’ve found so far is to set an idle timer to force the session to log out after some time passes. This does work, but can sometimes log users out when they are an extended lunch : ( .

        Any idea where to start?

Leave a Reply

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