将写主机重定向到表单中的文本框?

时间:2010-08-24 00:35:11

标签: powershell powershell-v2.0

我想我的问题有点类似于此: Redirecting the Standard Output/Input/Error into/from a textbox 但它以PowerShell为中心。

我正在使用PrimalForms创建的GUI,它将充当我的网站部署脚本的前端。到目前为止,我一直在使用start-transcript和stop-transcript来更新gui中的文本框,gui充当控制台以查看脚本过程的事件。

但是,我现在打算为我们的负载均衡器使用一个更加时间敏感的脚本。我需要文本框能够实时显示输出(由所述脚本指向写主机)或接近它。在事实之后捕获日志文件/成绩单根本就不行。

我一直在阅读'理解输出'以及我能找到的所有文章,但我没有看到一种能真正满足我需求的方法。我希望我只能使用一个'set-host'命令行开关,并将所有写入主机条目指向它。

有什么想法吗?

编辑:我已经考虑过使用out-string管道到文本文件并定期更新,但它似乎是一个真正的kludge。

Edit2:嗯,也许是Tee-object ...... Powershell: How to capture output from the host

Edit3:好的,我差不多了:

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

但似乎是挂起而不是流。

1 个答案:

答案 0 :(得分:3)

好的,我相信我找到了一个可行的解决方案。我上面的最后一次编辑的问题不在于字符串不是流式传输,而是我没有在每个额外的行上刷新表单。

以下是感兴趣的人的想法示例(我已经包含了几行来自动滚动文本框):

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()
}