Перенаправить write-host в текстовое поле в форме? - PullRequest
0 голосов
/ 24 августа 2010

Полагаю, мой вопрос чем-то похож на этот: Перенаправление стандартного вывода / ввода / ошибки в / из текстового поля , но оно ориентировано на PowerShell.

Я работаю надGUI, созданный с использованием PrimalForms, который будет служить интерфейсом для сценариев развертывания моего сайта.До сих пор я использовал start-transcript и stop-transcript для обновления моего текстового поля в графическом интерфейсе, который выступает в качестве консоли для просмотра событий процесса сценария.

Однако я сейчас собираюсьпри использовании сценария для нашего балансировщика нагрузки, который более чувствителен ко времени.Мне нужно, чтобы текстовое поле было в состоянии показать вывод (который направлен на запись-хост указанным сценарием) в режиме реального времени или близко к нему.Захват файла журнала / расшифровки после того, как факт просто не сработает.

Я читал «Понимание вывода» и все статьи, которые я могу найти, но я не вижу метода, который действительноработать для моих нужд.Я надеялся, что есть просто командлет 'set-host', который я мог бы использовать и направить на него все свои записи write-host.

Любые идеи?

Редактировать: я подумал о том, чтобы передатьтекстовый файл со строкой и периодически обновляемый, но он выглядит как настоящий кладж.

Edit2: хмм, может быть, Tee-объект ... Powershell: как перехватить вывод с хоста

Edit3: Хорошо, я почти там с:

ping -n 10 127.0.0.1 | out-string -Stream | foreach-object {$richTextBox1.lines = $richTextBox1.lines + $_}

, но кажется, что он зависает, а не поток.

1 Ответ

3 голосов
/ 24 августа 2010

Хорошо, я считаю, что нашел работоспособное решение. Проблема с моим последним редактированием выше заключалась не в том, что out-string не была потоковой, а в том, что я не обновлял форму в каждой дополнительной строке.

Вот пример идеи для тех, кто заинтересован (я также включил пару строк для автоматической прокрутки текстового поля):

ping -n 10 127.0.0.1 | out-string -Stream | foreach-object {
    $richTextBox1.lines = $richTextBox1.lines + $_
    $richTextBox1.Select($richTextBox1.Text.Length, 0)
    $richTextBox1.ScrollToCaret()
    $form1.Update()}

Решение для перехвата Write-Host немного отличается; по сути, ведение журнала из другого экземпляра powershell:

Powershell.exe -noprofile -file .\psbackup.ps1 $txtbox_codePath.text $comboBox_environment.selecteditem | Out-String -Stream | ForEach-Object {
    $txtBox_console.Lines = $txtBox_console.Lines + $_
    $txtBox_console.Select($txtBox_console.Text.Length, 0)
    $txtBox_console.ScrollToCaret()
    $form1.Update()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...