使用C#在远程Exchange 2010 Server上创建Exchange邮箱

时间:2012-02-23 16:59:10

标签: c# powershell exchange-server exchange-server-2010

标题几乎解释了这一切。我有一个没有在Exchange Server上运行的C#应用​​程序。我需要能够创建邮箱。我尝试使用this教程,但它需要PowerShell IIS Virutal目录:

  1. 不需要SSL
  2. 允许基本身份验证
  3. 我们不能做的事情。这引出了两种可能的解决方案。有没有办法修改上面列出的教程不需要这两个限制,或者有没有办法在不使用电源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");
    
            }
        }
    }
    
    
    

2 个答案:

答案 0 :(得分:1)

您可以设置一个具有许多不同AuthenticationMechanism

的所谓运行空间

使用以下命令访问MSDN网站以获取代码示例:

  • 基本身份验证(在您的示例中使用)
  • 证书身份验证
  • Kerberos身份验证
  • 协商认证

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

无论如何,还不需要放弃PowerShell。

答案 1 :(得分:1)

该博客文章的代码有点破碎。 Pipeline类是一种创建命令的过于复杂的方式,它的编写方式涉及创建一对运行空间(一个本地,一个远程),而不仅仅是远程运行空间。

此外,IIS中的“基本”和“http”并不意味着“在PowerShell中没有安全性和加密”。通过WinRM层发送的所有内容都是默认加密的。

来自Exchange团队的

This Link涵盖了在C#中正确完成此任务的正确方法。

所以:

  • 您不必担心IIS“基本”,因为还有另一层安全性。
  • 如果您使用Exchange团队的C#
  • ,您可以将代码减少一半并加快速度

也是100%晶莹剔透的:

除了通过PowerShell之外,您无法远程管理Exchange 2010。

希望这有助于