14

寻找这个,但找不到解决方案。“额外”输出是指 Write-Output 在您的错误消息文本之后发出的额外文本。IE:

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 并只写消息部分时不要那么罗嗦?

4

2 回答 2

8

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

$Host.UI.WriteErrorLine("My custom error")
于 2012-07-12T19:57:08.187 回答
6

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

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

PS> $Error.Count
0

您应该使用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

有一个选项可以使用内置的 $ErrorView 变量输出不太详细的消息,它的默认值是 'Normal' (verbose)。您可以将其设置为“CategoryView”以获取简短消息。

PS> $ErrorView="CategoryView"
PS> Write-Error "My custom error"
NotSpecified: (:) [Write-Error], WriteErrorException
于 2012-07-13T08:55:22.413 回答