我创建了一个powershell接口,它实质上收集信息,然后通过Start-Job将该信息发送到外部PS脚本。我有一个定时器,每秒触发一次接收作业,并用我创建的作业用STDOUT更新输出框。
外部PS脚本:
此脚本具有许多功能(使用许多cmdlet),并将通过Write-Verbose将消息打印到日志中。问题是,有时在这些函数中我打印消息和/或也返回一个值。
众所周知,函数返回的任何内容都放在标准输出中。因此,只要函数返回一个值,该值就会打印到Output Rich Textbox控件中。我不想要那个。此外,如果我使用VERBOSE,则控件中不会打印消息(但是,它正在打印到控制台)
我想要什么: 仅将消息打印到我的富文本框和我的日志文件,流中没有函数返回值(除非它们是消息本身的一部分)。
注意:我正在将这个应用程序从VB.NET应用程序重写到Powershell Studio应用程序......我之前注意到这是通过将STD输出流式传输到文本框中来完成的,使用类似的外部PowerShell脚本 - 除了脚本使用WRITE-HOST。这对我来说没有意义,因为写主机甚至不应该被放入流中。
替代方法:
我有一个工作的例子,让Job添加到日志本身,然后让UI运行Get-Content -tail 1 ......这样就可以了,除了我的一些消息将打印在多个上面线,它不会按预期拉出一切。如果有人有办法让我随时在日志中获得任意X行,请告诉我。这可能比我目前的方法更容易。
答案 0 :(得分:0)
所以基本上你想要向后使用powershell?函数应该只返回实际输出流中所需的值,任何不应该向流返回值的内容都应该在变量中捕获或发送到Out-Null
,如果要提供有关内容的信息命令就是这样write-verbose
。并且Write-Verbose按预期工作,就像write-host一样,它不会被放入流中。
要回答你的问题,你应该做的是重写你的函数,以便它们返回一个值(如果合适的话,根本没有值),对于无法重写的函数,你可以在脚本中抑制它们的输出将它们分配给变量(如果它们必须在以后使用)或简单地将它们传送到Out-Null
。当前在需要作为输出一部分的详细流中捕获的任何内容也应该移动到标准流并使用Write-Output
编写,如果您只需要该数据,可能会使用`If语句包围它们在某些运行中,如果您真的想要将详细流与标准流结合使用,可以在此处查看信息 - Redirect two or more Powershell streams other than output stream to the same file