Визуализация вывода Powershell с помощью сложных команд - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь выполнить файл PS1 через приложение C # и перехватить / сегментировать вывод в зависимости от серьезности.Ошибка, отладка, информация и т. Д. Это приложение Windows Form.Вот метод Run, который я вызываю по нажатию кнопки:

PowerShell m_PSInst = PowerShell.Create();

//Add the script to execute
m_PSInst.AddScript(fileName);

//Attach to the Info Stream
m_PSInst.Streams.Information.DataAdded += (sender, args) =>
{
      var psData = (PSDataCollection<InformationRecord>)sender;

      var results = psData.ReadAll();

      foreach (var result in results)
      {
          AddInfo(result.ToString());
      }
};

//Run Async
Task.Factory.FromAsync(m_PSInst.BeginInvoke(), pResult => m_PSInst.EndInvoke(pResult));

Внутри моего метода AddInfo я проверяю доступ Threading к слою пользовательского интерфейса

public void AddInfo(string value)
{
    if (InvokeRequired)
    {
        Invoke(new Action<string>(AddInfo), value);
        return;
    }

    infoTextbox.AppendText(value, Color.White);
    allOutputTextbox.AppendText(value, Color.White);

    Application.DoEvents();
}

СодержимоеМой файл PS1 выглядит следующим образом:

Write-Information "Test-Before"
Get-WebBinding
Write-Information "Test-After"

То, что я вижу, это «Test-Before» и все.Кажется, что все выходные потоки ничего не получают после команды Get-WebBinding.Я попытался добавить Out-Default, Out-String и даже перенаправить в Out-File.Кажется, ничего не работает.

Здесь не изображены другие методы DataAdded для других потоков, включая Error, Debug, Verbose, Progress и Warning.Хотелось бы перестать пинать себя на этом:)

1 Ответ

0 голосов
/ 04 марта 2019

Я думаю, что это 32/64 битная вещь.Некоторые командлеты работают только в 64-битном режиме, включая командлет Get-WebBinding.

Попробуйте убедиться, что ваш pshost скомпилирован в 64 бит.

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