【问题标题】:Logging Powershell Job Results记录 Powershell 作业结果
【发布时间】:2016-11-14 21:50:38
【问题描述】:

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

外部 PS 脚本:

此脚本有许多功能(使用许多 cmdlet),并将通过 Write-Verbose 将消息打印到日志中。问题是,有时在这些函数中我会打印消息和/或返回一个值。

众所周知,函数返回的任何内容都会放入标准输出中。因此,只要函数返回一个值,该值就会打印到输出富文本框控件中。我不想要那个。另外,如果我使用 VERBOSE,则消息不会在控件中打印(但是,它会打印到控制台)

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

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

替代方法

我有一个工作示例,让 Job 添加到日志本身,然后让 UI 运行 Get-Content -tail 1... 这将工作,除了我的一些消息将打印在多个线,它不会像预期的那样拉动一切。如果有人有办法让我随时在日志中获取任意 X 行新行,请告诉我。这可能比我目前的方法更容易。

【问题讨论】:

    标签: powershell user-interface logging live


    【解决方案1】:

    所以基本上你想向后使用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

    【讨论】:

    • Out-Null 或将函数结果分配给变量做我现在需要做的事情。谢谢。当我需要一个值在流中时,我试图适应一种情况,但我想我可以通过这种方式使用它。
    • 听起来不错,通常你希望你的函数非常原子,所以只返回你真正想要成为输出流一部分的值,在详细警告或错误中你想要的任何其他内容流。
    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 2012-08-18
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多