有没有办法抑制Write-Error cmdlet的"额外"输出?

joe*_*alt 12 powershell

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

write-error -Message "test"
Run Code Online (Sandbox Code Playgroud)

生产:

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

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

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

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

CB.*_*CB. 7

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

$Host.UI.WriteErrorLine("My custom error")
Run Code Online (Sandbox Code Playgroud)

  • 好主意,但不幸的是,然后将错误输出重定向到标准输出`2>&1` 不再起作用。 (2认同)

Sha*_*evy 6

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

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

PS> $Error.Count
0
Run Code Online (Sandbox Code Playgroud)

您应该使用Write-Errorcmdlet,但输出仍然很详细:

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

有一个选项可以使用内置的 $ErrorView 变量输出更详细的消息,其默认值为“Normal”(详细)。对于简短的消息,您可以将其设置为“CategoryView”。

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