Microsoft recently released a free tool for managing multiple remote desktop connections called “Remote Desktop Connection Manager”.
A sample screenshot:
There are several nice features, such as “Connect group” which lets you connect to all servers in a group at once:
On the “Group Properties” you may set common settings for all connections in the group, like logon credentials:
Further, there are group properties for RDS Gateway (formerly TS Gateway), display settings, local resources and so on.
There are several applications for remote desktop connections on the market, and some of them got these settings as a per server setting. It`s nice to be able to group servers and configure common settings.
Dynamically creating the connection list
When you work in larger environments with hundreds, maybe thousands of servers, setting up each connection manually isn`t an option.
Since Remote Desktop Connection Manager stores the config-files in xml-files, it`s rather easy to create dynamic config-files for a domain using Windows PowerShell. I`ve created a script to accomplish this, called New-RDCManFile.ps1, available from here. It uses Microsoft`s PowerShell-module for Active Directory, which is available in Windows Server 2008 R2 and RSAT for Windows 7.
The script does the following:
Creates a template xml-file
Inserts the logged on user`s domain name in the file properties
Inserts the logged on user`s domain name in the group properties
Inserts the logged on user`s username in the logoncredentials section
Inserts the logged on user`s domain name in the logoncredentials section
Retrieves all computer objects from Active Directory with the word “server” in the operatingsystem property
Adds each computer object as a server object
Saves the XML-file to %userprofile%domain-name.rdg
When done you can open the rdg-file in Remote Desktop Connection Manager. I would recommend you to insert your password in the Group Properties to avoid being asked for credentials for each connection.
Feel free to customize the script to your needs, in example by editing the XML-template to edit the Group Properties. Another customization might be creating a group for each server OU for enhanced overview in larger environments.
If you would rather use Quest`s PowerShell Commands for Active Directory (which works on downlevel operatingsystems like Windows XP and Windows Server 2003), or any other way to retrieve the server names, you may customize this on line 110.
You might also want to schedule the script to run on a regular basis, saving the file to a central location. This way the IT personnel will always have access to the latest version with the most recent servers added.
If you got any further ideas or comments, please let me know in the comments section below.
Hi Andreas,
Nice article! But…
I was getting this error message from your script when using the Quest AD cmdlet’s:
Cannot set “displayName” because only strings can be used as values to set XmlNode properties.
At C:usersibss077documentspowershellVarious ScriptsNew-RDCManFile.ps1:110 char:9
+ $server. <<<< DisplayName = $($_.Name)
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
Cannot set "name" because only strings can be used as values to set XmlNode properties.
At C:usersibss077documentspowershellVarious ScriptsNew-RDCManFile.ps1:111 char:9
+ $server. <<<< Name = $($_.DNSHostName)
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
I've solved it by changing this portion of the script:
Get-QADComputer -LDAPFilter "(operatingsystem=*server*)" | select name,dnshostname |
ForEach-Object {
$server = $server.clone()
$server.DisplayName = $_.Name
$server.Name = $_.DNSHostName
to:
Get-QADComputer -LDAPFilter "(operatingsystem=*server*)" | select name,dnshostname |
ForEach-Object {
$server = $server.clone()
[string]$server.DisplayName = $_.Name
[string]$server.Name = $_.DNSHostName
Hopefully this will help others also.
Regards, Richard
Great, thanks for the info!
Excellent script. I also got the error above (using the AD module). My fix was similar.
$server.Name = “{0}” -f $_.DNSHostName
Pingback: Building A Remote Desktop Manager Connection List | Sev17
Pingback: What's your Favorite Remote Desktop Manager ?
hi all,
i try the script i was wondering if there was a way to import the server with already groups associated
camilo: It`s possible to do so, you would need to customize the xml-template.
i tried all get are properties but no group i think I’m doing something wrong. can you give me an example how to modify the XML-Template
This is a new rdg-file named “demo” containing only one group named “Group01″ and no servers:
http://pastebin.ca/1952001
thank you very much,
is there a way i can modify the XML template so that i can import multiple groups base on the OU structure in AD.
Hi Jan,
I modifed the template this way, but i am getting this error:
You cannot call a method on a null-valued expression.
At C:scriptsNew-RDCManFile_Quest.ps1:155 char:50
+ $file = (@($xml.RDCMan.file.properties)[0]).Clone <<<< ()
+ CategoryInfo : InvalidOperation: (Clone:String) [],
RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
a0serverList
True
a0servers
True
False
4
False
False
s0serverList
True
s0servers
True
False
4
False
False
This is certainly a reliable and accurate description of how to manage multiple remote desktop connections at once. But many people who want to do this don’t have the requisite tech background, hence opt for turnkey remote desktop products. What is your feeling on this?
Hi, thanks for your feedback.
Usually I suggest that the script are set up as a scheduled task on a server, so that the config-file are updated i.e. once a day. Then the staff in the IT-department may copy the file from a central file-share whenever they want the latest version containing all servers in the domain. Of course some knowledge on using Windows PowerShell are required to set this up, however, to use the generated config-file there aren`t the need for any PowerShell-knowledge.
I haven`t tested your product, though it seems nice based on the product overview on your website.
Pingback: Remote Desktop Connection Manager (RDCMan) + Powershell = Win | vNinja.net
How do you include the password? I tried:
$group.logonCredentials.Password = “mypasswordhere”
and also:
[string]$group.logonCredentials.Password = “mypasswordhere”
but get:
Cannot set “password” because only strings can be used as values to set XmlNode properties.
I haven`t tried it, you could have a look at a file where the password are set.
Has anyone managed to customize the script to create a group for each server OU. I’m using the Quest AD cmdlets.
I am going to attempt to do this … please let me know if any of you succeed before me
Has someone been able to modify this script to create group based on Ou where the servers is located ?
I’m very interested in.
thx
I am also interested in a version of the script that builds the server list based upon an OU or child domain. Anybody got this figured out?