Table of Contents
There are customers who don’t need the Ferrari solutions like Citrix Virtual Apps and Desktops to centralize their workloads – as native RDS works quite well. If you want to know ALL about RDS, checkout the book by Cláudio Rodrigues and Freek Berson : “RDS – The Complete Guide: Everything you need to know about RDS. And more“
The most asked question is, how to administrate and manage the RD-SessionHosts without a big investment in time and effort? There are MS built-in solutions like SCVMM which requires separate licensing or bigger MS-Packages.
As an all time PVS-lover, let’s use Citrix PVS to provide Remote Desktop Session Hosts. Additionally, the licensing options are profitable.
Deploy a RDS Infrastructure as your needs, Standalone / HA, only internal or with external access, too. You can deploy All-In within only 25 minutes, thanks to Julian’s PowerShell script https://citrixguyblog.com/2017/12/05/powershell-create-a-fully-automated-rds-farm-2016-with-ha-and-gateway-in-25-minutes/
At least, you have to install and configure a Citrix Provisioning Services Infrastructure Server (or better two for HA)
Configure your PVS RDSH Master Device like it’s a Citrix Image, only with the installation of PVS Target Device Software – described in Blogs like Carl’s https://www.carlstalhood.com/pvs-master-device-preparation/ – and build your vDisk.
Deploy Workloads (Maintenance, Test, Prod,…) via PVS Target Device Wizard or by manual. Create your fitting RDSH Collections and add the fresh created RD-SessionHosts via the Server-Manager on your RDS Broker.
Until now, there’s nothing special as all should work as technically designed. Let’s step forward to the adjustments. After rebooting one RDSH (for example after deploying a new PVS vDisk Version or for clearing the RAM cache) you will notice, the Session Host isn’t working anymore and no user is able to login. That’s the point Citrix is resolving by their technical design, as PVS and the Broker (Delivery Controller) are working together in harmony. For RDS, you have to switch to PowerShell, as the RDSH’s get no valid response from the RDS Brokers after rebooting.
The following Script is running every night, started as a task from one the of the RD Connection Broker, rebooting all devices and rejoin their assigned collections. Edit the Script with your RDSH FQDN’s, RD Connection Broker LB-FQDN (or single Broker like in my lab) and Collection names.
import-module RemoteDesktop import-module RemoteDesktopServices #Restarting Collection Prod Restart-Computer -Wait -ComputerName RDSH01.lab.cloud -Force Remove-RDSessionHost -SessionHost RDSH01.lab.cloud -ConnectionBroker RDBRK01.lab.cloud -Force Remove-RDServer -Server RDSH01.lab.cloud -Role RDS-RD-SERVER -ConnectionBroker RDBRK01.lab.cloud -Force Add-RDServer -Server RDSH01.lab.cloud -Role RDS-RD-SERVER -ConnectionBroker RDBRK01.lab.cloud Add-RDSessionHost -CollectionName "Prod" -SessionHost RDSH01.lab.cloud -ConnectionBroker RDBRK01.lab.cloud Restart-Computer -Wait -ComputerName RDSH02.lab.cloud -Force Remove-RDSessionHost -SessionHost RDSH02.lab.cloud -ConnectionBroker RDBRK01.lab.cloud -Force Remove-RDServer -Server RDSH02.lab.cloud -Role RDS-RD-SERVER -ConnectionBroker RDBRK01.lab.cloud -Force Add-RDServer -Server RDSH02.lab.cloud -Role RDS-RD-SERVER -ConnectionBroker RDBRK01.lab.cloud Add-RDSessionHost -CollectionName "Prod" -SessionHost RDSH02.lab.cloud -ConnectionBroker RDBRK01.lab.cloud #Restarting Collection Apps Restart-Computer -Wait -ComputerName RDSH03.lab.cloud -Force Remove-RDSessionHost -SessionHost RDSH03.lab.cloud -ConnectionBroker RDBRK01.lab.cloud -Force Remove-RDServer -Server RDSH03.lab.cloud -Role RDS-RD-SERVER -ConnectionBroker RDBRK01.lab.cloud -Force Add-RDServer -Server RDSH03.lab.cloud -Role RDS-RD-SERVER -ConnectionBroker RDBRK01.lab.cloud Add-RDSessionHost -CollectionName "Apps" -SessionHost RDSH03.lab.cloud -ConnectionBroker RDBRK01.lab.cloud Restart-Computer -Wait -ComputerName RDSH04.lab.cloud -Force Remove-RDSessionHost -SessionHost RDSH04.lab.cloud -ConnectionBroker RDBRK01.lab.cloud -Force Remove-RDServer -Server RDSH04.lab.cloud -Role RDS-RD-SERVER -ConnectionBroker RDBRK01.lab.cloud -Force Add-RDServer -Server RDSH04.lab.cloud -Role RDS-RD-SERVER -ConnectionBroker RDBRK01.lab.cloud Add-RDSessionHost -CollectionName "Apps" -SessionHost RDSH04.lab.cloud -ConnectionBroker RDBRK01.lab.cloud
Instead of buying Citrix Virtual Apps and Desktops Advanced licenses for the full feature package, there’s the option for per PVS Target Device licensing, which is cheaper, so you have to pay per RD Session Host. The correct product name is called „Provisioning Services Datacenter Edition“ (which isn’t allowed for usage for Citrix VA/D workload since 2016).
A Target Device without a license, will initate a system shutdown after 96 hours. Remember this limitation when sizing your total count of Target Devices.
In total you have to purchase RDS CALs and the amount of productive RD Session Host machines – as you have to pay per machine, sizing bigger resources on less count of machines is benefiting.
This solution is in productive daily usage on a small amount of my customers, never having any issues, as the script is running smooth. I’ve implemented the configuration with Server 2016, it should work with 2019 and 2022, too. Anyway, you have to remember, Citrix PVS as the provisioning method for RDS Hosts is a „Third Party Solution“ for Microsoft Support.