2011-12-05 121 views
51

例如,当我的PowerShell脚本尝试为不存在的服务器(在我的情况下为“bla”)创建SQL Server对象时,PowerShell会以红色显示很多PowerShell错误。Powershell:如何阻止在脚本中显示错误?

由于我的脚本在调用后检查$?的值,并显示并记录错误,所以我宁愿不显示几行PowerShell错误。

如何取消激活为脚本显示的内容?

回答

79

您有几个选项。最简单的方法是使用ErrorAction设置。

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

不像SilentlyContinue,因此忽略不添加错误信息到$ Error自动变量。

如果你想忽略在脚本中的所有错误,您可以使用系统变量$ErrorAction和做同样的事情:$ErrorActionPreference= 'silentlycontinue'

更多信息,请参见about_CommonParameters

+7

设置系统变量的伎俩。 –

12

的Windows PowerShell提供报告错误两种机制:一个机制终止错误和其他机制非终止错误

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

EX:

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

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

6

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

E.G.

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

如果你想为抑制cmdlet的PowerShell的errormessage的,但还是要抓住错误,请使用“-ErrorAction‘silentlyStop’”

+0

没有这样的行动。尽管有停止操作。 –