Открытие Windows Powershell через c#

#c# #windows #powershell

#c# #Windows #powershell

Вопрос:

Я пытаюсь открыть Powershell с помощью кода на C #, и в конечном итоге цель состоит в том, чтобы также писать командные строки через c # (без использования скрипта powershell).

Я провел некоторые исследования и получил этот фрагмент кода, но по какой-то причине он просто не открывает Powershell. Что мне нужно изменить в коде для открытия Powershell?

 //Opening Powershell
private void Execute()
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = @"C:WindowsSystem32WindowsPowerShellv1.0powershell.exe",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
};
Process pro = Process.Start(startInfo);
pro.WaitForExit();
Thread.Sleep(3000);
pro.Close();
}
  

Комментарии:

1. Есть по крайней мере две опечатки, на которые жаловался бы компилятор. Можете ли вы опубликовать свой реальный код и объяснить, что означает «не открывается»? Вы получаете ошибки?

2. @nvoigt извините за опечатки — я их исправил. Я не получаю никаких ошибок. Я пытаюсь открыть консоль powershell.

3. Что вы ожидаете , что произойдет? Можете ли вы описать это простым английским языком?

4. Вам нужно опубликовать то, что вы ожидаете здесь. Например, ваше утверждение «откройте консоль powershell» может означать, что вы хотите, чтобы появилось окно. Однако, вы сказали «CreateNoWindow = true», вы пытаетесь перенаправить весь вывод. Итак, для меня это похоже на конфликт. Таким образом, вы должны точно описать, что вы ожидаете здесь произойти.

5. Я думаю, что он хочет открыть консоль powershell. Удалите это CreateNoWindow = true,

Ответ №1:

Я поиграл с этим. Возможно, есть какие-то другие способы сделать это, но этот тоже работает. Поскольку вы хотите некоторую начальную настройку, я думаю, вам нужно использовать переменные среды, и если вы это сделаете, вам также нужно добавить

 startInfo.UseShellExecute = false;
  

итак, одним из рабочих примеров может быть

     static void Main(string[] args)
    {
        OpenPowerShell(@"C:WindowsSystem32WindowsPowerShellv1.0powershell.exe");
    }

    static void OpenPowerShell(string path)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo(path);
        startInfo.UseShellExecute = false;
        startInfo.EnvironmentVariables.Add("RedirectStandardOutput", "true");
        startInfo.EnvironmentVariables.Add("RedirectStandardError", "true");
        startInfo.EnvironmentVariables.Add("UseShellExecute", "false");
        startInfo.EnvironmentVariables.Add("CreateNoWindow", "true");
        Process.Start(startInfo);
    }
  

Или, если вы согласны с другим окном, просто:

     static void Main(string[] args)
    {
        OpenPowerShell(@"C:WindowsSystem32WindowsPowerShellv1.0powershell.exe");
    }

    static void OpenPowerShell(string path)
    {
        Process.Start(path);
    }
  

Комментарии:

1. Ваш первый пример по какой-то причине не сработал, консоль powershell не открылась. Однако второй пример сработал. Но только запуск powershell не позволит мне писать в нем команды через c #, верно? Потому что я никогда не устанавливал RedirectStandardOutput true?

2. @as19aux Честно говоря, я не часто играл с этим. Меня просто заинтересовал этот вопрос, поэтому я попробовал это сам. Насколько я понимаю, либо вы можете открыть новое окно powershell, просто запустив Process.start(path) , либо вы можете передать переменные и использовать командную строку в качестве оболочки powershell во время ее выполнения. Не уверен, что это полностью правильно.