Как запросить пароль SecureString при нажатии кнопки, чтобы перейти к процессу Power Shell - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть приложение, которое запускает команду через 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).Я чувствую, что понимаю почти все, но мне не хватает чего-то очень важного.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Спасибо за все советы.

Мне удалось обойти все это, запустив Power Shell Script с Get-Credential, который запросит у пользователя пароль. Намного проще (и безопаснее).

0 голосов
/ 19 апреля 2019

Подпись метода вашего 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);
}

Я полагаю, вы захотите получить значения для path, username и password из текстового поля элементов пользовательского интерфейса в вашей форме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...