Использование блоков try / catch с командлетами Lync 2010 в powershell - PullRequest
2 голосов
/ 22 августа 2011

Я написал функцию, чтобы обернуть командлет new-cssipdomain блоком try / catch, если домен 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, и это, похоже, работает нормально.

Я также рассмотрел и попытался сначала использовать командлет hte get-cssipdomin, чтобы проверить, существует ли уже домен sip, но у меня есть похожая проблема в том, что если вы вызываете get-cscsipdomain с доменом, который не существуетон выдает ошибку, которую я, похоже, не могу уловить.

Любые предложения будут с благодарностью.

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

TRY:

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

Может быть, сама команда получила попытку / отловить ошибки.

1 голос
/ 22 августа 2011

Полагаю, ошибка, которую вы получаете, не является завершающей, и поэтому вы не можете ее перехватить.Попробуйте установить для ErrorAction значение «stop», что сделает ошибку завершающей, и вы сможете перехватить ее в блоке catch.

1 голос
/ 22 августа 2011

Возможно, вы можете посмотреть этот ответ .Это объясняет, почему try / catch иногда не работает.

Разве вы не можете просто написать:

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

И проверить значение $ Res?

...