Lancez mstsc.exe avec nom d'utilisateur et mot de passe

je me rends compte que dans Windows 7, Il n'est pas possible de sauvegarder des identifiants différents pour le même hôte, mais j'ai besoin d'une solution de contournement.

puis-je fournir le nom d'utilisateur et le mot de passe manuellement dans le code? Les stocker dans un temp .le dossier du rdp?

27
demandé sur Brian Rasmussen 2012-07-02 19:36:34

6 réponses

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();

le code ci-dessus initie une connexion avec .217 et on ne me demande pas de fournir un mot de passe. Merci pour l'aide.

37
répondu Krzysiek 2012-07-02 19:41:14

si vous voulez utiliser powershell vous pouvez ajouter les informations d'identification en utilisant

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

puis appeler la connexion RDP en utilisant

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

si vous voulez supprimer les identifiants, Lancez

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

n'oubliez pas de retirer","

36
répondu Sam Stephenson 2016-07-27 19:24:40

C'est une version mise à jour de 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();
9
répondu Spencer 2017-01-19 18:44:48

Tout en essayant de comprendre comment permettre aux utilisateurs de notre réseau, sans leur donner les clés du château, j'ai activé le Bureau à Distance pour quelques membres de mon équipe. En y réfléchissant davantage, je me suis rapidement souvenu d'un projet il y a plusieurs années alors que je travaillais pour le Département de la Défense. Ce projet nous a amené à "verrouiller" l'accès au seul personnel nécessaire et de l'accès limité aux programmes sur les serveurs. Après avoir passé du temps sur la base de connaissances de Microsoft, nous avons réalisé que nous pourrions créer des "raccourcis" de bureau pour les employés qui ont fait la connexion RDP, les ont connectés et ont limité leur accès à une application spécifique sur ce serveur.

1
répondu test 2012-07-09 09:17:56
@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
1
répondu egl35720 2017-04-12 14:41:29

la réponse acceptée résout le problème, mais a pour effet secondaire de laisser les justificatifs d'identité dans le magasin de justificatifs d'identité des utilisateurs. J'ai fini par créer un IDisposable pour pouvoir utiliser les informations d'identification dans une déclaration d'utilisation.

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();
        }
    }
}
0
répondu Sidney 2017-08-18 20:17:22