Automatic Remote Desktop Connection
Note: This tip requires PowerShell 2.0 or above.
As a PowerShell user, you probably have a PowerShell console or the ISE editor on standby. Wouldn’t it be nice to be able to just hack in a “Connect-RDP” and immediately be connected to a remote desktop when you need it? And let PowerShell deal with login credentials? Here’s how.
Securely Caching Credentials
To securely cache login credentials, you can use the command line utility cmdkey.exe. With this utility, you can save a username and a password for a given remote connection. Windows will then securely cache the information and automatically use it when needed.
Connect-RDP – Auto-Login for RDP Sessions
Here is a function called Connect-RDP that automates the RDP connection:
function Connect-RDP {
param (
[Parameter(Mandatory=$true)]
$ComputerName,
[System.Management.Automation.Credential()]
$Credential
)
# take each computername and process it individually
$ComputerName | ForEach-Object {
# if the user has submitted a credential, store it
# safely using cmdkey.exe for the given connection
if ($PSBoundParameters.ContainsKey('Credential'))
{
# extract username and password from credential
$User = $Credential.UserName
$Password = $Credential.GetNetworkCredential().Password
# save information using cmdkey.exe
cmdkey.exe /generic:$_ /user:$User /pass:$Password
}
# initiate the RDP connection
# connection will automatically use cached credentials
# if there are no cached credentials, you will have to log on
# manually, so on first use, make sure you use -Credential to submit
# logon credential
mstsc.exe /v $_ /f
}
}
Set or Update Cached Credentials
To cache credentials for a new remote desktop connection, this is how you’d call the function:
PS> Connect-RDP 10.20.30.40 -Credential testdomain\Administrator
You would then be prompted for the connection password, and the RDP connection gets initiated. Internally, Connect-RDP stores the logon information in your credential cache. So from now on, to connect to the server via RDP, you no longer need the credentials. Next time, this is all you need:
Connect-RDP 10.20.30.40
Using Multiple Connections
The function also supports multiple connections. If all of the connections require the same logon information, you can set it in one step:
PS> Connect-RDP 10.20.30.40, 10.20.30.41, 10.20.30.42 -Credential testdomain\Administrator
If the connections require different logon credentials, then set the credentials individually:
PS> Connect-RDP 10.20.30.40 -Credential testdomain\Administrator
PS> Connect-RDP 10.20.30.41 -Credential testdomain\Testaccount12
PS> Connect-RDP 10.20.30.42 -Credential testdomain\Tobias
Once you have set cached credentials for all your RDP servers, you can connect to one or many with just one call:
PS> Connect-RDP 10.20.30.40, 10.20.30.41, 10.20.30.42
PowerShell will use the appropriate cached credentials for each of these connections, and opens an RDP session for each server.
Manage Cached Credentials
To manage your cached credentials, use cmdkey.exe:
PS> cmdkey
Creates, displays, and deletes stored user names and passwords. The syntax of this command is:
CMDKEY [{/add | /generic}:targetname {/smartcard | /user:username {/pass{:password}}} | /delete{:targetname | /ras} | /list{:targetname}]
Examples:
To list available credentials:
cmdkey /list
cmdkey /list:targetname
To create domain credentials:
cmdkey /add:targetname /user:username /pass:password
cmdkey /add:targetname /user:username /pass
cmdkey /add:targetname /user:username
cmdkey /add:targetname /smartcard
To create generic credentials:
The /add switch may be replaced by /generic to create generic credentials
To delete existing credentials:
cmdkey /delete:targetname
To delete RAS credentials:
cmdkey /delete /ras
PS> cmdkey /list:10.16.114.11
Currently stored credentials for 10.16.114.11:
Target: 10.16.114.11
Type: Generic
User: citrixdev\Administrator
Share on: