在powershell中使用带有Lync 2010 cmdlet的try / catch块

时间:2011-08-22 12:43:55

标签: powershell lync-2010

我已经编写了一个函数来使用try / catch块包装new-cssipdomain cmdlet,因为sip域已经存在。 代码是:

function LHP-AddSIPDomain
{
   param ( [string] $SIPDomain)
   try
   {
      New-cssipdomain -id $SIPDomain
   }
   catch
   {   
      Write-host "Lync specific exception occured adding SIP domain"
      Write-host "Exception String:"+$_.Exception.Message
      exit
   }
}
LHP-AddSIPDOmain -SipDomain "Test206.com"

域已存在时的输出是:

New-CsSipDomain : "SipDomain" with identity "Test206.com" already exists. To modify
the existing item, use the Set- cmdlet. To create a new item, use a different
identity. Parameter name: Identity
At S:\Scripts\LHP-AddSIPDomain.ps1:33 char:26
+           New-cssipdomain <<<<  -id $SIPDomain
+ CategoryInfo          : InvalidArgument: (Test206.com:String) [New-CsSipDomain],
ArgumentException
+ FullyQualifiedErrorId :
InvalidIdentity,Microsoft.Rtc.Management.Xds.NewOcsSipDomainCmdlet

这应该被try / catch块捕获。 我已经尝试将[system.exception]添加到catch语句中。我也试过设置$ erroraction =“Stop”。没有任何不同,try / catch语句似乎被忽略了。我已经使用这种类型的代码结构来捕获new-aduser cmdlet中的错误,这似乎工作正常。

我还考虑并首先尝试使用hte get-cssipdomin cmdlet来检查sip域是否已经存在,但是我遇到了类似的问题,如果你用不存在的域调用get-cscsipdomain它会抛出一个我似乎无法捕捉的错误。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:2)

TRY:

try
   {
      New-cssipdomain -id $SIPDomain -ERRORACTION SilentlyContinue
   }

也许这个命令自己得到了一个try / catch错误。

答案 1 :(得分:1)

您可以查看this answer。它解释了为什么try / catch有时不起作用。

你不能只写:

$Res = New-cssipdomain -id $SIPDomain -ERRORACTION SilentlyContinue

并测试$ Res的价值?

答案 2 :(得分:1)

我猜你得到的错误不是终止错误,这就是为什么你无法抓住它。尝试将ErrorAction值设置为'stop',这将使错误成为终止错误,并且您将能够在catch块中捕获它。