Recently I wanted to make it easy for users to add a Remote Desktop Service web feed through group policies. I created a script that needs to be run in the user context.
You need to specify a URL in the script as a variable.
Feel free to use it.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
Function Install-RDSWebFeed { [cmdletbinding()] Param ( [Parameter(Mandatory=$true, HelpMessage="Please provide a valid URL, example 'https://remote.something.com/RDWeb/Feed/webfeed.aspx' .")]$URL ) #Check if the RDS webfeed already exists. If(-not (Check-RDSWebFeed -URL $URL)) { Write-Output "Information: Web feed doesn't exist."; #Create the WCX file. $WCX = (Create-WCXFile -URL $URL); #Add the web feed. Start-Process -FilePath rundll32.exe -ArgumentList 'tsworkspace,WorkspaceSilentSetup',$($WCX).ToString() -Wait -NoNewWindow; #Directory of the WCX file. $Directory = $WCX -split "\\"; #Delete the WCX file. Remove-Item -Path ($Directory[0] + "\" + $Directory[1]) -Force -Confirm:$false -Recurse; } Else { Write-Output "Information: Web feed already exists."; } } Function Check-RDSWebFeed { [cmdletbinding()] Param ( [Parameter(Mandatory=$true, HelpMessage="Please provide a valid URL, example 'https://remote.something.com/RDWeb/Feed/webfeed.aspx' .")]$URL ) #Get all feeds for the current user. $Feeds = Get-Item 'HKCU:\Software\Microsoft\Workspaces\Feeds\*'; [bool]$InUse = $false; #Foreach feed. Foreach($Feed in $Feeds) { #If the feed is already in use. If($Feed.GetValue("URL") -eq "$URL") { #Set variable. $InUse = $true; } } Return $InUse; } Function Create-WCXFile { [cmdletbinding()] Param ( [Parameter(Mandatory=$true, HelpMessage="Please provide a valid URL, example 'https://remote.something.com/RDWeb/Feed/webfeed.aspx' .")]$URL ) #Construct the XML file. $XML = @" <?xml version="1.0" encoding="utf-8" standalone="yes"?> <workspace name="Company Remote Access" xmlns="http://schemas.microsoft.com/ts/2008/09/tswcx" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <defaultFeed url="$URL" /> </workspace> "@ #WCX file path. $Directory = ("C:\" + [guid]::NewGuid() +"\"); $WCX = "webfeed.wcx"; $FullPath = ($Directory + $WCX); #New folder. New-Item $Directory -Type Directory -Force | Out-Null; #Export the file. $XML | Out-File -FilePath $FullPath -Encoding utf8 -Force | Out-Null; #Return file path. Return $FullPath; } Install-RDSWebFeed -URL "https://remote.netcompany.com/RDWeb/Feed/webfeed.aspx"; |
Not even 5 years later and someone uses this script. 😉
Thank you very much Alex for sharing this. This is still absolutely useful, because its still not possible to provide more than one default feed per GPO.
The most important thing is the info you are providing here (with the script as bonus). How to construct the wpx XML file and how to use it with rundll32.exe.
Only the line:
Remove-Item -Path ($Directory[0] + “\” + $Directory[1]) -Force -Confirm:$false -Recurse;
is a bit dangerous, when you change the $Directory from “C:\” to e.g. “C:\temp”. My whole temp was deleted. Thank god I didn’t use C:\users\roger
Thanks again. I’m happy that I found this.
Greets Roger
Beautifully written and helped me out a ton. Thank you so much.
can this script be used with GPO to have only admin users get the remote apps? offhand question do you have any ideas why after a fresh image of a computer the remote apps and desktop user gpo that i have set is being blocked or just not applying with win 11 22h2 and when i run your script it adds the apps for the user but then it gives an error of the remote computer requires network level authentication?
It can be used in a GPO.
NLA requires line-of-sight to the domain controllers, check your network config.