使用指定的用户名和密码运行mstsc.exe

我意识到在Windows 7中,无法为同一主机保存不同的凭据,但我需要一些解决方法。

我可以在代码中手动提供用户名和密码吗? 将它们存储在临时.rdp文件中?

 Process rdcProcess = new Process(); rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"); rdcProcess.StartInfo.Arguments = "/generic:TERMSRV/192.168.0.217 /user:" + "username" + " /pass:" + "password"; rdcProcess.Start(); rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\mstsc.exe"); rdcProcess.StartInfo.Arguments = "/v " + "192.168.0.217"; // ip or name of computer to connect rdcProcess.Start(); 

上面的代码启动与.217的连接,我没有被提示提供密码。 感谢帮助。

如果要使用powershell,可以使用添加凭据

 cmdkey /generic:DOMAIN/"computername or IP" /user:"username" /pass:"password" 

然后使用调用RDP连接

 Start-Process -FilePath "$env:windir\system32\mstsc.exe" -ArgumentList "/v:computer name/IP" -Wait 

如果要删除凭据运行

 cmdkey /delete:DOMAIN/"Computer name or IP" 

记得删除“”

这是Krzysiek的post的更新版本。

 var rdcProcess = new Process { StartInfo = { FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"), Arguments = String.Format(@"/generic:TERMSRV/{0} /user:{1} /pass:{2}", fp.ipAddress, (String.IsNullOrEmpty(fp.accountDomain)) ? fp.accountUserName : fp.accountDomain + "\\" + fp.accountUserName, fp.accountPassword), WindowStyle = ProcessWindowStyle.Hidden } }; rdcProcess.Start(); rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\mstsc.exe"); rdcProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; rdcProcess.StartInfo.Arguments = String.Format("/f /v {0}", fp.ipAddress); // ip or name of computer to connect rdcProcess.Start(); 

在试图弄清楚如何允许用户进入我们的网络而不给他们城堡的钥匙时,我为我的团队的一些成员启用了远程桌面访问。 考虑到这一点,我几年前在为国防部工作时很快就想起了一个项目。 该项目要求我们“锁定”仅访问必要人员和限制访问服务器上的程序。 在微软的知识库上花了一些时间之后,我们意识到我们可以为那些建立RDP连接,登录并限制他们访问该服务器上某个特定应用程序的员工创建桌面“快捷方式”。

 @echo off cmdkey /generic:TERMSRV/"*IP or Server Name*" /user:%username% start mstsc /v:*IP or Server Name* cmdkey /delete:TERMSRV/"*IP or Server Name*" quit 

已接受的答案解决了该问题,但具有将凭据留在用户凭证存储中的副作用。 我最终创建了一个IDisposable,因此我可以在using语句中使用凭据。

 using (new RDPCredentials(Host, UserPrincipalName, Password)) { /*Do the RDP work here*/ } 

 internal class RDPCredentials : IDisposable { private string Host { get; } public RDPCredentials(string Host, string UserName, string Password) { var cmdkey = new Process { StartInfo = { FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"), Arguments = $@"/list", WindowStyle = ProcessWindowStyle.Hidden, UseShellExecute = false, RedirectStandardOutput = true } }; cmdkey.Start(); cmdkey.WaitForExit(); if (!cmdkey.StandardOutput.ReadToEnd().Contains($@"TERMSRV/{Host}")) { this.Host = Host; cmdkey = new Process { StartInfo = { FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"), Arguments = $@"/generic:TERMSRV/{Host} /user:{UserName} /pass:{Password}", WindowStyle = ProcessWindowStyle.Hidden } }; cmdkey.Start(); } } public void Dispose() { if (Host != null) { var cmdkey = new Process { StartInfo = { FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"), Arguments = $@"/delete:TERMSRV/{Host}", WindowStyle = ProcessWindowStyle.Hidden } }; cmdkey.Start(); } } }