2

我编写了一个函数来用 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 它会抛出一个错误,我好像抓不到。

任何建议将不胜感激。

4

3 回答 3

2

尝试:

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

也许它自己的命令会尝试/捕获错误。

于 2011-08-22T12:59:22.287 回答
1

我猜你得到的错误不是终止错误,这就是你无法捕捉到它的原因。尝试将 ErrorAction 值设置为“停止”,这将使错误成为终止错误,您将能够在 catch 块中捕获它。

于 2011-08-22T13:15:31.967 回答
1

你也许可以看看这个答案。它解释了为什么 try/catch 有时不起作用。

你不能写:

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

并测试 $Res 的值?

于 2011-08-22T13:02:19.547 回答