将输出和错误重定向到自定义PSHostUserInterface

时间:2019-01-02 14:39:50

标签: c# powershell

运行PowerShell脚本时,我正在使用自定义PSHostUserInterface处理自定义输入和输出。默认情况下,似乎Write-Error不使用PSHostUserInterface.WriteErrorLine,并且Write-Output不使用任何可用功能。

常见的答案似乎是使用$host.ui.WriteErrorLine()而不是Write-Error,但是我拥有大量的现有脚本,并且不希望不必仔细研究所有脚本。我想尽可能重定向错误消息,以使来自Write-Error "message"的消息作为$host.ui.WriteErrorLine("message")传递。这可能吗?

除此之外,我还希望能够将Write-Output重定向到PSHostUserInterface.WriteLine。为了简化起见,对Write-Output的所有调用都是字符串,因此尽管PSObject会在调用时生成,但可以保证只能是字符串。

我意识到这可能不是最佳实践,但是所有有问题的脚本(其中有很多)都是内部使用的,并且使用基本的Write-*语法,因此请按原样保留脚本而不是全部更改都是首选。

1 个答案:

答案 0 :(得分:1)

您可以覆盖Write-Error函数。您可以在每个脚本的开头放置新定义,也可以将其保存为模块以在所有脚本中应用新定义

function write-error {param($errMsg)
$host.ui.WriteErrorLine($errMsg)
}

要调用原始的Write-Error cmdlet,可以使用

Microsoft.PowerShell.Utility\Write-Error