Monday, August 23, 2021

Multimedia redirection for Azure Virtual Desktop preview

Last week the public preview of Multimedia redirection (MMR) for Azure Virtual Desktop was announced! MMR provides the user with a very smooth video playback experience while watching videos in a browser running on Azure Virtual Desktop.

Essentially what happens is that the video from the browser to offloaded to the local machine for faster processing and rendering. As a result of that, the user is presented with a smooth video experience, even when playing a full screen 4k video. Not only that, since the playback is offloaded to the local a significant drop in resources on the AVD host will also occur which leads to a higher user density. Typically you’ll see less CPU used on the AVD host and the local GPU being leveraged.

To get this to work you need a couple of requirements (some of those are related to preview version of MMR). Also note that both Edge and Chrome are supported.

After installing the the multimedia redirection extension on your AVD hosts, it can be enabled inside the browse as shown below.

Once enabled you will see the AVD icon in the upper right corner of your browser indicating the extension is enabled. For this current preview, only YouTube is supported but you can already test other webservices by selecting “Enable for all sites” which, as it states is currently in an experimental face.

To take MMR to the test I did a comparison of running a 4K YouTube video in full screen in an AVD Session with and without MMR enabled on a session host without GPU.

Azure Virtual Desktop Multimedia Redirection (preview) — YouTube

The video playback in the remote session was very smooth with MMR enabled and there was a significant drop in CPU usage noticeable. Also, the local GPU was clearly being leveraged for the rendering of the offloaded YouTube video.

Although still in public preview with some current limitations to be aware of and this being a very early test, the results were already amazing. I’m looking forward to seeing how this continues to evolve.

Tuesday, July 13, 2021

New book: 'Getting started with Bicep' now available!

Happy to announce my new book: Getting started with Bicep : Infrastructure as code is now available on Amazon both in kindle and paper back!

I’m extremely honored and thankful that both Mark Russinovich and Alex Frankel wrote on introduction to this book! Thank you so much for taking the time! A huge thank you to Kristin Griffin, Esther Barthel and Marcel Eeken who reviewed the book and provided great feedback! I could not have done this without you! And finally, a big thanks to Stefan Ivemo who authored a great guest chapter covering his community project, a PowerShell module for Bicep! 

Click here to order!


Infrastructure as Code is crucial to becoming successful in the Azure Cloud. Azure Resource Manager allows you to create resources in Azure in a declarative way. For many years we have been using ARM Templates to declare resources in a JSON format. Although ARM Templates are very powerful, the implementation of the JSON language is hard to read, maintain and debug. Bicep, a Domain Specific Language, overcomes these issues by providing a transparent abstraction layer on top of ARM and ARM Templates. This significantly improves the authoring experience. Bicep is easy to understand at a glance and straightforward to learn regardless of your experience with other programming languages. The book starts with some history and background in Infrastructure as Code and ARM Templates. It continues by explaining Bicep and providing guidance on how to get started. After the introduction, you will start your journey by understanding the syntax of Bicep. You will start by learning the basics first and you will gradually dive deeper in the more advanced scenarios. The book also contains a dedicated chapter on a big real-world example which provides you with great insights on how to leverage Bicep for production usage. Part of this book is also the Bicep playground, visualizer and a PowerShell module for Bicep provided by the community. Sample code used in this book is available on a dedicated GitHub repository.

What you will learn:

  • How to get started with the Bicep CLI and VSCode Extension
  • Deploying Bicep files to Azure, including template specs
  • Understanding the Bicep file structure
  • How to use the basic concepts of variables, parameters, tags, decorators, expressions, and symbolic names
  • Getting familiar with more advanced topics like dependencies, loops, conditions, target scopes, modules, and nesting
  • Leveraging features like snippets, scaffolding, and linter that support you while authoring Bicep templates.

Dedicated GitHub repository:

Part of this book is a dedicated GitHub repository containing the sample code that is used throughout the book.

Friday, April 16, 2021

Bicep code snippets for WVD!

Yesterday, a couple of code snippets I contributed to Bicep 💪, were merged in the latest Bicep CLI version 0.3.310! Super cool to see this in action myself for the first time.

What does it allow you to do? Bicep is the DSL which allows you to create Azure Resources in a declarative way. The Bicep VSCode extension already does a great job of providing Intellisense, code completion and much more! Recently, the concept of Code Snippets was also introduced in Bicep. This allows you to declare resources in a super fast way.

The Code Snippets I contributed allow you to declare WVD resources in a matter of seconds. It’s hard to capture this in a couple of screenshots, so I created a quick video to show this in action!

Bicep code snippets for WVD in action! — YouTube

Subscribe to my You Tube channel to get updates on new videos!

Thursday, April 8, 2021

Slide decks of my speaking engagements

I decided it was about time to publish the decks of my speaking engagements into a central repo. Github ⭐ seemed like the perfect place, so here it is. It contains a first subset of my sessions over the past years from in-person events around the world 🌎(pre-Covid), various community conferences, meetups & webinars 🎥! Most session discuss topics around Windows Virtual Desktop, Remote Desktop Services, ARM Templates and Bicep!

#WVD #Bicep #Community

Tuesday, December 22, 2020

e-book: Windows Virtual Desktop Migration Guide for Remote Desktop Services

I authored the e-book Windows Virtual Desktop Migration Guide for Remote Desktop Services. This book takes you through a 7-step process of migrating your RDS workloads to WVD. 

The book focusses on the migration process and with only 40 pages it's easy to digest! 

The e-book is published by Microsoft as a free download:

Tuesday, December 15, 2020

Parallels RAS integration with Windows Virtual Desktop!

Recently Parallels announced version 18 of their Remote Application Server (RAS) product is coming soon! The release notes with added features and improvements for this version is huge! The highlights are as:

  • Windows Virtual Desktop Integration
  • FSLogix Profile Containers Integration
  • UX Evaluator & Advanced Session Metrics
  • Automated Image Optimizations
  • RDSH & VDI Local Storage Distribution
  • Management Portal

For an explanation of the full list of this release see this article: Coming Soon in Parallels RAS 18. In this article I want to focus on the Windows Virtual Desktop Integration. I remember conversations with many people of the Parallels RAS team discussing Windows Virtual Desk integration approaches based on their early mock up diagrams. I had the privilege of testing version 18 release during technical preview and it’s great to see the ideas and discussions come to life integration into their product. They did a great job! The parallels RAS product is known for it’s feature richness without the complexity, and they managed to pull that off once again with the WVD Integration!

If you’re familiar with installing Parallels RAS, the installation process of version 18 will look very similar. You do of course have to have a couple of additional requirements in place specifically for the WVD integration. Because of the integration, a couple of permissions on the Azure AD and Azure Resources side need to be in place and Parallels RAS uses an App registration for all of this. I will not cover these steps for now as they will be shared in great detail when version 18 will hit general availability.

Below is the architecture of the integration with WVD. It shows a hybrid deployment with on premises setup, however RAS can of course also be deployment entirely on Azure as well.

After the installation you will immediately notice the new Wizard in the admin console that guides you through the process of configuring WVD integration.

The first steps is to provide a location where the WVD agent and bootloader will be placed. This is because Parallels RAS will perform the installation of these components for you. Next, you provide the credentials that Parallels RAS will use to communicate with Azure, this result into a Provider object.

The next step in the wizard is creating the WVD Workspace, you’ll obviously see the same parameters compared to creating the Workspace directly in Azure.

The next step is the creation of the WVD Host pool including the properties like load balancing etc. Notice that Parallels RAS already provides the option to configure a Power On for hosts on demand, which includes pooled configurations! This means the first user to connect to a host pool causes a WVD host to Power On in case all hosts are powered off due to auto scaling.

Next we can define the Template to be used for the provisioning of WVD Hosts. We have 2 options here.

  • Custom Host means we can point to any running VM in Azure that we want to use as a template source. Upon selecting a VM, Parallels will take a snapshot of that VM and use that to provision WVD hosts.
  • Azure Gallery means we can select any existing Template Image from the Azure Marketplace or our own Shared Image Gallery (SIG).

Note that if you already have existing hosts and do not need autoscaling, then you can also use Standalone (unmanaged) option instead.

The next step allows us to configure the naming convention for WVD hosts, the number of VM’s, buffers and whether the newly deployed hosts should remain powered on after deployment or turned off for later use.

The next step is to provide sizing, and networking details. The wizard presents easy to use dropdown boxes with information taken directly from your Azure Subscription.

And finally, the wizard allows us to configure image optimization settings that Parallels RAS provides out of he box, which is a great feature. It also allows us to either use Sysprep or Parallels RASprep to prepare the images.

Upon completion, Parallels RAS will create our Workspace, Host pool and App group, prepare the Image in Azure and deploy x number of WVD hosts, join them to the domain and add them to the WVD host pool. Below is a quick summary of what the result looks like in the console.

Similar to how we are used to publish applications and desktops in the Parallels console, we can also do this for WVD resources. The great thing is that we can now also mix and match resources from RDS on premises and WVD using a single console and providing these to the user using a single Parallels RAS client, which means Hybrid scenarios!

When opening the Parallels Client for Windows and logging on were a presented with the Desktop hosted in WVD.

Upon connection we leverage the WVD Client (default option) which means we get all the capabilities of the WVD Windows client.

And this release of Parallels RAS also contains a fully integrated way of configuring FSLogix including all of the advanced settings, very cool!

The RAS Console also provides great session details

And we can also interact with the session directly, including shadowing.

And finally, below you see a Hybrid scenario with Applications and Desktops coming from an RDSH farm as well as a Desktop coming from WVD, all in a single client with a single identity!

This article focussed on the WVD integration of release of Parallels RAS, the team once again did an amazing job! As said before, they provide great additional features on top of native VWD without the penalty of over complexing things. Special thanks to Christian Aquilina, Director of Program Management at Parallels for providing me tech preview access and reviewing this article. Stay tuned for Parallels RAS 18 to become Generally available and try it out for your self!

Monday, December 14, 2020

MSIX app attach WVD integration, my first test drive!

 I had the privilege to test drive the integration of MSIX app attach in the Azure portal at an early stage. In this article I’ll share my early test results!

On October 16, 2019 I wrote the article MSIX app attach will fundamentally change working with application landscapes on Windows Virtual Desktop! This was based on a pre-private preview providing a sneak peek on what’s coming. Since that time I wrote several other articles covering the evolution of the technology. I covered publishing a heavy design application using MSIX app attach, I shared some scripts to transform MSIX applications into packages, and recently I published a video showing the staging and registering of seven applications inside a single MSIX app attach container. Until now, MSIX app attach was all based on PowerShell to stage and register MSIX app attach applications.

Recently Microsoft shared more details on MSIX app attach and Stefan Georgiev, Senior Program Manager on the WVD team, published a great video on the Azure Portal Integration with for MSIX app attach.

Before we get started we obviously needs MSIX app attach packages ready on a share and accessible from the Host Severs. This process is identical to way we performed that when using the PowerShell method of staging and registering, so I won’t repeat that here. Instead, let’s jump right in and take a look at the integration in the Azure Portal! Inside the Azure portal on the Host Pool blade, we now have a new option MSIX packages.

Image for post

This allows us to perform the first step, staging applications to all WVD Hosts that are part of this host pool. By clicking Add we can specify the UNC path towards the MSIX app attach package (IaaS File Share, Azure Files et cetera). And after doing that the list of MSIX applications (entry points) inside that package is retrieved and presented in a dropdown box. In the example below I have seven applications inside a single package. For this step to work, the host pool obviously needs to be in a healthy state, and at least 1 WVD Host needs to be running. Adding MSIX packages to a host pool will trigger the RD Agent on a healthy WVD Host inside the pool which is randomly selected. That WVD host will then load, parse, and validate the MSIX image and the MSIX packages stored inside it.

Image for post

After selecting an application we are able to complete the application details by providing the application name, display name description etc.

Image for post

After completing this for a couple of example applications this looks like below.

Image for post

At a five minute interval the RD Agent on each WVD Host that is part of the host pool will contact the WVD management service to check for any updates. During that time the Staging step takes place and the WVD Host will mount the MSIX app attach package. This can be confirmed by taking a look at disk manager.

Image for post

In order to prevent users from using the MSIX package before it is staged on all WVD Hosts, you can set to the state “Inactive” in the Azure Portal.

Now that we have covered the staging step, let’s take a look at the registering step. For that we open the WVD App group we want to use and select Add. This allows us to specify the MSIX source package and select an application.

Image for post

After completing the step for in this case 4 sample applications, that looks like below.

Image for post

We can now log on with a test user who is a assigned to this application group and see the end result. Upon logon, the registering step takes place and the MSIX app attach application now appear in the session!

Image for post

And here are all four applications running in my user session coming from, in this case, a single MSIX app attach container!

Image for post

We covered working with MSIX app attach in the Azure Portal, but the PowerShell equivalents are of course also available to help automate the configuration. For that to work, make sure you update your Az.DesktopVirtualization to version 2.0.1. Below is an example of using Get-AzWvdMsixPackage.

Image for post

In case you want to change the 5-minute interval that WVD hosts use to check for MSIX app attach updates, here is the corresponding registry location.



Image for post

The Event log also provides information about the various staging and registering steps.

Image for post

Below is a nice visual representation of the MSIX staging and registering steps, as shared by Tom Hickling.

Image for post

And finally, special thanks to Stefan Georgiev for providing the preview information and the ability to test drive this early! It’s super great to see huge steps MSIX app attach is taking. The integration in the Azure Portal works really well! Looking forward to adding more applications and test-driving other scenarios!