Zaakceptowanych odpowiedź rozwiązuje problem, ale ma efekt uboczny pozostawiając poświadczeń w poświadczeń użytkowników sklepu. Powstaje tworzenie IDisposable, więc mogę używać poświadczeń w instrukcji 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 = [email protected]"/list",
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false,
RedirectStandardOutput = true
}
};
cmdkey.Start();
cmdkey.WaitForExit();
if (!cmdkey.StandardOutput.ReadToEnd().Contains([email protected]"TERMSRV/{Host}"))
{
this.Host = Host;
cmdkey = new Process
{
StartInfo =
{
FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"),
Arguments = [email protected]"/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 = [email protected]"/delete:TERMSRV/{Host}",
WindowStyle = ProcessWindowStyle.Hidden
}
};
cmdkey.Start();
}
}
}
mogę używać PowerShell z C#? Przepraszam, jestem nowy. – Krzysiek
Zasadniczo chodzi o wykonanie polecenia CMDKEY.EXE w celu utworzenia tymczasowych poświadczeń w przechowywanym repozytorium poświadczeń, a następnie wykonanie MSTSC.EXE. MSTSC powinien znaleźć dane uwierzytelniające i je wykorzystać. Możesz uruchomić te programy z poziomu C# za pomocą 'Process.Start'; nie potrzebujesz Powershell. –
Pracował jak urok !!! Wielkie dzięki! – Krzysiek