问题 有没有办法抑制Write-Error cmdlet的“额外”输出?


寻找这个,但找不到解决方案。通过“额外”输出,我的意思是写入输出在您的错误消息文本后发出的额外文本。即:

write-error -Message "test"

生产:

write-error -Message "test" : test
+ CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

我想只看到文本“test”,并通过运行PS脚本的Process对象从stderr中检索它。

我知道可以开发一个复杂的正则表达式(以捕获可能出现在类别中的所有潜在字符等),但我想避免这种情况。不要忘记,由于控制台,Write-Error还会在每个第80个字符位置注入换行符,因此也必须考虑因素。

有没有办法告诉Powershell(2.0)在写入stderr并且只写消息部分时不那么罗嗦?


1877
2017-07-12 19:35


起源



答案:


我认为不可能限制错误的输出,但你可以像这样解决:

$Host.UI.WriteErrorLine("My custom error")

7
2017-07-12 19:57



非常感谢!这样就可以了! - joebalt
好主意,但遗憾的是然后将错误输出重定向到标准输出 2>&1 不再起作用了。 - Mehrdad Mirreza


答案:


我认为不可能限制错误的输出,但你可以像这样解决:

$Host.UI.WriteErrorLine("My custom error")

7
2017-07-12 19:57



非常感谢!这样就可以了! - joebalt
好主意,但遗憾的是然后将错误输出重定向到标准输出 2>&1 不再起作用了。 - Mehrdad Mirreza


$ Host.UI.WriteErrorLine不更新$ error变量:

PS> $error.Clear()
PS> $Host.UI.WriteErrorLine("My custom error")
My custom error

PS> $Error.Count
0

你应该使用 Write-Error cmdlet但输出仍然是详细的:

PS> Write-Error "My custom error"
Write-Error "My custom error" : My custom error
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

可以选择使用内置的$ ErrorView变量输出较少的详细消息,其默认值为“Normal”(详细)。您可以将其设置为“CategoryView”以获取简短消息。

PS> $ErrorView="CategoryView"
PS> Write-Error "My custom error"
NotSpecified: (:) [Write-Error], WriteErrorException

4
2017-07-13 08:55



另一种解决方法 $error 是使用$ error.add(“我的自定义错误”)`。自定义错误的最佳方法是创建一个编写自定义错误消息的函数,如果需要,将其添加到$ error。 - CB.
用于修改 $? 函数中的自动变量可以添加一个`Write-Error“我的自定义错误”-ErrorAction silentntlycontinue。 - CB.