我想我的问题有点类似于此: 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 + $_}
但似乎是挂起而不是流。
答案 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()
}