2012-05-08 43 views
1

我有一個應用程序(其中包括)需要調用New-MailContact cmdlet並在Active Directory中創建聯繫人。我已經跟着少數幾篇技術文章獲得,但仍然無法工作。從C#代碼運行New-MailContact cmdlet時未創建聯繫人

我已驗證我使用的服務帳戶是否具有基於this TechNet page的正確驗證。我能夠從powershell中找到並調用該cmdlet,並且我沒有收到任何錯誤。

但是,運行後我檢查我的OU,我的聯繫人沒有創建。我發現this知識庫文章,我認爲可能是可疑的,但由於該cmdlet不會在調用後返回任何錯誤,我不能確定這將解決我的問題。

下面是我在做什麼的一個片段:

public bool CreateMailContactObject(ADExchangeContact adExchangeContacts) 
    { 
     Collection<PSObject> results; 
     Pipeline pipeLine = null; 

     try 
     { 
      var runspaceConfiguration = RunspaceConfiguration.Create(); 
      PSSnapInException snapInException; 
      var snapInInfo = runspaceConfiguration.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException); 

      using (var runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration)) 
      { 
       var newMailBoxContact = new Command("New-MailContact"); 
       newMailBoxContact.Parameters.Add("Name", adExchangeContacts.DisplayName); 
       newMailBoxContact.Parameters.Add("ExternalEmailAddress", adExchangeContacts.ExternalEmailAddress); 
       newMailBoxContact.Parameters.Add("OrganizationalUnit", adExchangeContacts.OrganizationalUnit); 
       newMailBoxContact.Parameters.Add("Alias", adExchangeContacts.Alias); 

       runspace.Open(); 

       pipeLine = runspace.CreatePipeline(); 
       pipeLine.Commands.Add(newMailBoxContact); 

       results = pipeLine.Invoke(); 

       _log.DebugFormat("results.Count = {0}", results.Count); 
       results.ForEach(x => x.Properties.ForEach(y => _log.DebugFormat("{0}: {1}", y.Name, y.Value))); 

       pipeLine.Stop(); 
       runspace.Close(); 
      } 

      return true; 
     } 
     catch (Exception ex) 
     { 
      // Add log statement 
      _log.ErrorFormat("Creation of Mail Contact in AD Failed. Error: {0}", ex); 
      return false; 
     }    
    } 

我沒有得到任何異常,我的結果列表是從管道調用空。有什麼我失蹤?如果在AD中創建聯繫人時由於權限導致該cmdlet失敗,那麼我是否會在pipeLine.Invoke()的結果集中收到某種錯誤?

我是運行Powershell的新手,所以如果有另一個問題(超出KB文章)可能在手邊,請讓我知道。

回答

1
if (pipeline.Error != null && pipeline.Error.Count > 0) 
       { 
        StringBuilder pipelineError = new StringBuilder(); 
        pipelineError.AppendFormat("Error calling Add-MailboxPermission."); 
        foreach (object item in thisPipeline.Error.ReadToEnd()) 
        { 
         pipelineError.AppendFormat("{0}\n", item.ToString()); 
        } 

        ErrorText = ErrorText + "Error: " + pipelineError.ToString() + Environment.NewLine; 
       } 

請把這個代碼後pipeline.Invoke()並檢查是否存在有

更新任何錯誤: 我覺得這是埃羅與給予正確的權限的用戶,一些此解決方案:

http://boardreader.com/thread/Microsoft_Exchange_2010_wont_allow_new_M_1w69j__37ad9f8a-cdcf-4d26-9384-00ad1a3d0f91.html
http://blogs.technet.com/b/richardroddy/archive/2010/07/12/exchange-2010-and-the-exchange-trusted-subsystem.aspx

+0

謝謝你。我正在標記你的答案是正確的。這並沒有解決我的問題,但你教我如何從我的電話中獲得更多的細節。結果是:'2012-05-08 15:58:38,227 [DEBUG](MyProject.Core.Services.ADService)錯誤:在MY-SERVER.Domain.com上調用New-MailContact.Active Directory操作失敗。這個錯誤不可回溯。其他信息:訪問被拒絕。 活動目錄響應:00000005:SecErr:DSID-031521D0,問題4003(INSUFF_ACCESS_RIGHTS),數據0'看起來知識庫文章是我的罪魁禍首。 –

+0

根據您的更新,我們使用Exchange 2007,所以我認爲這是我的服務帳戶權限,而不是ETS。再次感謝你! –