none
Exchange 2013. Перенос только созданного почтового ящика в одну из баз по условию. RRS feed

  • Вопрос

  • Здравствуйте.

    Есть задача переносить только созданные почтовые ящики в базу в зависимости от буквы, на которую они начинаются. Делаю через расширение командлета, ScriptingAgentConfig

       <Feature Name="MailboxProvisioning" Cmdlets="New-Mailbox,Enable-Mailbox">
    
         <ApiCall Name="OnComplete">
    
           If($succeeded) 
    	   {
    
             $adrs = $provisioningHandler.UserSpecifiedParameters["email"]
            
    		 $d = $adrs.StartsWith("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",)
    
    		 
    			If ($d=true) {
    			Set-Mailbox $adrs -DataBase mailbase1
    			} else {			
    			Set-Mailbox $adrs -DataBase mailbase2
    			}
    
           }
    
         </ApiCall>
    
       </Feature>
    

    Проблема в том, что, как я понял, startwith принимает только одно значение и возвращает булевое значение. Помогите правильно создать цикл.

    12 декабря 2016 г. 11:11

Ответы

  • Протестировал:

    <?xml version="1.0" encoding="utf-8" ?>
    <Configuration version="1.0">
    	<Feature Name="MailboxProvisioning" Cmdlets="New-Mailbox,Enable-Mailbox">
    	 <ApiCall Name="OnComplete">
    
           If($succeeded) {
    	$alias = $provisioningHandler.UserSpecifiedParameters["Alias"]
    
    	if ("$alias" -match "^[a-m].*") { Set-Mailbox -Identity "$alias" -DataBase maildb01 -Confirm:$false -Force }
        	if ("$alias" -match "^[n-z].*") { Set-Mailbox -Identity "$alias" -DataBase maildb02 -Confirm:$false -Force }
         }
         </ApiCall>
       </Feature>
    </Configuration>

    • Помечено в качестве ответа Dirty Sanche4 19 декабря 2016 г. 9:51
    14 декабря 2016 г. 18:55
    Отвечающий

Все ответы

  • $c =  "$adrs"[0]
    switch ($c){
         "a" {Set-Mailbox $adrs -DataBase mailbase1; break}
         "b" {Set-Mailbox $adrs -DataBase mailbase2; break}
         "c" {Set-Mailbox $adrs -DataBase mailbase3; break}
         "d" {Set-Mailbox $adrs -DataBase mailbase4; break}
         "e" {Set-Mailbox $adrs -DataBase mailbase5; break}
    	 "f" {Set-Mailbox $adrs -DataBase mailbase6; break}
    	 "g" {Set-Mailbox $adrs -DataBase mailbase7; break}
    	 "h" {Set-Mailbox $adrs -DataBase mailbase8; break}
    	 "i" {Set-Mailbox $adrs -DataBase mailbase9; break}
    	 "j" {Set-Mailbox $adrs -DataBase mailbase10; break}
    	 "k" {Set-Mailbox $adrs -DataBase mailbase11; break}
    	 "l" {Set-Mailbox $adrs -DataBase mailbase12; break}
    	 "m" {Set-Mailbox $adrs -DataBase mailbase13; break}
         default {"Something else happened"; break}
    }

    12 декабря 2016 г. 11:20
    Отвечающий
  • Спасибо. Нашел как упростить, но при создании ящика база не назначается. в чем может быть проблема?

    <?xml version="1.0" encoding="utf-8" ?> <Configuration version="1.0"> <Feature Name="MailboxProvisioning" Cmdlets="New-Mailbox,Enable-Mailbox"> <ApiCall Name="OnComplete"> If($succeeded) {

    $alias = $provisioningHandler.UserSpecifiedParameters["Alias"] If ($alias -match "^[a-m].*") { Set-Mailbox $alias -DataBase maildb01; break } Elseif ($alias -match "^[n-z].*") { Set-Mailbox $alias -DataBase maildb02; break } Else {break} } </ApiCall> </Feature> </Configuration>



    • Изменено Dirty Sanche4 12 декабря 2016 г. 13:40
    12 декабря 2016 г. 13:40
  • Добавить лог(создать папку для записи):

    if($succeeded) 
    {
        $alias = $provisioningHandler.UserSpecifiedParameters["Alias"]
        $alias >> C:\Log\Log.txt
        $mb = Get-Mailbox -Indentity $alias
        $mb >> C:\Log\Log.txt
        if ($alias -match "^[a-m].*") { Set-Mailbox -Indentity $mb -DataBase maildb01}
        if ($alias -match "^[n-z].*") { Set-Mailbox -Indentity $mb -DataBase maildb02}
    }

    12 декабря 2016 г. 13:59
    Отвечающий
  • Теперь пишет, что присваивается пустое значение.

    WARNING: The cmdlet extension agent with the index 1 has thrown an exception in OnComplete(). The exception is:
    Microsoft.Exchange.Provisioning.ProvisioningException: ScriptingAgent: Exception thrown while invoking scriptlet f
    OnComplete API: Cannot bind argument to parameter 'Identity' because it is null.. --->
    System.Management.Automation.ParameterBindingValidationException: Cannot bind argument to parameter 'Identity' bec
    it is null.
       at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input, Hashtable
    errorResults, Boolean enumerate)
       at System.Management.Automation.PipelineOps.InvokePipeline(Object input, Boolean ignoreInput,
    CommandParameterInternal[][] pipeElements, CommandBaseAst[] pipeElementAsts, CommandRedirection[][]
    commandRedirections, FunctionContext funcContext)
       at System.Management.Automation.Interpreter.ActionCallInstruction`6.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)
    

    13 декабря 2016 г. 9:17
  • Если поменять Alias на $provisioningHandler.UserSpecifiedParameters["Identity"]?

    $alias = $mb.Alias

    13 декабря 2016 г. 9:36
    Отвечающий
  • в таком виде так же, не принимает пустое значение

    <?xml version="1.0" encoding="utf-8" ?>
    
    <Configuration version="1.0">
    
       <Feature Name="MailboxProvisioning" Cmdlets="New-Mailbox,Enable-Mailbox">
    
         <ApiCall Name="OnComplete">
    
           If($succeeded) {
    
             $mbx = $provisioningHandler.UserSpecifiedParameters["Name"]
             $alias = $provisioningHandler.UserSpecifiedParameters["Identity"]
             $mb = Get-Mailbox -Identity $alias
    	 $test = $mb.Alias
    
    
    	 Set-CASMailbox $mbx -ImapEnabled $true
    
             Add-MailboxPermission $mbx –user administer –AccessRights FullAccess –InheritanceType All
        
    	 if ($test -match "^[a-m].*") { Set-Mailbox -Identity $mb -DataBase maildb01 }
        	 if ($test -match "^[n-z].*") { Set-Mailbox -Identity $mb -DataBase maildb02 }
    
         }
    
         </ApiCall>
    
       </Feature>
    
    </Configuration>

    13 декабря 2016 г. 10:41
  • А так на примере New-Mailbox:

    If($succeeded) {
    
             $mbx = $provisioningHandler.UserSpecifiedParameters["Name"]
             $mb = Get-Mailbox -Identity $mbx
    		 $test = $mb.Alias
    
    		 Set-CASMailbox $mbx -ImapEnabled $true
    
             Add-MailboxPermission $mbx –user administer –AccessRights FullAccess –InheritanceType All
        
    		 if ($test -match "^[a-m].*") { Set-Mailbox -Identity $mbx -DataBase maildb01 }
        	 if ($test -match "^[n-z].*") { Set-Mailbox -Identity $mbx -DataBase maildb02 }
    
         }

    13 декабря 2016 г. 10:52
    Отвечающий
  • Не сработало, алерт тот же, что нет данных для identety, но группу накидывает, аймап включает. Что при enable-mailbox, что на new-mailbox
    13 декабря 2016 г. 20:12
  • Протестировал:

    <?xml version="1.0" encoding="utf-8" ?>
    <Configuration version="1.0">
    	<Feature Name="MailboxProvisioning" Cmdlets="New-Mailbox,Enable-Mailbox">
    	 <ApiCall Name="OnComplete">
    
           If($succeeded) {
    	$alias = $provisioningHandler.UserSpecifiedParameters["Alias"]
    
    	if ("$alias" -match "^[a-m].*") { Set-Mailbox -Identity "$alias" -DataBase maildb01 -Confirm:$false -Force }
        	if ("$alias" -match "^[n-z].*") { Set-Mailbox -Identity "$alias" -DataBase maildb02 -Confirm:$false -Force }
         }
         </ApiCall>
       </Feature>
    </Configuration>

    • Помечено в качестве ответа Dirty Sanche4 19 декабря 2016 г. 9:51
    14 декабря 2016 г. 18:55
    Отвечающий