为什么Write-Error显示上面的所有代码?

时间:2014-07-29 18:16:18

标签: powershell error-handling write-error

我最近在阅读有关不在PowerShell中使用Write-Host的原因,所以我开始使用Write-Verbose,Write-Warning和Write-Output ......但是我的输出有些问题我来自写错误。

这是一个在脚本中使用的简单示例。

1..5 | foreach{
    if ($_ -eq 5){
        Write-Error "Invalid result"
    }
}

当出现错误时,我得到以下内容。

1..5 | foreach{
    if ($_ -eq 5){
        Write-Error "Invalid result"
    }
} : Invalid result
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

我不明白为什么它显示错误上方的所有代码。它只是让屏幕上的输出看起来非常混乱,特别是在长脚本中。例如,我正在开发一个脚本来自动化我们的用户创建,修改,禁用和删除过程,它是几百行,所以如果我想写一个非终止错误,我不希望看到它上面的整个代码......那太傻了。

任何建议。我想过使用写警告,但是它确实是一个非终止错误,我想显示...所以我试图使用最佳实践。

谢谢,

1 个答案:

答案 0 :(得分:1)

您需要使用Write-Error输出非终止错误。但是,如果您希望错误输出更简洁,可以将$ErrorView变量设置为CategoryView,例如:

64> $ErrorView = 'CategoryView'
65> 1..5 | foreach{
>>>     if ($_ -eq 5){
>>>         Write-Error "Invalid result"
>>>     }
>>> }
>>>
NotSpecified: (:) [Write-Error], WriteErrorException