【发布时间】:2017-05-03 09:34:14
【问题描述】:
我正在使用 System Center Orchestrator 运行执行某些操作的 PowerShell 脚本。执行脚本的组件能够获取Write-Output 和Write-Host 的结果,但其他流会丢失。但我真的希望其他流可用,尤其是标准错误流。
有什么方法可以将stderr 重定向到stdout?
我知道您可以对执行 2>&1 的单个命令执行此操作,但由于脚本有很多行,因此将其附加到脚本中的每一行会有点乏味。我可以在脚本中执行一个脚本,但这会导致一些其他问题。我的猜测是应该可以使用 C# 进行设置,但我不确定在这种情况下要寻找什么。
【问题讨论】:
-
如果您通过
start-processcmdlet 使用提供的-redirectstandarderror参数将脚本包装到另一个powershell.exe调用中,则可以获得这些流。然后你的包装脚本应该解析所有的流。不过我想知道,如果您在 powershell 中运行 powershell 并等待它完成会出现什么问题? -
Orchestrator 中的 PowerShell 在没有嵌套的情况下已经够让人头疼了(因为一旦原生活动只运行 32 位)。如果您启动嵌套的 PowerShell,执行脚本的活动不会失败。由于默认情况下您没有得到任何控制台输出,您会想知道您的脚本出了什么问题。另一方面,您有集成包,它们确实可以为您提供输出,但缺乏将变量直接映射到您想要放在数据总线上的项目的能力。这不是 PowerShell 的问题,而是 PowerShell 与执行执行的组件之间的交互。
-
尝试开始-成绩单/停止-成绩单。已经在redirect PowerShell回复了
-
@un-CharlieH 这很复杂。谢谢你提出来。已经有一段时间了,据我所知,它不起作用,因为 Orchestrator ......在幕后做了一些有趣的事情,或者更确切地说,它只是非交互式的。见Start-transcript in a background process。我已经接受了提供的答案,尽管它不是一个完美的选择。
标签: powershell