VMware Horizon – Windows 10 Desktop – From design to desktop pool

Release date: July 15th 2020

Welcome to my VMware Horizon series. In this session I will go through everything from the design to published desktop pool. Previously, I divided this session into sub-sessions, due to the length of this process, but this time I have put everything on the same page.

To complete this session, I have identified the following tasks that have to be completed.

Template Design

Template Design

I have used my Template and Desktop Pool Design documents in preparations for this session. These I have attached here: Template-design and Desktop-Pool-design

The decisions I made are as follows:

Design-01
Design-02

So, with all the decision-making done, I can now proceed with creating the virtual machine.

Create Virtual Machine

Create Virtual Machine

Login to vSphere, select the cluster and choose “New Virtual Machine”, Next…

horizon-view-template-03

I give the Virtual machine a name, and select the location where the VM should be placed, Next…

horizon-view-template-02

I select FreLab Cluster as my compute resources where the VM will be placed, Next…

horizon-view-template-03

Select the Storage on where the VM will be placed, in my case the Datastore Cluster,  Next…

horizon-view-template-04

Select the compatibility. I choose to use the “ESXi 6.7 Update 2 and later”, Next…

horizon-view-template-05

I select Windows as Guest OS Family and Windows 10 (64-bit) as OS Version, Next…

horizon-view-template-06

Customize the hardware, as seen below, VM Options…

4 vCPU            4 GB Memory              60 GB Hard disk          VMware Paravirtual SCSI

horizon-view-template-07

I temporarily change firmware to BIOS and select “Force EFI setup

horizon-view-template-08

Under Configuration Parameters, I click “Edit Configuration

horizon-view-template-09

Add Configuration Params

horizon-view-template-10

I add «devices.hotplug» with the value “False”, OK…

horizon-view-template-11

Disable logging, Next…

horizon-view-template-12

Finish…

horizon-view-template-13

Once the Virtual Machine is created, I will add a second SCSI controller temporarily, LSI Logic SAS. I will also set the Hard disk to use the LSI controller temporarily during the Windows and VMware Tools installation. The reason for doing this is because Windows 10 doesn’t have the VMware Paravirtual SCSI native. The driver for this SCSI interface gets installed with VMware Tools later on. Once VMware Tools is installed, I will change the Hard disk back to use the VMware Paravirtual controller and delete the LSI Logic controller.

horizon-view-template-14
horizon-view-template-15
horizon-view-template-16

I power on the VM

horizon-view-template-17

When the VM is created, I first boot into BIOS and make the following modifications. I launch the Web or Remote Console. In BIOS I disable all features that are unnecessary. In the Main-tab, all Diskette stations are disabled, which is OK. Next, I open the Advancedtab.

horizon-view-template-18

Within the advanced section, select I/O Device ConfigurationI don’t need any of the I/O Devices, so we disabled them all. Press ESC to return to the BIOS main screen. Select Boot-Tab

horizon-view-template-19
horizon-view-template-20

I change the boot-order as follows. When done, I press ESC and F10. Save and exit

horizon-view-template-21
horizon-view-template-22

With the BIOS modifications done, I power off the VM and change Firmware back to EFI. I also attach the Windows 10 ISO and tick “Connect at power on”, OK…

horizon-view-template-23
horizon-view-template-24

Install Windows and VMware Tools

Install Windows and VMware Tools

When I power on the Virtual Machine, the Windows Installation starts. I first adjust the language-settings, Next…

installwindows-01

Install Now

installwindows-02

I won’t be activating at this point

installwindows-03

I select the Windows 10 version I decided on during design, Next…

installwindows-04

I accept Terms, click Next…

installwindows-05

I select “Custom: Install windows Only

installwindows-06

I choose my one and only partition, Next…

installwindows-07

The Windows installation starts…

installwindows-08

When I arrive at the Basics-screen below, I press CTRL-SHIFT-F3 to enter Audit Mode

installwindows-09

Inside Windows, I click Cancel in the Sysprep dialogue box

installwindows-10

At this point I do a “Typical” VMware Tools installation

installwindows-11
installwindows-12
installwindows-13
installwindows-14
installwindows-15
installwindows-16

When the VMware Tools installation is complete, and a reboot has been done, I select Yes to make the system discoverable and Cancel the sysprep. Next, I shut down Windows.

installwindows-17
installwindows-18

I edit the Virtual Machine to use my VMware Paravirtual controller instead of the LSI logic I used during the Windows and VMware Tools installation. I remove the LSI Logic controller from the virtual machine.

installwindows-19
installwindows-20

Install Agents and Software

Install Agents and Software

The first thing I do is to install Microsoft .Net running the following command:

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:D:\sources\sxs
InstallAgentsAndSoftware-01

I install Windows updates and reboot until there are no more needed updates

InstallAgentsAndSoftware-02
InstallAgentsAndSoftware-03
InstallAgentsAndSoftware-04

Next, I install the VMware Horizon Agent with the options I selected during the design phase. I launch the installer I downloaded previously.

InstallAgentsAndSoftware-05
InstallAgentsAndSoftware-06

I accept the License Agreement, Next…

InstallAgentsAndSoftware-07

I select IPv4, Next…

InstallAgentsAndSoftware-08

I select the features I decided on in my design, Next…

InstallAgentsAndSoftware-09
InstallAgentsAndSoftware-10
InstallAgentsAndSoftware-11

I select «Enable the Remote Desktop Capability», Next…

InstallAgentsAndSoftware-12

Install…

InstallAgentsAndSoftware-13

I click Finish when the installation is complete and restarts the VM

InstallAgentsAndSoftware-14
InstallAgentsAndSoftware-15

When the virtual machine has rebooted, I run through a “typical” installation of VMware Dynamic Environment Manager by launching the x64 version of the installer.

InstallAgentsAndSoftware-16
InstallAgentsAndSoftware-17

I select «I accept the terms in the license agreement», and click Next…

InstallAgentsAndSoftware-18

Select a destination folder, default location is good, Next…

InstallAgentsAndSoftware-19

I select Typical…

InstallAgentsAndSoftware-20

I click Next on the License File Page

InstallAgentsAndSoftware-21

Install…

InstallAgentsAndSoftware-22

Finish…

InstallAgentsAndSoftware-23

I will also copy in the sdelete binaries to C:\Windows\System32, as I will need these later with VMware OS Optimization Tool

InstallAgentsAndSoftware-24
InstallAgentsAndSoftware-25

Optimize

Optimize

As I have had some quite “interesting” experiences with OSOT, I will shut down the virtual machine and take a snapshot before I proceed with optimizing the template. This I will repeat later on in this guide due to the same reasons.

OptimizeWindows-01

Once the virtual machine is powered on again, I launch VMware OS Optimization Tool

OptimizeWindows-02

The first thing I do is to check for updates and update as necessary

OptimizeWindows-03
OptimizeWindows-04

Analyze…

OptimizeWindows-05

Common Options

OptimizeWindows-06

I adjust the common options as needed…

OptimizeWindows-07
OptimizeWindows-08
OptimizeWindows-09
OptimizeWindows-10
OptimizeWindows-11
OptimizeWindows-12
OptimizeWindows-13

Based on the recommendations from the optimization tool, I run “Optimize” and reboot after completion.

OptimizeWindows-14
OptimizeWindows-15

Generalize

Generalize

As I mentioned above, I have seen some strange behavior after using OSOT, one of them causing an eternal “Why did my PC restart?”-loop, described here: Troubleshooting “Why did my PC restart?”-loop after sysprep with VMware OSOT, therefore I will shut down the vm once more, and take another snapshot before I continue.

GeneralizeWindows-01

I launch OSOT once more and select the Generalize tab

GeneralizeWindows-02

I click “View Answer File” to verify the settings

GeneralizeWindows-03

I verify that my Time zone and local settings are correct, Confirm…

GeneralizeWindows-04

Generalize and reboot afterwards

GeneralizeWindows-05
GeneralizeWindows-06

I optimize once more to reapply settings that were changed during sysprep, reboot again

GeneralizeWindows-07

Finalize

Finalize

I shut down the vm and take one last snapshot before I finalize

FinalizeWindows-01

I launch VMware OSOT and select the Finalize tab

FinalizeWindows-02

Execute…

FinalizeWindows-03
FinalizeWindows-04

Once the Finalize phase is finished, it is time to install the App Volumes agent and, if necessary, the GPU drivers. This is not what the official VMware documentation says here: Creating an Optimized Windows Image for a VMware Horizon Virtual Desktop, but I prefer to follow Hilko Lantinga’s recommendation posted here: VMware OS Optimization Tool comments

FinalizeWindows-22

I launch the VMware App Volumes agent installer, Next…

GeneralizeWindows-08

I accept the terms, Next…

GeneralizeWindows-09

Install App Volumes Agent, Next…

GeneralizeWindows-10

Next…

GeneralizeWindows-11

I fill in the address to my App Volumes Manager, leave 443 port, Next…

GeneralizeWindows-12

Install…

GeneralizeWindows-13

Finish and Reboot

GeneralizeWindows-14
GeneralizeWindows-15

After the reboot, I release the ip and shut down the vm. As everything has gone as I wanted above, I delete all snapshots before I continue.

FinalizeWindows-05

The Virtual Machines now has a footprint at 60 GB prior to my OVF-export and import.

FinalizeWindows-06

Before starting the export to OVF, remember to enable pop-ups for the vCenter web-site and check to have enough available disk-space for the download!

FinalizeWindows-07

After the export, the main vmdk is only 7,1 GB

FinalizeWindows-08

Next, I import the OVF, Select Files…

FinalizeWindows-09

Select all the files, Open

FinalizeWindows-10
FinalizeWindows-11

Next…

FinalizeWindows-12

I give the virtual machine a name, Next…

FinalizeWindows-13

Next…

FinalizeWindows-14

Next…

FinalizeWindows-15

Thin Provision, Next…

FinalizeWindows-16

Select correct network, Next…

FinalizeWindows-17

Finish…

FinalizeWindows-18

After exporting and importing thin, the vm’s footprint has gone from 60 GB to 10 GB, acceptable.

FinalizeWindows-19

Remember to delete the exported OVF files

FinalizeWindows-20
FinalizeWindows-21

Desktop Pool

Desktop Pool

Before I start making my desktop pool, I take a snapshot

DeployDesktopPoolAndTest-01

I login to VMware Horizon Admin Console and start the “Create new Desktop Pool Wizard”. For this session it will be An Automated Desktop Pool, Next…

DeployDesktopPoolAndTest-02

I choose Instant Clone, my vCenter, Next…

DeployDesktopPoolAndTest-03

For this desktop pool, I will be using Floating User assignment, Next…

DeployDesktopPoolAndTest-04

No VSAN, as of yet, Next…

DeployDesktopPoolAndTest-05

I enter an ID and a Display name, Next…

DeployDesktopPoolAndTest-06

I provide the provisioning details, Next…

DeployDesktopPoolAndTest-07

I detail the vCenter configuration, Next…

DeployDesktopPoolAndTest-08

Configure the connection settings, Next…

DeployDesktopPoolAndTest-09

Select Remote Display settings, Next…

DeployDesktopPoolAndTest-10

I choose the Domain and Active Directory settings, Next…

DeployDesktopPoolAndTest-11

I complete the New Desktop Pool wizard and entitle my test users, Submit…

DeployDesktopPoolAndTest-12

Add…

DeployDesktopPoolAndTest-13

I search for and select my test user group, Horizon Users, OK…

DeployDesktopPoolAndTest-14

OK…

DeployDesktopPoolAndTest-15

The publishing starts immediately

DeployDesktopPoolAndTest-16
DeployDesktopPoolAndTest-17
DeployDesktopPoolAndTest-18

Once the state changes to “Published“, I can verify that the desktops and computer-accounts are created and available

DeployDesktopPoolAndTest-19
DeployDesktopPoolAndTest-20
DeployDesktopPoolAndTest-21
DeployDesktopPoolAndTest-22

I can now finally test and log in to my new desktop pool.

DeployDesktopPoolAndTest-23
DeployDesktopPoolAndTest-24

With that, this complete walk-through from Horizon Desktop Pool design to published desktops has reached its conclusion.

Recommended reading:

VMware Tech Zone: Creating an Optimized Windows Image for a VMware Horizon Virtual Desktop

VMware Horizon View planning, deployment etc.

Disclaimer: Every tips/tricks/posting I have published here, is tried and tested in different it-solutions. It is not guaranteed to work everywhere, but is meant as a tip for other users out there. Remember, Google is your friend and don’t be afraid to steal with pride! Feel free to comment below as needed.

3 comments

  1. Great goods from you, man. I have understand your stuff previous to and you are just extremely fantastic. I really like what you’ve acquired here, really like what you are stating and the way in which you say it. You make it entertaining and you still take care of to keep it sensible. I can not wait to read far more from you. This is actually a great site.

    Like

  2. Hello,

    Perfect article.
    Explaining much of our questions!
    I have a question about Windows 10 Pro key licensing. How do you pass the keys to your automated pool machines?
    We have the linked-clone licence for VMware Horizon and we need to know about Windows 10 activation.
    What options do we have?

    Thank you

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: