Powershell:如何阻止在脚本中显示错误?

例如,当我的PowerShell脚本尝试为不存在的服务器(在我的情况下为“bla”)创buildSQL Server对象时,PowerShell将以红色显示大量的PowerShell错误。

由于我的脚本检查$?的价值$? 经过这样的调用,并显示和logging错误,我宁愿不显示几行的PowerShell错误。

我怎样才能停用正在显示的脚本?

你有几个select。 最简单的方法是使用ErrorAction设置。

-Erroraction是所有cmdlet的通用参数。 如果有特殊的命令要忽略,可以使用-erroraction 'silentlycontinue' ,它将基本忽略由该命令生成的所有错误消息。 您也可以使用Ignore值(在PowerShell 3+中):

与SilentlyContinue不同,Ignore不会将错误消息添加到$ Error自动variables中。

如果您想忽略脚本中的所有错误,则可以使用系统variables$ErrorAction并执行相同的操作: $ErrorActionPreference= 'silentlycontinue'

请参阅about_CommonParameters以获取更多信息。

Windows PowerShell提供了两种报告错误的机制:一种终止错误的机制和另一种非终止错误的机制。

当错误发生时,内部CmdLets代码可以调用ThrowTerminatingError方法,该方法不会或不应该允许该cmdlet继续处理其input对象。 脚本编写者可以使用exception来捕获这些错误。

EX:

 try { Your database code } catch { Error reporting/logging } 

当cmdlet可以继续处理input对象时,内部CmdLets代码可以调用WriteError方法来报告非终止错误。 然后,脚本编写者可以使用-ErrorAction选项隐藏消息,或使用$ErrorActionPreference来设置整个脚本行为。

尝试使用[system.net.dns]parsing主机名时遇到了类似的问题。 如果IP没有parsing.Net抛出一个终止错误。 为了防止终止错误,仍然保留对输出的控制,我使用TRAP创build了一个函数。

例如

 Function Get-IP {PARAM ([string]$HostName="") PROCESS {TRAP {"" ;continue} [system.net.dns]::gethostaddresses($HostName) } } 

如果您希望某个cmdlet的powershell errormessage被抑制,但仍想捕获该错误,请使用“-erroraction”silentlyStop'“