【问题标题】:Setup output redirection for a whole script within the script in PowerShell?在PowerShell的脚本中为整个脚本设置输出重定向?
【发布时间】:2017-05-03 09:34:14
【问题描述】:

我正在使用 System Center Orchestrator 运行执行某些操作的 PowerShell 脚本。执行脚本的组件能够获取Write-OutputWrite-Host 的结果,但其他流会丢失。但我真的希望其他流可用,尤其是标准错误流。

有什么方法可以将stderr 重定向到stdout

我知道您可以对执行 2>&1 的单个命令执行此操作,但由于脚本有很多行,因此将其附加到脚本中的每一行会有点乏味。我可以在脚本中执行一个脚本,但这会导致一些其他问题。我的猜测是应该可以使用 C# 进行设置,但我不确定在这种情况下要寻找什么。

【问题讨论】:

  • 如果您通过start-process cmdlet 使用提供的-redirectstandarderror 参数将脚本包装到另一个powershell.exe 调用中,则可以获得这些流。然后你的包装脚本应该解析所有的流。不过我想知道,如果您在 powershell 中运行 powershell 并等待它完成会出现什么问题?
  • Orchestrator 中的 PowerShell 在没有嵌套的情况下已经够让人头疼了(因为一旦原生活动只运行 32 位)。如果您启动嵌套的 PowerShell,执行脚本的活动不会失败。由于默认情况下您没有得到任何控制台输出,您会想知道您的脚本出了什么问题。另一方面,您有集成包,它们确实可以为您提供输出,但缺乏将变量直接映射到您想要放在数据总线上的项目的能力。这不是 PowerShell 的问题,而是 PowerShell 与执行执行的组件之间的交互。
  • 尝试开始-成绩单/停止-成绩单。已经在redirect PowerShell回复了
  • @un-CharlieH 这很复杂。谢谢你提出来。已经有一段时间了,据我所知,它不起作用,因为 Orchestrator ......在幕后做了一些有趣的事情,或者更确切地说,它只是非交互式的。见Start-transcript in a background process。我已经接受了提供的答案,尽管它不是一个完美的选择。

标签: powershell


【解决方案1】:

如果您通过start-process cmdlet 使用提供的-redirectstandarderror 参数将脚本包装到另一个powershell.exe 调用中,则可以获取这些流。然后你的包装脚本应该解析所有的流。

如果您因为编排器设置的一些局部变量而无法调用嵌套的 Powershell 进程,您可以使用Write-Output $error 作为将所有(最多$MaximumErrorCount)错误记录到标准输出中的一种方式.不完全是错误流,而是一个开始。此外,如果您的 $ErrorActionPreference 设置为“SilentlyContinue”,它仍然会被填充。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2010-09-23
    • 1970-01-01
    • 2014-11-17
    • 2015-09-26
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多