首页 > 解决方案 > 将输出和错误重定向到自定义 PSHostUserInterface

问题描述

PSHostUserInterface在运行 PowerShell 脚本时使用自定义来处理自定义输入和输出。默认情况下,它似乎Write-Error不使用PSHostUserInterface.WriteErrorLineWrite-Output也不使用任何可用的功能。

常见的答案似乎是使用$host.ui.WriteErrorLine()而不是Write-Error,但我有大量现有脚本,并且不希望不必去编辑所有脚本。如果可能的话,我想重定向错误消息,以便消息从Write-Error "message"传递为$host.ui.WriteErrorLine("message"). 这可能吗?

除此之外,我还希望能够重定向Write-OutputPSHostUserInterface.WriteLine. 为了让事情更简单一点,所有的调用Write-Output都是字符串,所以虽然 aPSObject是在调用它时产生的,但它保证只是一个字符串。

我意识到这可能不是最佳实践,但所有有问题的脚本(其中有很多)都是内部脚本并使用基本Write-*语法,因此保持脚本原样比更改所有脚本更可取.

标签: c#powershell

解决方案


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

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

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

Microsoft.PowerShell.Utility\Write-Error

推荐阅读