运行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-*
语法,因此请按原样保留脚本而不是全部更改都是首选。
答案 0 :(得分:1)
您可以覆盖Write-Error函数。您可以在每个脚本的开头放置新定义,也可以将其保存为模块以在所有脚本中应用新定义
function write-error {param($errMsg)
$host.ui.WriteErrorLine($errMsg)
}
要调用原始的Write-Error cmdlet,可以使用
Microsoft.PowerShell.Utility\Write-Error