Microsoft Windows Virtual Desktop (WVD) learning resources

As an End User Computing (EUC) consultant I’m looking for a couple of weeks into Microsoft Windows Virtual Desktop (WVD). My first step was to take the on-line course “Zero to Hero with Windows Virtual Desktop WVD” from Travis Roberts. I can highly recommend this course to everyone who is starting with Microsoft WVD.

Here’s a list of useful resources I discovered during my journey (this list will be updated frequently).

General

Website Description
Microsoft WVD website The official Microsoft WVD Website
WVD UserVoice Helping improve Windows Virtual Desktop
WVD Tech Community Windows Virtual Desktop discussion forum
What’s new in Windows Virtual Desktop The latest new enhancements in WVD
Christiaan Brinkhoff blog Microsoft WVD Evangelist with great content
Microsoft WVD roadmap Microsoft WVD roadmap

Community / User Groups

Website Description
WVD Community site A single place where you can go to learn about everything related to Windows Virtual Desktop.
WVD Dutch User group YouTube Dutch WVD User group
WVD Dutch User Group meetings YouTube WVD Dutch User Group recordings
Slack WVD Community Slack WVD Community

Tools

Website Description
WVDAdmin Marcel Meurer created an additional tool to manage WVD
Windows Virtual Desktop Experience Estimator Your tool to estimate the quality of the experience your users will receive when connecting to Windows Virtual Desktop
Windows WVD desktop clients Windows WVD desktop clients
MSIX app attach Azure portal integration public preview MSIX app attach Azure portal integration public preview
WVD Optimization tool WVD Optimization tool
Az Mask This is a browser extension that will mask GUIDs (such as Subscription IDs), email addresses, keys, and connection strings with a blur. Very useful for presentations.
Auto Start/Stop script  This script is intended to automatically start and stop session hosts in a Windows Virtual Desktop
host pool based on the number of users

Articles

Website Description
MicroCloud How to – Add a Dutch language pack to WVD
Sander Rozemuller blog A lot of WVD automation examples
Windows Virtual Desktop QuickStart The WVD QuickStart solution simplifies and automates the WVD deployment process leveraging the power of Azure DevOps
Rudlintech Ltd. Windows Virtual Desktop imaging using Azure Devops CI/CD, Packer and PowerShell

AZ-104 Exam preparation (available in March 2021)

Microsoft WVD Learning resources Deliver remote desktops and apps from Azure with Windows Virtual Desktop
AZ-140 Exam overview AZ-140 Exam overview
Microsoft Certified: Windows Virtual Desktop Specialty
– Skills Measured
Microsoft Certified: Windows Virtual Desktop Specialty
– Skills Measured
AZ-104: Microsoft Azure Administrator GitHub AZ-104: Microsoft Azure Administrator GitHub
AZ-140 Windows Virtual Desktop Speciality Study Guide AZ-140 Windows Virtual Desktop Speciality Study Guide

 

Training / YouTube Channels

Website Description
Azure Academy Azure Academy channel
Travis Roberts Travis Roberts YouTube channel
Zero to Hero with Windows Virtual Desktop WVD WVD training
WVD Workshop Micha Wets Microsoft & Cloud-Architect WVD Workshop
WVD on sizing and licensing Wayne Chapin explains WVD on sizing and licensing.
Dutch WVD YouTube channel Dutch WVD YouTube chanel
Christiaan Brinkhoff YouTube Channel Christiaan Brinkhoff YouTube Channel with a lot of WVD information

 

Adding a static route to a vCenter Server with multiple Network Interface Cards (NICs)

For a Disaster Recovery (DR) site, I designed a separate isolated VMware Horizon environment. The Center Server has an external (eth0) and internal (eth1) IP address. The external connection is for management and restoring production VMs to the DR environment. The internal connection is for Horizon infrastructure components that need to accesst to the vCenter Server such as a VMware Horizon Server and VMware App Volumes. |This looks simplified as follows:

There must be a static route to the Horizon subnet because the Horizon Connection Servers and VMware App Volumes integrate with the vCenter Server.

Here are the steps outlined to create such an environment:

  • The first thing after deploying a new vCenter Server is adding an extra NIC (VMXNET3). The steps are explained in the following article: KB2147155
  • Add the NIC to the correct internal PortGroup
  • Open the VAMI interface (https://<IP_Address>:5480) of the vCenter Server and add the IP configuration of eth1 (NIC1).

  • Enable SSH in the VAMI interface (Access – Edit – Enable SSH login)
  • Make an SSH session to vCenter Server and log-in with root and the correct password
  • Enter “shell” to launch the BASH shell
  • Browse to the following location:
cd /etc/systemd/network
  • There are two files available (10-eth0.network and 10-eth1.network). The 10-eth0.network represents eth0 and looks like:
[Match]
Name=eth0

[Network]
Gateway=10.2.145.249
Address=10.2.145.202/24
DHCP=no

[DHCP]
UseDNS=false
  • The 10-eth1.network file represents eth1 and looks like this.
[Match]
Name=eth1
[Network]
Address=192.168.0.102/24
DHCP=no
[DHCP]
UseDNS=false
  • Add a static route by adding the [Route] section of this file.
[Match]
Name=eth1
[Network]
Address=192.168.0.102/24
DHCP=no
[DHCP]
UseDNS=false

[Route]
Gateway=192.168.0.1
Destination=10.21.9.0/24
  • Restart the network services
systemctl restart systemd-networkd.service
  • Check if the route is added with the route -n command:
root@vcdr01 [ /etc/systemd/network ]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.2.145.249 0.0.0.0 UG 0 0 0 eth0
10.2.145.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.21.9.0 192.168.0.1 255.255.255.0 UG 0 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
  • Test with the ping command from the vCenter Server if you can reach the Horizon infra components in the subnet.

 

Install Home Assistant on ESXi-ARM

One of the use cases for running ESXi-ARM in my home lab environment is running Home Assistant. Home Assistant is a great open-source platform for home automation.  After assembling the Pi cluster (see my previous blog post) and installing ESXi on ARM (ESXi-ARM) using the “Fling on Raspberry Pi” documentation, it’s time to install Home Assistant.

In this example, I install the following components:

  • Ubuntu for ARM
  • VMware Tools
  • Docker
  • Home Assistant in a Docker container.

Pre-requisites

  1. Download Ubuntu 20.04.1-live-server-arm64.iso, Link
  2. Make a connection to the vCenter Server : https://<vcenter server>/ui or the local ESXi server https://<esx-server>
  3. Upload the Ubuntu ISO to a datastore

Home Assistant VM Creation

Create a new virtual machine with the following specifications:

  • Right click Host Select Create/Register VM

  • Virtual Machine name: HomeAssstant-001
  • Select a compute resource: select an ESXi server
  • Select storage: <Select the datastore>
  • Select compatibility: ESXi 7.0 and later
  • Select a guest OS:
    • Guest OS Family: Linux
    • Guest OS Version: Ubuntu Linux (64-bit)
  • Customize hardware:
    • CPUs: 2
    • Memory: 2048 MB
    • Hard disk 1: 30 GB
    • Network adapter 1: Select the port group
      • Adapter type: E1000E
    • CD/DVD Drive 1: Datastore ISO file
      • Browse to the Ubuntu ISO
      • Connect at Power On: checked
    • Video Card: Default settings
  • Next
  • Finish
  • Power on the VM
  • Open a console session

Ubuntu Installation

  • Select: Install Ubuntu Server

  • Language: English
  • Select: Install Ubuntu Server
  • Choose your preferred language: English
  • Keyboard configuration: Select the layout and variant: English US (variant (US)
  • Installation: Install Ubuntu
  • Networking connections: The ens160 is the ethernet NIC of the VM. Select the IPv4 method: DHCP or a manual fixed IP address
  • Configure proxy: leave this blank you are a not using a proxy server
  • Ubuntu mirror: Use the mirror address suggested
  • Filesystem setup: Use an Entire Disk
    • Filesystem summary: Done
    • Confirm destructive action. Are you sure you want to continue: Continue
  • Profile setup: Fill in the following fields (remember the username and password)
    • Your name: <your name>
    • Your server’s name: <server name>
    • Pick a username: <username>
    • Choose a password: <password>
    • Confirm a password: <password>
  • SSH Setup: Install the OpenSSH server
    • Import SSH identity: No

  • Featured Server Snaps: Select none
  • The installation of Ubuntu begins

  • Once the installation is complete! Reboot the system

After the installation of the Ubuntu OS, perform the following post configuration actions:

  • In a console session, find the IP address with the ip -a command. VMware Tools is not installed yet, so the IP address is not visible in VM properties.
  • Connect to the Ubuntu using an SSH session with Putty for example
  • Install the latest Ubuntu updates and upgrades
sudo apt update && sudo apt upgrade -y
sudo reboot

Open VMware Tools installation

In the SSH session install package dependencies and clone the open git repository.

sudo -i
apt install -y automake-1.15 pkg-config libtool libmspack-dev libglib2.0-dev libpam0g-dev libssl-dev libxml2-dev libxmlsec1-dev libx11-dev libxext-dev libxinerama-dev libxi-dev libxrender-dev libxrandr-dev libgtk2.0-dev libgtk-3-dev libgtkmm-3.0-dev
git clone https://github.com/vmware/open-vm-tools.git
cd open-vm-tools/open-vm-tools/
autoreconf -i
./configure
make
make install
ldconfig

build and install the Open VMware Tools

autoreconf -i 
./configure
make
make install
ldconfig

create a vmtoolsd.service file

cat > /etc/systemd/system/vmtoolsd.service << EOF
[Unit]
Description=
Description=Open VM Tools
After=
After=network-online.target
[Service]
ExecStart=
ExecStart=/usr/local/bin/vmtoolsd
Restart=always
RestartSec=1sec
[Install]
WantedBy=multi-user.target
EOF

Enable the VMware Tools daemon at startup

systemctl enable vmtoolsd.service
systemctl start vmtoolsd.service

Check if the VMware tools are running

systemctl status vmtoolsd.service

Docker installation

In the SSH session run the following commands:

apt install software-properties-common -y
apt-get install -y apparmor-utils apt-transport-https avahi-daemon ca-certificates curl dbus jq network-manager socat
curl -fsSL get.docker.com | sh

Home Assistant installation

In the SSH session run the following command:

curl -sL "https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh" | bash -s -- -m raspberrypi4

After the installation, it takes about 1 minute for all the 7 docker HA containers are up. You can check this by using the docker -ps command.

When the docker containers are up, you can make a web browser connection to:

http://<ip address:8123>

There will be a “Preparing Home Assistant” page for some minutes. Once completed you’re ready to create a user of restore a snapshot of you’re existing configuration. After this, you can start with your home automation projects.