Визуализация вывода Powershell с помощью сложных команд
Я пытаюсь выполнить файл 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. Хотелось бы перестать пинать себя на этом.:)
0 ответов
Я думаю, что это 32/64 битная вещь. Некоторые командлеты работают только в 64-битном режиме, включая Get-WebBinding
Командлет.
Попробуйте убедиться, что ваш pshost скомпилирован в 64 бит.