Events: Silversands Azure Seminar at Mercedes Benz World

One of the activities I get involved with from time to time is presenting at customer seminars. Recently I was asked to participate in an Azure round table event hosted at Mercedes Benz World.

Key discussion points included:

  • Azure Site Recovery
  • Azure Backup
  • RemoteApp
  • StorSimple
  • Azure AD Premium
  • Express Route

The feedback from the event was great and two lucky customers were even able to take to the test track.


Updating the Template Image of an Azure RemoteApp Collection

Following on from the post Using an Azure Virtual Machine as an Azure RemoteApp Template here is a short article on how to update the template image of an Azure RemoteApp collection.


A new corporate image has been provisioned with the latest Windows updates and a number of new corporate applications. This has been converted into a RemoteApp Template Image which now requires deploying to remote users. How do you update the Template Image of a collection without provisioning a new collection and reconfigure user access?

Updating the Template Image of a RemoteApp collection is a very easy process and can be achieved either via the GUI or PowerShell.

Using the GUI:

Browse to the RemoteApp service and select the collection that requires the Image updating. From the bottom menu click the Update button to initialise the Update RemoteApp collection Template Image wizard.

Once the Update RemoteApp collection Template Image wizard appears, select the new Template Image from the dropdown menu. Then choose how connected users are to be managed during the Image update.

There are two options:

  • Give users 60 minutes after the update. Selecting this option will send a popup message to all active users as soon as the RemoteApp collection has been updated, telling them to save their work and log off and back on. Any users that fail to follow the notice are automatically logged off after 60 minutes. Users can immediately log back on.
  • Sign users out immediately. Selecting this option will log off all users automatically without any warning as soon as the RemoteApp collection has been updated with the new template image. Users can immediately log back on. NOTE: If you choose this option, users might lose data.

Finally click on the tick icon to begin the update.

Once the RemoteApp collection has been updated with the new Template Image, open the collection and publish any new applications using the normal processes.


Via PowerShell:

To update the Template Image of a collection, use the following PowerShell command altering the RemoteApp collection name to the one that you wish to update and the name of the new Template Image.

Update-AzureRemoteAppCollection -Name <CollectionName> -ImageName <TemplateImage> -ForceLogoffWhenUpdateComplete

The RemoteApp PowerShell module has recently been updated with lots of new and updated cmdlets offering better administration. Below is a list of the cmdlets available since the latest update.

Basic RemoteApp Collection cmdlets:

  • New-AzureRemoteAppCollection
  • Get-AzureRemoteAppCollection
  • Set-AzureRemoteAppCollection
  • Update-AzureRemoteAppCollection
  • Remove-AzureRemoteAppCollection
  • Add-AzureRemoteAppUser
  • Get-AzureRemoteAppUser
  • Remove-AzureRemoteAppUser
  • Get-AzureRemoteAppSession
  • Disconnect-AzureRemoteAppSession
  • Invoke-AzureRemoteAppSessionLogoff
  • Send-AzureRemoteAppSessionMessage
  • Get-AzureRemoteAppProgram
  • Get-AzureRemoteAppStartMenuProgram
  • Publish-AzureRemoteAppProgram
  • Unpublish-AzureRemoteAppProgram
  • Get-AzureRemoteAppCollectionUsageDetails
  • Get-AzureRemoteAppCollectionUsageSummary
  • Get-AzureRemoteAppPlan

RemoteApp virtual network cmdlets:

  • New-AzureRemoteAppVNet
  • Get-AzureRemoteAppVNet
  • Set-AzureRemoteAppVNet
  • Remove-AzureRemoteAppVNet
  • Get-AzureRemoteAppVpnDevice
  • Get– AzureRemoteAppVpnDeviceConfigScript
  • Reset-AzureRemoteAppVpnSharedKey

RemoteApp template image cmdlets:

  • New-AzureRemoteAppTemplateImage
  • Get-AzureRemoteAppTemplateImage
  • Rename-AzureRemoteAppTemplateImage
  • Remove-AzureRemoteAppTemplateImage

Other RemoteApp cmdlets:

  • Get-AzureRemoteAppLocation
  • Get-AzureRemoteAppWorkspace
  • Set-AzureRemoteAppWorkspace
  • Get-AzureRemoteAppOperationResult


Hope this was of interest, even if short! 🙂

Using an Azure Virtual Machine as an Azure RemoteApp Template

RemoteAppProvisioning Azure RemoteApp collections requires the administrator to us a preconfigured Server 2012 R2 image. In the same way as with RDS on-premises the image is preinstalled and configured with all of the applications that are to be published to the remote users.

There are three image sources an administrator can currently use when provisioning a collection.

  • Use one of the preconfigured images Microsoft makes available
  • Create an image from a virtual machine built on-premises
  • Create an image from a virtual machine running in Azure

The preconfigured images that Microsoft offer are great for having a quick PoC up and working in a matter of a couple of hours but the recommended option if creating your own is to use an Azure VM.

It goes without saying that plenty of planning should be done when looking to move forward with a production RemoteApp deployment. It is a great Azure service and there are improvements being made all the time but as with everything there are currently some limitations to work with.

For example:

A single user can currently only be assigned to a single collection. Therefore splitting applications such as Office and other LOB applications across multiple collections is not always going to be possible. (I could be wrong but if on-premises RDS is anything to go by, one reason for this could be that a user profile disk can only be used in a single collection and not across multiple.)

As with anything Azure, things change rapidly but as of today, RemoteApp limitations to be aware of during the design phase are:

Resource Default limit
Collections per user 1
Published apps per collection 100
Paid collections 3 (you can request an increase)
Paid template images 25
Users – basic tier 400 (default)/ 800 (maximum)
Users – standard tier 250 (default)/ 500 (maximum)
Concurrent connections across all collections in a subscription 5000 (you can request an increase)
User data storage (UPD) per user per collection 50 GB
Idle timeout 4 hours
Disconnected timeout 4 hours

** Currently timeouts cannot be managed by GPO or configured by the administrator. They are only managed by the RemoteApp service.

More information about RemoteApp and other Azure Service Limits, Quotas, and Constraints can be found by following this link Azure Subscription and Service Limits, Quotas, and Constraints

Building a RemoteApp Template image in Azure:

There are two steps to creating a RemoteApp Template from an Azure VM.

  1. Create a Azure Virtual Machine image with all preinstalled and configured applications
  2. Import the Virtual Machine image in as an Azure RemoteApp Template

Creating a Azure Virtual Machine image

1. Create an Azure Virtual Machine using the “Windows Server Remote Desktop Session Host” image from the Azure Virtual Machine Gallery. This image contains the Windows Server 2012 R2 operating system with the Remote Desktop Session Host (RD Session Host) role installed and meets all the Azure RemoteApp Template image requirements.

2. Connect to the virtual machine and install and configure all of the applications that you plan to publish later on. (Check the image creation tips at the end of this post.)

3. Now all applications have been installed and configured as required, the image needs to be validated. Because the VM was created using the RDSH image from the Azure Virtual Machine Gallery, we have the luxury of double clicking on the “ValidateRemoteAppImage” shortcut on the desktop. This script validates the virtual machine is ready to be used as a RemoteApp image and checks that it is configured in line with all RemoteApp pre-requisites. If all checks pass successfully, the script even offers the option to run SYSPREP for you!

If the script reports back errors, make sure they are resolved before continuing to SYSPREP the image. 

To manually SYSPREP the virtual machine open an elevated command prompt and run the following:

C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown

(Do not use the /mode:vm switch even though this is a virtual machine)

4. Once SYSPREP has run and the VM has been shut down, capture the VM as a virtual machine image. To do this, select the correct VM from the list and click the capture button on the bottom menu.

5. When the capture wizard appears, give the image a name, description and check the box to say that SYSPREP has been run on the virtual machine. Doing this will remove the VM once it has been converted to an image. The final step to the process is to click on the tick to begin the import.

Once complete the image will appear under the virtual machine images tab.


Importing the Azure Virtual Machine image in as an Azure RemoteApp Template

1. Browse to the RemoteApp service and the TEMPLATE IMAGES tab at the top. If it’s the first image in the library click on IMPORT OR UPLOAD TEMPALTE IMAGE to open up the next wizard.

If an image already exists, click on the + on the bottom menu bar to begin adding a new image.

2. Select Import an image from your Virtual Machine library (Recommended).

3. Select the Virtual Machine image from the drop down list and check the box to confirm that all the correct steps were taken in creating the virtual machine image.

4. Give the RemoteApp template image a name and location and finish by clicking on the tick button.

When imported, the RemoteApp Template Image is available to the administrator when creating a new RemoteApp collection.

It is possible as mentioned earlier in the post to upload an image that has been created on-premises and I may cover this in a later post, but using an Azure Virtual Machine is a much easier process and Microsoft recommended approach.

The following are a few tips that Microsoft suggest to use when creating the Template image:

  • Check all applications to be published have start menu shortcuts. This will make publishing the applications much simpler later.
  • Disable automatic software updates for published applications.
  • Install the RDSH role before installing applications to ensure that any issues with application compatibility are discovered before the image is uploaded to RemoteApp. (This is already the case with the Azure RDSH gallery image)
  • Create a local user i.e. sysadmin and add them to the local administrators group and Remote Desktop.
  • Scheduled tasks do persist after SYSPREP.
  • Disable automatic software updates for published applications.
  • Never store data on instances (c:\ drive).

That’s it for this post, its quite a long one but hope people find it useful. 🙂