2012-02-23 281 views
1

標題幾乎可以解釋這一切。我有一個C#應用程序不在Exchange Server上運行。我需要能夠創建郵箱。我試圖用this教程,但它需要PowerShell的IIS虛擬目錄中,以:在C#中遠程Exchange 2010服務器上創建Exchange郵箱#

  1. 不需要SSL
  2. 允許基本身份驗證

哪些事情,我們不能這樣做。這使我有兩種可能的解決方案。有沒有辦法修改上面列出的教程,以便不需要這兩個限制,還是有辦法在不使用Power Shell的情況下執行此操作?

下面是代碼,如果你不覺得喜歡去的鏈接:

 

using System; 
using System.Security; 
using System.Management.Automation; 
using System.Management.Automation.Runspaces; 

namespace PowerShellTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      // Prepare the credentials that will be used when connecting 
      // to the server. More info on the user to use on the notes 
      // below this code snippet. 
      string runasUsername = @"username"; 
      string runasPassword = "password"; 
      SecureString ssRunasPassword = new SecureString(); 
      foreach (char x in runasPassword) 
       ssRunasPassword.AppendChar(x); 
      PSCredential credentials = 
       new PSCredential(runasUsername, ssRunasPassword); 

      // Prepare the connection 
      var connInfo = new WSManConnectionInfo(
       new Uri("http://ServersIpAddress/PowerShell"), 
       "http://schemas.microsoft.com/powershell/Microsoft.Exchange", 
       credentials); 
      connInfo.AuthenticationMechanism = 
       AuthenticationMechanism.Basic; 

      // Create the runspace where the command will be executed 
      var runspace = RunspaceFactory.CreateRunspace(connInfo); 

      // generate the command parameters 
      var testNumber = 18; 
      var firstName = "Test"; 
      var lastName = "User" + testNumber; 
      var username = "tuser" + testNumber; 
      var domainName = "pedro.test.local"; 
      var password = "ActiveDirectoryPassword1234"; 
      var ssPassword = new SecureString(); 
      foreach (char c in password) 
       ssPassword.AppendChar(c); 

      // create the PowerShell command 
      var command = new Command("New-Mailbox"); 
      command.Parameters.Add("Name", firstName + " " + lastName); 
      command.Parameters.Add("Alias", username); 
      command.Parameters.Add(
       "UserPrincipalName", username + "@" + domainName); 
      command.Parameters.Add("SamAccountName", username); 
      command.Parameters.Add("FirstName", firstName); 
      command.Parameters.Add("LastName", lastName); 
      command.Parameters.Add("Password", ssPassword); 
      command.Parameters.Add("ResetPasswordOnNextLogon", false); 
      command.Parameters.Add(
       "OrganizationalUnit", "NeumontStudents"); 

      // Add the command to the runspace's pipeline 
      runspace.Open(); 
      var pipeline = runspace.CreatePipeline(); 
      pipeline.Commands.Add(command); 

      // Execute the command 
      var results = pipeline.Invoke(); 

      runspace.Dispose(); 

      if (results.Count > 0) 
       Console.WriteLine("SUCCESS"); 
      else 
       Console.WriteLine("FAIL"); 

     } 
    } 
} 

 

回答

1

您可以設置很多不同AuthenticationMechanism

訪問MSDN網站所謂的運行空間用於使用代碼樣品:

  • 基本認證(這是在實施例中使用)
  • 證書驗證
  • Kerberos身份驗證
  • 協商的身份驗證

http://msdn.microsoft.com/en-us/library/ff326159(v=exchg.140).aspx

在任何情況下,沒有必要放棄對PowerShell的,只是還沒有。

1

該博客文章的代碼有點不合適。 Pipeline類是創建命令的一種過於複雜的方式,其編寫方式涉及創建一對運行空間(一個本地,一個遠程),而不僅僅是遠程運行空間。

此外,IIS中的「基本」和「http」並不表示「在PowerShell中沒有安全性和不加密」。通過WinRM層發送的所有內容都是默認加密的。來自Exchange團隊的

This Link涵蓋了在C#中完成此操作的正確方法。

所以:

  • 您不必擔心IIS「基本」,因爲有另一層安全。
  • 可以減少你的代碼了一半,使之更快,如果你使用C#從Exchange團隊

而且是100%一清二楚:

你不能管理Exchange 2010中遠程,除了通的PowerShell 。

希望對此有所幫助

相關問題