{"id":4781,"date":"2009-01-09T11:35:00","date_gmt":"2009-01-09T11:35:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2009\/01\/09\/managing-remote-desktop-services-aka-terminal-services-using-windows-powershell\/"},"modified":"2019-02-18T13:12:56","modified_gmt":"2019-02-18T20:12:56","slug":"managing-remote-desktop-services-aka-terminal-services-using-windows-powershell","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/managing-remote-desktop-services-aka-terminal-services-using-windows-powershell\/","title":{"rendered":"Managing Remote Desktop services (aka Terminal services) using Windows PowerShell"},"content":{"rendered":"<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Hello everyone,<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\" face=\"Calibri\">We are pleased to announce that the Beta release of Windows server 2008 R2 supports managing <\/font><a href=\"http:\/\/blogs.msdn.com\/ts\/archive\/2008\/11\/03\/terminal-services-renamed-remote-desktop-services-at-teched-emea.aspx\"><font color=\"#0000ff\" size=\"3\" face=\"Calibri\">Remote Desktop services<\/font><\/a><font size=\"3\" face=\"Calibri\"> using <\/font><a name=\"_Toc207704230\"><\/a><font size=\"3\"><font face=\"Calibri\">PowerShell. <span>&nbsp;<\/span>You can now configure and manage all RDS role services and components using PowerShell.<span>&nbsp; <\/span>For example, below are few management tasks that you can now do with PowerShell<\/font><\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><span><font size=\"3\" face=\"Calibri\">1.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">View and edit configuration settings of Remote Desktop server <\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><span><font size=\"3\" face=\"Calibri\">2.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Publish RemoteApp applications<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><span><font size=\"3\" face=\"Calibri\">3.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Configure License Server<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><span><font size=\"3\" face=\"Calibri\">4.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Create and configure a Remote Desktop server farm<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><span><font size=\"3\" face=\"Calibri\">5.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Configure and assign virtual IP addresses to either sessions or applications<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><span><font size=\"3\" face=\"Calibri\">6.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Create and manage RDV (VDI) pools<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><span><font size=\"3\" face=\"Calibri\">7.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">Create and manage Gateway Resource Access &amp; Client Access policies<\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">Of course there is a lot more that you can do with Windows PowerShell. Install the beta release of Windows Server 2008 R2 and give this feature a try. As always, we are eager to hear what you think and it is important that you let us know what you like and don\u2019t like as early as possible.<\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">Read further to understand RDS PowerShell in detail.<\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><b><font size=\"3\"><font face=\"Calibri\">Remote desktop services PowerShell<\/font><\/font><\/b><\/span><\/p>\n<p><span><\/span><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Once you install the Remote Desktop services role, a PowerShell provider gets installed. This Provider<b> <\/b>(we\u2019ll call it RDS provider in the rest of this post) allows you to view and manage the configuration of all role services and components of Remote Desktop Services.<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><span>&nbsp;<\/span>Think of RDS Provider as something similar to file system provider and registry provider, <\/font><\/font><a href=\"http:\/\/www.iis.net\/downloads\/default.aspx?tabid=34&amp;i=1664&amp;g=6\"><font color=\"#0000ff\" size=\"3\" face=\"Calibri\">IIS Provider<\/font><\/a><font size=\"3\"><font face=\"Calibri\">. You view, navigate and work with RDS provider as you would with any of the other providers. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\" face=\"Calibri\">&nbsp;<\/font><\/span><a name=\"_Toc207704242\"><\/a><b><font size=\"3\" face=\"Calibri\">Working with <\/font><\/b><b><font size=\"3\"><font face=\"Calibri\">RDS PowerShell<\/font><\/font><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">To get started, first install the Remote Desktop services role and then launch RDS PowerShell. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Step 1: Install Remote Desktop services role<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">RDS PowerShell is installed when you install the Remote Desktop services role. You can install the Remote Desktop services role using Server Manager.<span>&nbsp; <\/span><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Step 2: Launch RDS PowerShell<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Right click on Start Menu -&gt; All Programs -&gt; Administrative Tools -&gt; Remote desktop services -&gt; \u2018Remote Desktop Services PowerShell\u2019 and select \u2018Run as Administrator\u2019.<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Once you click on this link, you\u2019ll see a PowerShellPowerShell window with the prompt set to RDS drive. There it is \u2013 the RDS provider for you. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><a name=\"_Toc207704244\"><\/a><font size=\"3\" face=\"Calibri\">You\u2019d notice that once you issue the dir command, you see a view that has the following six columns. <\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><b>Name<\/b>: Name of the Container\/Setting<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><b>Type<\/b>: Type of Item. There are three possible values for Type \u2013 Container (Node), Integer, or String. Container (Node) denotes a Container Item, and Integer and String denote Settings. You can only CD into container items. Containers represent a setting group or a logical entity whereas Settings represent configuration settings. For example, roles such as RDS andConnection broker, and entities such as Connection Objects and RemoteApps are represented as Containers, while server drain mode is represented as a setting<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><b>CurrentValue<\/b>: Value set to the Item (applicable only toItems of \u2018Integer\u2019 or \u2018String\u2019 Type)<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><b>GP<\/b>: Indicates whether an Item is controlled by group policy or not <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><b>PermissibleValues<\/b>: Possible values that a Setting Item can have<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><b>PermissibleOperations<\/b>:<span>&nbsp; <\/span>Operations (cmdlets) that can be performed on the Item<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\"><font size=\"3\">Users can select which columns are displayed by using the Format-table cmdlet. For example<span> <b><span><span>&nbsp;<\/span><\/span><\/b><\/span><\/font><b><span>Get-Item * | format-table -Property Name, CurrentValue<\/span><\/b><span> <\/span><font size=\"3\">displays only Name and CurrentValue columns. Alternatively you can use <\/font><b><span>dir * | ft -Property N*,C*<\/span><span><font size=\"3\"> <\/font><\/span><\/b><font size=\"3\">to achieve the same result.<span>&nbsp; <\/span><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><a name=\"_Toc207704246\"><\/a><font size=\"3\"><font face=\"Calibri\">You can also customize the default view. More on this in a later post.<\/font><\/font><\/p>\n<p><span><\/span><\/p>\n<p class=\"MsoNormal\"><b><font size=\"3\"><font face=\"Calibri\">How to get help?<\/font><\/font><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">One of the salient features of PowerShell is that it makes it easy to get information and help on a particular aspect. That advantage is retained in RDS Provider as well. There is a property called Description associated with every Item which succinctly describes what a particular setting does. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\" face=\"Calibri\">For example <\/font><a name=\"_Toc207704243\"><\/a><b><span><font face=\"Calibri\">PS RDS:\\RDSConfiguration&gt; get-item .\\DrainMode| fl<\/font><\/span><\/b><span><font face=\"Calibri\"><span> <\/span><span><font size=\"3\">displays information about the DrainMode item. You can also change the default view to always display the Description column. <\/font><\/span><\/font><\/span><\/p>\n<p><span><\/span><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Now, let\u2019s look at few examples. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><a name=\"_Toc207704247\"><\/a><b><font size=\"3\" face=\"Calibri\">Example<\/font><\/b><b><font size=\"3\" face=\"Calibri\"> <\/font><a name=\"_Toc207704248\"><\/a><font size=\"3\" face=\"Calibri\">1: Set RDP encryption level<\/font><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Step 1: View current encryption level<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">PS RDS:\\RDSConfiguration\\Connections\\RDP-Tcp\\SecuritySettings&gt; dir .\\EncryptionLevel | fl<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Step 2: Set value of EncryptionLevel item to desired value<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">PS RDS:\\RDSConfiguration\\Connections\\RDP-Tcp\\SecuritySettings&gt; Set-Item .\\EncryptionLevel 2<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><a name=\"_Toc207704249\"><\/a><b><font size=\"3\" face=\"Calibri\">Example 2: Specify License servers that a Remote Desktop server will use<\/font><\/b><b><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Step 1: View the current list of License Servers in use <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">PS RDS:\\RDSConfiguration\\LicensingSettings\\SpecifiedLicenseServers&gt; dir<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Step2: View the list of license servers registered with the domain controller.<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">PS RDS:\\RDSConfiguration\\LicensingSettings\\RegisteredLicenseServers&gt; dir<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Step 3: add a License server to SpecifiedLicenseServers list <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">The simplest way to add a license server is to use new-item and specify the name of the license server that you want to add. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">PS RDS:\\RDSConfiguration\\LicensingSettings\\SpecifiedLicenseServers&gt; New-Item -name ls.contoso.com<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">You can use the below command to add all license servers from the registered license server list to specified license server list. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">PS RDS:\\RDSConfiguration\\LicensingSettings\\SpecifiedLicenseServers&gt; dir ..\\RegisteredLicenseServers | new-item \u2013force<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><font size=\"3\" face=\"Calibri\">Example 3: <\/font><a name=\"_Toc207704250\"><\/a><font size=\"3\" face=\"Calibri\">Join a Remote Desktop server to a Session Broker farm<\/font><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\" face=\"Calibri\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">PS RDS:\\RDSConfiguration\\ConnectionBrokerSettings&gt; Set-Item MemberOfFarm 1 -FarmName testFarm -sessionbroker contoso-sb-test<span>&nbsp; <\/span>-CurrentRedirectableAddresses 65.52.65.53<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><a name=\"_Toc207704252\"><\/a><b><font size=\"3\" face=\"Calibri\">Example 4: Add a RemoteApp<\/font><\/b><b><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span><font face=\"Calibri\">PS RDS:\\RemoteApps\\PublishedApplications&gt; New-Item -Name &#8220;IExplore&#8221; -ApplicationPath &#8220;c:\\Program Files\\Internet Explorer\\iexplore.exe&#8221; -ApplicationName &#8220;Internet Explorer&#8221; -ShowInPortal 1<\/font><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><a name=\"_Toc207704238\"><\/a><font size=\"3\"><font face=\"Calibri\">These are just few examples that demonstrate the various possibilities.<span>&nbsp; <\/span>Almost all configuration tasks related to RD server configuration, RemoteApp, Gateway, License server, and RDV can now be performed using the RDS provider. <\/font><\/font><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">Also, the true potential of RDS Provider is realized when writing a script to<\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><span><font size=\"3\" face=\"Calibri\">1.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">chain multiple configuration activities together <\/font><\/font><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><span><font size=\"3\" face=\"Calibri\">2.<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font size=\"3\"><font face=\"Calibri\">perform configuration on multiple servers<\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">One scenario that best demonstrates the above is the creation of RD server farms. The script shown as a example at the end of this post takes a list of servers and applications as input and creates a RD server farm and creates RemoteApp on all of the servers. <span>&nbsp;<\/span>Create two text files, one with a list of servers and another with a list of app paths (you can use paths with shell variables such as %windir%) and pass the names of these files as input to this script.<\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">Since this script makes use of PowerShell remoting, before you execute the script make sure you have enabled PowerShell remoting (run Enable-PSRemoting from an elevated PowerShell Windows to enable remoting.). <span>&nbsp;<\/span><\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">Of course this is a very rudimentary script \u2013 you can augment it easily with advanced and specific functionality to suit your needs.<span>&nbsp; <\/span>Also, in our opinion, one of the important advantages of RDS provider is that one doesn\u2019t need to be a programmer to be able write such scripts as CreateRDFarm. All one needs to know is basic PowerShellPowerShell scripting. <\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><span>I hope you are as excited as we are about the possibilities that this opens up. Do let us know what you think. Also, keep watching this space for more scripts that you can put to use. <\/span><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\" face=\"Calibri\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">Appendix: Sample script<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">#Windows PowerShell script to create a RD Server farm.<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">if ($args[0] -eq $null -or $args[1] -eq $null -or $args[2] -eq $null ){<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Write-Host<\/b> &#8220;Insuffecient parameters.`nUsage: CreateRDFarm.ps1 SessionBroker Farmname &lt;File containing list of RDS servers&gt; &lt;File containing Applications to publish&gt;&#8221;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>exit<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}else{<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$sb = $args[0]<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$farmname = $args[1]<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">$rdsarr = <b>get-content<\/b> $args[2]<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">if ($rdsarr -eq $null){<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Write-Host<\/b> &#8220;$args[2] cannot be read or is empty.`nUsage: CreateRDFarm.ps1 SessionBroker Farmname &lt;File containing TS servers&gt; &lt;File containing Applications to publish&gt;&#8221;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>exit<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">if ($args[3] -eq $null){<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Write-Host<\/b> &#8220;No file containing Apps Servers specifed. TS Remote Apps will not be published.`nUsage: CreateFarm.ps1 SessionBroker Farmname &lt;File containing TS servers&gt; &lt;txt file containing Applications to publish&gt;.`n Farm creation will continue&#8221; <i>-ForegroundColor<\/i> yellow<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}else{<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$apparr = <b>get-content<\/b> $args[3]<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if ($apparr -eq $null){<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Write-Host<\/b> &#8220;$args[3] cannot be read or is empty.`nUsage: CreateRDFarm.ps1 SessionBroker Farmname &lt;File containing TS servers&gt; &lt;File containing Applications to publish&gt;&#8221;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"># Check whether session broker service is running on the remote machine<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">$sbservice = <b>Get-Service<\/b> <i>-ComputerName<\/i> $sb <i>-Name<\/i> Tssdis<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">if( $sbservice.status -ne &#8220;Running&#8221;){<\/span><\/p>\n<p class=\"MsoNormal\"><b><span lang=\"EN-IN\">Write-host<\/span><\/b><span lang=\"EN-IN\"> &#8220;Session Broker service is not running on $sb. Exiting farm creation&#8221;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">exit<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">if ($rdsarr[0] -eq $null){<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Write-Host<\/b> &#8220;No TS Server specified. Atleast one TS Server need to be specified.`nUsage: CreateFarm.ps1 SessionBroker Farmname TS1 TS2 &#8230;&#8221;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>exit<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">#create a run space to run remote commands on the Session Broker server<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">$sb_remotesession = <b>New-PSSession<\/b> <i>-ComputerName<\/i> $sb<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">foreach ($rds in $rdsarr){<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>#add ts server to Session Broker Computers group on SB server<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$tst = $rds+&#8221;$&#8221;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>invoke-command<\/b> $sb_remotesession <i>-ScriptBlock<\/i> {<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>net localgroup &#8216;Session Broker Computers&#8217;<span>&nbsp; <\/span>\/add $args[0] 2&gt;$null;<b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>} <i>-ArgumentList<\/i> $tst<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>#join each ts server to sb farm. <\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Write-Host<\/b> &#8220;Joining RD server $rds to $farmname farm&#8221; <i>-ForegroundColor<\/i> magenta<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$rds_remotesession = <b>New-PSSession<\/b> <i>-ComputerName<\/i> $rds<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>invoke-command<\/b> $rds_remotesession <i>-ScriptBlock<\/i> { <b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>import-module<\/b> RemoteDesktopServices ;<b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$cipaddr = <b>dir<\/b> RDS:\\RDSConfiguration\\ConnectionBrokerSettings\\RedirectableAddresses ;<b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Set-Item<\/b> RDS:\\RDSConfiguration\\ConnectionBrokerSettings\\MemberOfFarm 1 -FarmName $args[0] -sessionbroker $args[1] -IPAddressRedirection 0 -CurrentRedirectableAddresses $cipaddr[0].Name ;<b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><i>-ArgumentList<\/i> $farmname,$sb<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>#create ts remote apps<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if ($args[3] -ne $null){<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>foreach ($app in $apparr){<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Write-Host<\/b> Publishing $app on $rds <i>-ForegroundColor<\/i> magenta<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$ind = $app.LastIndexof(&#8220;\\&#8221;)<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$alias = $app.SubString($ind+1,$app.LastIndexOf(&#8220;.&#8221;)-$ind-1)<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>invoke-command<\/b> $rds_remotesession <i>-ScriptBlock<\/i> { <b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>new-item<\/b> <i>-Path<\/i> RDS:\\RemoteApps\\PublishedApplications <i>-Name<\/i> $args[0] -ApplicationPath $args[1]<b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<b>`<\/b><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><i>-ArgumentList<\/i> $alias,$app<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>#close the remote session<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><b>Remove-PSSession<\/b> $rds_remotesession<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">}<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"EN-IN\">#close the sb runspace<\/span><\/p>\n<p class=\"MsoNormal\"><b><span lang=\"EN-IN\">Remove-PSSession<\/span><\/b><span lang=\"EN-IN\"> $sb_remotesession<\/span><\/p>\n<p class=\"MsoNormal\"><font size=\"3\" face=\"Calibri\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\" face=\"Calibri\">&nbsp;<\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">Shanmugam Kulandaivel<br \/>Remote Desktop Virtualization Services Team<\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><\/font><\/font>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello everyone, We are pleased to announce that the Beta release of Windows server 2008 R2 supports managing Remote Desktop services using PowerShell. &nbsp;You can now configure and manage all RDS role services and components using PowerShell.&nbsp; For example, below are few management tasks that you can now do with PowerShell 1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; View and edit [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4781","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>Hello everyone, We are pleased to announce that the Beta release of Windows server 2008 R2 supports managing Remote Desktop services using PowerShell. &nbsp;You can now configure and manage all RDS role services and components using PowerShell.&nbsp; For example, below are few management tasks that you can now do with PowerShell 1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; View and edit [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/4781","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=4781"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/4781\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=4781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=4781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=4781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}