我有一个通过Power Shell运行命令的应用程序。我知道如何以其他用户身份运行它,但是我完全不知道如何获取密码。我想每次都提示用户输入密码(我希望该应用程序最多只能使用一次),因此不需要存储它。我了解我需要将密码创建为安全字符串。除此之外,我希望它在单击按钮时运行,但是我不知道如何调用它。这是我到目前为止的内容:
class Credentials
{
private static SecureString MakeSecureString(string text)
{
SecureString secure = new SecureString();
foreach (char c in text)
{
secure.AppendChar(c);
}
return secure;
}
public static void RunAs(string path, string username, string password)
{
try
{
Process process = new Process();
process.StartInfo.FileName = "powershell.exe";
process.StartInfo.UserName = "adminaccount@account.com";
process.StartInfo.Password = MakeSecureString(password);
process.StartInfo.CreateNoWindow = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.Start();
process.StandardInput.WriteLine(" Some Power Shell Script");
process.StandardInput.Flush();
process.StandardInput.Close();
process.WaitForExit();
Console.WriteLine(process.StandardOutput.ReadToEnd());
Console.WriteLine(process.StandardError.ReadToEnd());
Console.Read();
}
catch (Win32Exception w32E)
{
// The process didn't start.
Console.WriteLine(w32E);
}
}
}
// Later invoked in this button click handler
private void Button_Click(object sender, EventArgs e)
{
Credentials.SecureString();
Credentials.RunAs();
}
单击按钮(Button_Clicked)时如何运行此程序。我觉得我几乎了解所有事情,但是我错过了一些非常重要的事情。
答案 0 :(得分:0)
您的RunAs()
方法的方法签名带有3个参数,但是在Button_Clicked
处理程序中,您没有向其传递任何参数-修正此问题:
private void Button_Click(object sender, EventArgs e)
{
string path = @"C:\path\to\file";
string username = "User1";
string password = "Sup3r5eCr37p@s$w0rd";
Credentials.RunAs(path, username, password);
}
我想您想从表单中UI元素的文本字段中获取path
,username
和password
的值
答案 1 :(得分:0)
感谢所有建议。
我可以通过使用“ Get-Credential”启动Power Shell脚本来绕过所有这些操作,这将提示用户输入密码。更容易(更安全)。