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'“