启动runas作为subprocess,并写入密码到标准input?

我想写一个C#程序,应该从Windows调用runas工具,并自动input密码。

我试过的:

Process runas = new Process(); runas.StartInfo.FileName = "runas"; runas.StartInfo.UseShellExecute = false; runas.StartInfo.RedirectStandardInput = true; runas.StartInfo.Arguments = "\"/user:domain\\username\" \"cmd.exe\""; runas.Start(); StreamWriter stream = runas.StandardInput; stream.WriteLine("our super secret password"); stream.Flush(); stream.Close(); runas.WaitForExit(); runas.Close(); 

什么事情发生:
我得到以下输出。

 Please enter the password for "...": Trying to execute cmd.exe as user "kfz\dummy"... RUNAS-ERROR: cmd.exe could not be executed 1326: Authentication failed: unknown username or password. 

(由我从我的德语窗口翻译)

是的,我quadrupel检查密码和用户名。 在命令行中手动input所有内容都可以正常工作。

我试验过的东西:
我尝试redirect输出,并从中读取,但没有成功。
我尝试了写入stream的不同变体:

 stream.Write("our super secret password"); stream.Write("our super secret password\n"); stream.Write("our super secret password\r\n"); 

所有的结果都是相同的行为。

我注意到:
runas进程似乎不等待我写入stream。
我在写作之前添加了一个睡眠,我立即得到了上面的输出。

我恐怕runas使用一些nonstdinput…..

研究成果:
在试图找出什么样的inputrunas使用我没有成功。
我在这里find了一个替代windows内置runas的方法,但是我不想使用它,但是如果不可能的话,我可能会回退它。
编辑:
好的,我发现微软故意阻止人们这样做的消息来源…..
当有人这样做,我讨厌它! 如果我想使用一些不安全的东西,那么谁是微软来阻止我呢!
对不起,我下了话题。

还有一个问题,我们还能绕过吗? 我们可以攻击马亚斯吗? ;)

你不应该这样做的全部原因是因为有一个API

不需要使用runas

ProcessStartInfo可让您直接指定UserNamePassword

例如:

 var psi = new ProcessStartInfo(); psi.Domain = "YourDomain"; psi.UserName = "YourUserName"; psi.Password = securePassword; psi.FileName = "cmd.exe"; Process.Start(psi);