c# - 将输出和错误重定向到自定义 PSHostUserInterface
问题描述
我PSHostUserInterface
在运行 PowerShell 脚本时使用自定义来处理自定义输入和输出。默认情况下,它似乎Write-Error
不使用PSHostUserInterface.WriteErrorLine
,Write-Output
也不使用任何可用的功能。
常见的答案似乎是使用$host.ui.WriteErrorLine()
而不是Write-Error
,但我有大量现有脚本,并且不希望不必去编辑所有脚本。如果可能的话,我想重定向错误消息,以便消息从Write-Error "message"
传递为$host.ui.WriteErrorLine("message")
. 这可能吗?
除此之外,我还希望能够重定向Write-Output
到PSHostUserInterface.WriteLine
. 为了让事情更简单一点,所有的调用Write-Output
都是字符串,所以虽然 aPSObject
是在调用它时产生的,但它保证只是一个字符串。
我意识到这可能不是最佳实践,但所有有问题的脚本(其中有很多)都是内部脚本并使用基本Write-*
语法,因此保持脚本原样比更改所有脚本更可取.
解决方案
您可以覆盖 Write-Error 函数。您可以将新定义放在每个脚本的开头或将其保存为模块以在所有脚本中应用新定义
function write-error {param($errMsg)
$host.ui.WriteErrorLine($errMsg)
}
要调用原始的 Write-Error cmdlet,您可以使用
Microsoft.PowerShell.Utility\Write-Error
推荐阅读
- javascript - 类方法在直接创建对象时起作用,但在通过事件监听器创建时不起作用
- vue.js - 如何像 iOS 一样为 Nuxtjs(vuejs 框架)中的 2 条路由之间的过渡设置动画?
- powershell - 大数组中的快速线搜索 - powershell
- c# - 构建和运行 C# MonoGame 项目时不显示窗口
- r - 创建直线和曲线用户定义值
- php - How to Solve mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
- c++ - Why would concurrency using std::async be faster than using std::thread?
- java - ActionMode with same theme as Toolbar in Android
- docker - EC2 instance not accessible when container mapped to same port as host
- javascript - JavaScript 函数和嵌套数组问题