Hi, my name is Omair Gillani and I’m a program manager on the Remote Desktop Virtualization team. Remote Desktop Services (RDS) for Windows Server 2012 Release Candidate offers an integrated management experience in the new Server Manager, which makes it easy to deploy, configure, and manage RDS end-to-end. For admins who prefer scripting and automation, one of the great new capabilities added to RDS for Windows Server 2012 Release Candidate is a new Windows PowerShell layer. This provides a powerful mechanism to automate setup for, configure, and manage a complete Remote Desktop Services deployment.
I hope that this post helps you get started deploying Remote Desktop Services by using the Windows PowerShell script. We focused on providing a great GUI administration experience as well as a great scripting experience.
In this post I focus on using script to deploy a single server virtual machine-based desktop deployment by using a Windows 7 Service Pack 1 (SP1) virtual desktop template image.
Let’s start with the prerequisites.
The requirements for setting up a Remote Desktop Services deployment are as follows:
The new Remote Desktop Services virtual machine-based desktop deployment will be set up in two main steps:
You can find the complete script for creating a single server Windows 7 SP1 virtual machine-based desktop deployment on the Script Center http://gallery.technet.microsoft.com/scriptcenter/Create-a-new-WS2012-Remote-f7f06d53. The script takes the name of your server as well as the domain it is joined to as parameters.
The first step in creating an RDS virtual machine-based desktop deployment is installing and configuring the relevant role services. In Windows Server 2012, a single Windows PowerShell cmdlet will both install and configure the RD Connection Broker, RD Web Access, and RD Virtualization Host role services. The cmdlet also allows for any number of RD Virtualization Host servers to be specified for larger deployments.
Figure 1 below shows the first 14 lines of the Windows PowerShell script that will set up a new RDS deployment on a single server. It takes the name of the Hyper-V capable server as a parameter. The script will install all required RDS role services on this single server. The script imports the RemoteDesktop Windows PowerShell module. It then calls the Windows PowerShell New-RDVirtualDesktopDeployment cmdlet to install the RD Connection Broker, RD Web Access, and RD Virtualization Host role services on the server and configure them to have a working RDS deployment.
1 param ( 2 [Parameter(Mandatory=$TRUE, HelpMessage="FQDN of RD Web Access\RD Connection Broker and RD Virtualization host roles")] 3 [String] 4 $serverName, 5 6 [Parameter(Mandatory=$TRUE, HelpMessage="Domain name to be used for new desktops created")] 7 [String] 8 $domain 9 ) 10 11 # Import the RemoteDesktop module 12 Import-Module RemoteDesktop 13 14 # Create a new RDS deployment 15 New-RDVirtualDesktopDeployment -ConnectionBroker $serverName ` 16 -WebAccessServer $serverName ` 17 -VirtualizationHost $serverName 18 Write-Verbose "Created new RDS deployment on: $serverName"
Figure 1: Script lines 1-18
Note: This Windows PowerShell script needs to be run on a remote computer because it requires a restart after installing the RD Virtualization Host role service.
You can use the Get-RDServer cmdlet to get the list of servers and role services that were installed for the newly created RDS deployment.
Now that we have a working RDS deployment, let’s create a new managed pooled virtual desktop collection by using Windows PowerShell. Figure 2 shows the remaining part of the Windows PowerShell script; this will use the New-RDVirtualDesktopCollection cmdlet to create a managed pooled virtual desktop collection by using the virtual desktop template created as part of the prerequisites.
1 Grant-RDOUAccess -Domain $domain -OU "Computers" -ConnectionBroker $serverName 2 3 # Create a new pooled managed desktop collection 4 New-RDVirtualDesktopCollection -CollectionName demoPool -PooledManaged ` 5 -VirtualDesktopTemplateName Win7Gold ` 6 -VirtualDesktopTemplateHostServer $serverName ` 7 -VirtualDesktopAllocation @{$serverName = 1} ` 8 -StorageType LocalStorage ` 9 -ConnectionBroker $serverName ` 10 -VirtualDesktopNamePrefix msVDI
Figure 2: Script lines 20-29
This cmdlet will export the template virtual hard disk (VHD) and then create a single virtual machine in the pool and publish this on the RD Web Access portal. We can now connect to the desktop by going through the RD Web Access portal.
This single Windows PowerShell script enabled us to have a completely automated working RDS deployment. The RemoteDesktop module offers the complete range of Windows PowerShell cmdlets that you need to set up, configure, and manage your Remote Desktop Services deployments.
For more information on using Windows PowerShell for Remote Desktop Services also see Travis’s blog at http://blogs.msdn.com/b/rds/archive/2012/06/28/introduction-to-windows-powershell-scripting-in-windows-server-2012-remote-desktop-services.aspx.
Great blog post Omair!
I'm really happy with the extensive PowerShell support for RDS on Windows Server 2012!
In case anyone is interested in the other RDS deployment type, I wrote an article with more of a focus on session based desktop deployment using PowerShell here:
microsoftplatform.blogspot.nl/.../new-article-using-powershell-to-control.html
Kind regards,
Freek Berson [MVP]
themicrosoftplatform.net
Have you tried to create a pool with Windows 8 Release Preview? The generated virtual desktops crashed with error message "BOOTMGR image is corrupt. The system cannot boot."
Windows PowerShell support is new for RC. Can you try with RC image?
You should be able to successfully create a collection with the RC drop.
-Omair Gillani [MSFT]
Great post Omair,
Is there any chance you could point me in the direction of storage sizing specs, specifically for a deployement of 50 pooled windows 7 desktops created from the gold master win7 vhd? I've seen that the creation process is similar to that of Citrix MCS and would use a number of 3gb of space per virtual desktop in the pool based off a 30gb master vhd in that scenario. Is it safe to say that is a good number? Thank you for your post and assistance.
Regards,
Brian D. Davis (MCP)
I followed the steps above and read the blog linked at the end.
I still have no idea where you set this up so that if I conned to the server with Remote Desktop it sends you to a virtual server instead of the Server 2012 Dekstop.
Any ideas on what I am missing?