2011-12-02 114 views
2

我試圖從C#代碼創建/啓用Exchange 2010服務器上的郵箱。 無處不在我看到使用下面顯示的代碼的人。啓用Exchange 2010郵箱

不過,我得到以下錯誤:

術語「啓用郵箱」沒有被識別爲cmdlet,函數,腳本文件或可操作的程序的名稱。檢查名稱的拼寫,或者如果包含路徑,請驗證路徑是否正確,然後重試。

我在做什麼錯?

 SecureString password = new SecureString(); 

     string str_password = "myPassword"; 
     string username = "myUsername"; 

     //FQDN is ofcourse the (fully qualified) name of our exchange server.. 
     string liveIdconnectionUri = "http://FQDN/Powershell?serializationLevel=Full"; 

     foreach (char x in str_password) 
     { 
      password.AppendChar(x); 
     } 

     PSCredential credential = new PSCredential(username, password); 

     WSManConnectionInfo connectionInfo = new WSManConnectionInfo((new Uri(liveIdconnectionUri)), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential); 
     connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default; 

     Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo); 
     PowerShell powershell = PowerShell.Create(); 
     PSCommand command = new PSCommand(); 

     command.AddCommand("Enable-Mailbox"); 
     command.AddParameter("Identity", "domainname.ltd/OUName/TestAcc Jap"); 
     command.AddParameter("Alias", "TestAccJap"); 
     command.AddParameter("Database", "DB-Name"); 

     powershell.Commands = command; 

     try 
     { 
      runspace.Open(); 
      powershell.Runspace = runspace; 
      powershell.Invoke(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     finally 
     { 
      runspace.Dispose(); 
      runspace = null; 
      powershell.Dispose(); 
      powershell = null; 
     } 
+0

可能重複http://stackoverflow.com/questions/3398056/how-do-i-programatically-create-an-exchange-2010 -Mailbox-使用-C-尖銳)。請閱讀已接受答案的第一段 - 這有幫助嗎? –

+0

一些示例:http://busbar.blogspot.com/2010/05/exhcange-2010-using-c-and-aspnet-to.html http://blog.pedroliska.com/2011/07/28/creating-an-exchange-2010-mailbox-from-a-remote-c-program/ – jagsler

+0

當我嘗試接受的答案的代碼時,出現以下錯誤:沒有爲Windows PowerShell版本2註冊管理單元。 – jagsler

回答

1

這可能是一個PowerShell相關的錯誤。如果您從遠程機器(而不是交換服務器)運行代碼,則必須爲有問題的用戶啓用遠程PowerShell訪問,並確保防火牆允許在端口80上連接到交換服務器。在交換機上服務器:

Set-User –identity username –RemotePowershellEnabled $True 

用戶還必須是允許創建郵箱的交換管理角色的成員。

如果您使用的是加載緩衝器和/或有DAG,則可能必須設置備用服務帳戶才能啓用Kerberos身份驗證。詳情請參閱http://technet.microsoft.com/en-us/library/ff808313.aspx。我必須啓用它才能使代碼在我的環境中運行。我修改了一下代碼,以測試我是否能夠運行Exchange PowerShell命令。如果成功,以下代碼將以USERIDENT用戶的全名作爲響應。

static void Main(string[] args) 
{ 
    SecureString password = new SecureString(); 
    string str_password = "PASS"; 
    string username = "domain\\user"; 

    //FQDN is ofcourse the (fully qualified) name of our exchange server.. 
    string liveIdconnectionUri = "http://SERVERFQDN/Powershell?serializationLevel=Full"; 
    foreach (char x in str_password) 
    { 
     password.AppendChar(x); 
    } 
    PSCredential credential = new PSCredential(username, password); 
    WSManConnectionInfo connectionInfo = new WSManConnectionInfo((new Uri(liveIdconnectionUri)), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential); 
    Runspace runspace = null; 
    PowerShell powershell = PowerShell.Create(); 
    PSCommand command = new PSCommand(); 
    command.AddCommand("Get-Mailbox"); 
    command.AddParameter("Identity", "USERIDENT"); 
    powershell.Commands = command; 
    try 
    { 
     connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default; 
     runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo); 
     runspace.Open(); 
     powershell.Runspace = runspace; 
     Collection<PSObject> commandResults = powershell.Invoke<PSObject>(); 
     foreach (PSObject result in commandResults) 
     { 
      Console.WriteLine(result.ToString()); 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
    finally 
    { 
     runspace.Dispose(); 
     runspace = null; 
     powershell.Dispose(); 
     powershell = null; 
    } 

} 
的([如何編程方式使用C#創建Exchange 2010郵箱]
+0

我已經用普通的PowerShell代碼測試過它,然後一切正常。我運行了Set-User-identity用戶名-RemotePowershellEnabled $真正的你剛纔提到的只是爲了確定,但我在我的問題中展示的代碼只是顯示一個錯誤:'Enable-Mailbox'沒有被識別爲名稱一個cmdlet,函數....這是因爲管理單元沒有加載我猜? – jagsler

+0

嘗試使用connectionInfo。AuthenticationMechanism = AuthenticationMechanism.Basic;而不是默認。 – BlackCat

+0

我改變了一些新的錯誤,我修復了其中的大部分錯誤,但我目前停留在以下錯誤。下一部分在下一個評論。連接到遠程服務器失敗,並顯示以下錯誤消息:WinRM客戶端無法處理該請求。服務器不支持客戶端請求的身份驗證機制,或者在服務配置中禁用未加密的通信。驗證服務配置中的未加密流量設置或指定服務器支持的其中一種身份驗證機制。 – jagsler

相關問題