Извлечь вывод из окна Powershell в строку - PullRequest
0 голосов
/ 02 июня 2018

В моем приложении на C # мне нужно запустить несколько скриптов PowerShell.Я скопировал вставку из этого сайта кода о том, как запускать сценарии.

Мой вопрос: предположим, я хочу использовать код из ссылки, как я могу извлечь вывод PowerShell в какую-то строкуили в какой-нибудь .txt файл?

РЕДАКТИРОВАТЬ:

Если вы хотите проверить этот код для ответа на этот пост, вам необходимо:

  • добавить ссылку на System.Management.Automation dll
  • добавить requireAdministrator внутри app.manifest

1 Ответ

0 голосов
/ 02 июня 2018

На основе этой ссылки вы можете извлечь вывод с помощью Collection<PSObject> results = pipeline.Invoke();, здесь приведен пример кода, обратите внимание, что это извлечет вывод PowerShell в StringBuiler и скроет окно PowerShell:

 string RunScript(string pathToYourScript){
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();

            using (var runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))
            {
                runspace.Open();
                runspace.SessionStateProxy.SetVariable("prog", this);

                using (Pipeline pipeline = runspace.CreatePipeline())
                {
                    if (!string.IsNullOrEmpty(path))
                        pipeline.Commands.AddScript(string.Format("$env:path = \"{0};\" + $env:path", pathToYourScript));

                    pipeline.Commands.AddScript(path);
                    pipeline.Commands.Add("Out-String");

                    Collection<PSObject> results = pipeline.Invoke();
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (PSObject obj in results)
                    {
                        stringBuilder.AppendLine(obj.ToString());

                    }

                    var outDefault = new Command("out-default");
                    outDefault.MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
                    pipeline.Commands.Add(outDefault);

                    return stringBuilder;
                    }

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