none
Настройка Scripting Agent RRS feed

  • Вопрос

  • Доброго дня. Коллеги, может кто подскажет, раньше был Exchange 2010 и на нем выполнялся вот такой скрипт (по отправке писем при создании нового почтового ящика):

    <?xml version="1.0" encoding="utf-8" ?>
    <Configuration version="1.0">
    
    <Feature Name="Welcome Email" Cmdlets="New-Mailbox,Enable-Mailbox">
    <ApiCall Name="OnComplete">
     if($succeeded)    {
    # Waiting for synchronization after mailbox has been created.
    Set-ADServerSettings -ViewEntireForest $true
    Start-Sleep -s 10
    # Enable-Mailbox triggered. Taking Identity parameter, this is the only one avalaible in this case.
    if ($provisioningHandler.UserSpecifiedParameters.Contains("Identity") -eq $true) {
    $UsrIdentity = $provisioningHandler.UserSpecifiedParameters["Identity"].ToString()
    $UsrAlias = (Get-Mailbox -Identity $UsrIdentity).Alias.ToString()
    $USRdfirst=$provisioningHandler.UserSpecifiedParameters["FirstName"]
    $USRdlast=$provisioningHandler.UserSpecifiedParameters["LastName"]
    $USRdname= $USRdfirst + " " + $USRdlast
    }
    # New-Mailbox triggered. Taking SamAccountName parameter.
    if ($provisioningHandler.UserSpecifiedParameters.Contains("SamAccountName") -eq $true) {
    $UsrSamAccountName = $provisioningHandler.UserSpecifiedParameters["SamAccountName"]
    $UsrAlias = (Get-Mailbox -Filter {SamAccountName -eq $UsrSamAccountName}).Alias.ToString()
    $USRdfirst=$provisioningHandler.UserSpecifiedParameters["FirstName"]
    $USRdlast=$provisioningHandler.UserSpecifiedParameters["LastName"]
    $USRdname= $USRdfirst + " " + $USRdlast
    }
    #creating email address
    $USRemail = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).PrimarySmtpAddress.ToString()
    $UsrOU = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).OrganizationalUnit
    $tempmsg = [string] (get-content ("D:\temp\1.htm"))
    $tempmsg = $tempmsg -replace "NewUser00",$USRdname
    $tempmsg = $tempmsg -replace "USERname",$USRalias
    # Please give the correct HUB serve IP address in the following line.
    $HUBServer = "owa.mydomain.ru"
    $EMail =new-object net.mail.mailmessage
    $HUBTask = new-object net.mail.smtpclient($HUBServer)
    # Email with attachment will be sent from the address given in the following line.
    $EMail.From = "noreply@mydomain.ru"
    # Email with attachment will be sent TO the address given in the following line.
    $EMail.To.Add($USRemail)
    # Email Subject and Body details are speficied in following lines
      $EMail.Subject = "Добро пожаловать в ООО НПФ ГРАНЧ (обязательно к прочтению)"
    $EMail.Body= $tempmsg
    $Email.IsBodyHtml = $true
    $EMail.Priority = "High"
    $HUBTask.send($EMail)
    # Clearing variables. Each one in its own line in order to prevent error messages from being shown on EMC.
    if ($UsrAlias) { Remove-Variable UsrAlias }
    if ($UsrAddr) { Remove-Variable UsrAddr }
    if ($UsrOU) { Remove-Variable UsrOU }
    if ($UsrMsg) { Remove-Variable UsrMsg }
    if ($UsrIdentity) { Remove-Variable UsrIdentity }
    if ($UsrSamAccountName) { Remove-Variable UsrSamAccountName }
    }
    </ApiCall>
    </Feature>
    # Script to send new email ends here
    
    </Configuration>

    Перееехали на Exchange 2013, я включил скрипт на сервере, создаю пользователя и возвращается вот такая ошибка:

    The cmdlet extension agent with the index 5 has thrown an exception in OnComplete(). The exception is: Microsoft.Exchange.Provisioning.ProvisioningException: ScriptingAgent: Exception thrown while invoking scriptlet for OnComplete API: Exception calling "Send" with "1" argument(s): "A recipient must be specified.". ---> System.Management.Automation.MethodInvocationException: Exception calling "Send" with "1" argument(s): "A recipient must be specified." ---> System.InvalidOperationException: A recipient must be specified. at System.Net.Mail.SmtpClient.Send(MailMessage message) at CallSite.Target(Closure , CallSite , Object , Object ) --- End of inner exception stack trace --- at System.Management.Automation.ExceptionHandlingOps.ConvertToMethodInvocationException(Exception exception, Type typeToThrow, String methodName, Int32 numArgs, MemberInfo memberInfo) at CallSite.Target(Closure , CallSite , Object , Object ) at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1) at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) --- End of inner exception stack trace --- at Microsoft.Exchange.ProvisioningAgent.ScriptingAgentHandler.OnComplete(Boolean succeeded, Exception e) at Microsoft.Exchange.Provisioning.ProvisioningLayer.OnCompleteImpl(Task task, Boolean succeeded, Exception exception)

    Может кто подскажет, в чем проблема?


    С уважением, Спицкий Никита

    2 декабря 2014 г. 8:02

Ответы

  • Добрый день.

    У вас почему-то значение $EMail.To.Add($USRemail) пустое (возможно). Попробуйте добавить в этот скрипт вывод значений всех переменных в файл (например, $UsrIdentity | out-file -filepath "c:\temp\script.txt") в тех местах, где эти переменные определяются. так вы сможете понять на каком этапе происходит сбой.


    Blog - Smtp25.ru
    Полезные ссылки - Links

    2 декабря 2014 г. 8:25
    Отвечающий
  • Спасибо за ответ. Нашел "официальный мануал"  и сделал по нему

    С уважением, Спицкий Никита

    2 декабря 2014 г. 9:28

Все ответы

  • Добрый день.

    У вас почему-то значение $EMail.To.Add($USRemail) пустое (возможно). Попробуйте добавить в этот скрипт вывод значений всех переменных в файл (например, $UsrIdentity | out-file -filepath "c:\temp\script.txt") в тех местах, где эти переменные определяются. так вы сможете понять на каком этапе происходит сбой.


    Blog - Smtp25.ru
    Полезные ссылки - Links

    2 декабря 2014 г. 8:25
    Отвечающий
  • Спасибо за ответ. Нашел "официальный мануал"  и сделал по нему

    С уважением, Спицкий Никита

    2 декабря 2014 г. 9:28