记录 Powershell 作业结果

Logging Powershell Job Results

我创建了一个 powershell 界面,它主要收集信息,然后通过 Start-Job 将该信息发送到外部 PS 脚本。我有一个每秒触发 recieve-job 的计时器,并使用我创建的作业的 STDOUT 更新输出框。

外部 PS 脚本:

此脚本有很多功能(利用许多 cmdlet),并且将通过 Write-Verbose 将消息打印到日志中。问题是,有时在这些函数中我打印消息 and/or 也 return 一个值。

众所周知,任何函数 returns 都被放入标准输出。因此,只要函数 return 是一个值,该值就会打印到 Output Rich Textbox 控件中。我不想要那个。另外,如果我使用 VERBOSE,消息不会打印在控件中(但是,它会打印到控制台)

我想要的: 仅将消息打印到我的富文本框和我的日志文件,流中没有函数 return 值(除非它们是消息本身的一部分)。

注意:我正在将此应用程序从 VB.NET 应用程序重写为 Powershell Studio 应用程序...我注意到之前这是由使用类似的外部 powershell 脚本将 STD 输出流式传输到文本框中——除了该脚本使用的是 WRITE-HOST。这对我来说没有意义,因为写主机甚至不应该放入流中。

替代方法

我有一个工作示例,让 Job 添加到日志本身,然后使用 UI 运行 Get-Content -tail 1... 这会工作,除了一些我的消息将打印在不止一行上,并且不会按预期提取所有内容。如果有人有办法让我随时在日志中获取任意数量的新行,请告诉我。这可能比我目前的方法更容易。

所以基本上你想反向使用 powershell?函数应该只 return 你在实际输出流中想要的值,任何不应该 return 流值的东西都应该在变量中捕获或发送到 Out-Null ,如果想提供有关命令正在执行的操作的信息,那就是 write-verbose 的用途。 Write-Verbose 正在按预期工作,就像 write-host 一样,它没有放入流中。

要回答你的问题,你应该做的是重写你的函数,以便它们 return 一个单一的值(或者如果合适的话根本没有任何值),对于无法重写的函数你可以抑制它们通过将它们分配给变量(如果以后必须使用它们)或简单地将它们传递给 Out-Null 来在脚本中输出。当前在详细流中捕获的任何需要成为输出一部分的内容也应移至标准流并使用 Write-Output 写入,如果您只需要该数据,则可能使用 `If 语句包裹它们在某些运行中,但是如果你真的想将详细流与标准流结合起来,你可以在此处查看信息 - Redirect two or more Powershell streams other than output stream to the same file