2012-04-11 71 views
1

我想在C#中创建一个Exchange邮箱。下面的代码不会产生一个错误,但它也没有出现创建邮箱,我会想到:如何创建Exchange邮箱?

private void buttonCreateUser_Click(object sender, EventArgs e) 
{ 
    Boolean Success = CreateUser(textBoxFirstName.Text, textBoxLastName.Text, 
     textBoxAlias.Text, textBoxPassword.Text, 
     comboBoxDomain.SelectedItem.ToString(), 
     comboBoxOrganizationalUnit.SelectedItem.ToString()); 

    if (Success) 
    { 
     labelStatus.Text = "User Created"; 
    } 
    else 
    { 
     labelStatus.Text = "There Is Some Error"; 
    } 

} 

public Boolean CreateUser(string FirstName, string LastName, string Alias, 
    string PassWord, string DomainName, string OrganizationalUnit) 
{ 
    string Name = FirstName + " " + LastName; 
    string PrincipalName = FirstName + "." + LastName + "@" + DomainName; 

    Boolean success = false; 
    RunspaceConfiguration rsConfig = RunspaceConfiguration.Create(); 
    SecureString spassword = new SecureString(); 
    spassword.Clear(); 

    foreach (char c in PassWord) 
    { 
     spassword.AppendChar(c); 
    } 

    PSSnapInException snapInException = null; 
    PSSnapInInfo info = rsConfig.AddPSSnapIn(
     "Microsoft.Exchange.Management.PowerShell.E2010", out snapInException); 
    Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig); 
    myRunSpace.Open(); 
    Pipeline pipeLine = myRunSpace.CreatePipeline(); 

    Command myCommand = new Command("New-MailBox"); 
    myCommand.Parameters.Add("Name", Name); 
    myCommand.Parameters.Add("Alias", Alias); 
    myCommand.Parameters.Add("UserPrincipalName", PrincipalName); 
    myCommand.Parameters.Add("Confirm", true); 
    myCommand.Parameters.Add("SamAccountName", Alias); 
    myCommand.Parameters.Add("FirstName", FirstName); 
    myCommand.Parameters.Add("LastName", LastName); 
    myCommand.Parameters.Add("Password", spassword); 
    myCommand.Parameters.Add("ResetPasswordOnNextLogon", false); 
    myCommand.Parameters.Add("OrganizationalUnit", OrganizationalUnit); 
    pipeLine.Commands.Add(myCommand); 
    pipeLine.Invoke(); 
    myRunSpace.Dispose(); 

    success = true; 

    return success; 
} 

我没有得到一个错误,所以我不知道我是什么做错了。

更新

我使用的Web服务this.If我运行Windows应用程序,它的工作原理相同的代码,但不能与web服务?我应该在Exchange Server中进行任何更改吗?虽然我可以使用Get-MailBox获取MailBox的信息,但New-MailBox不能创建用户。

+0

您正在构建的POSH命令是否符合您的期望? – 2012-04-11 23:13:57

+0

@ M.Babcock用户未添加到邮箱中 – Hiren 2012-04-11 23:18:51

+1

在尝试使用会使问题复杂化的API动态构建它之前,手动解决POSH命令的详细信息。 – 2012-04-11 23:20:12

回答

1

我得到inproxy.dll的这个。我变更许可水平E解决方案,并whooooo其工作的伟大...

2

我一直在挣扎就此问题了几天(我也不知道C#作为本周之前的语言)。无论如何,对于像我这样的人,希望实现这一点,但挣扎,这里是一个适用于我的例子:

我们使用Exchange2010,我可以从没有安装交换工具的机器运行此。

using System.Management.Automation; 
using System.Management.Automation.Remoting; 
using System.Management.Automation.Host; 
using System.Collections.ObjectModel; 
using Microsoft.PowerShell.Commands; 

static string createmailbox(string name, string alias, string email, string database, string UPN) 
     { 

      SecureString spassword = new SecureString(); 
      string PassWord = "<set default password here or read in input from form>"; 
      spassword.Clear(); 

      foreach (char c in PassWord) 
      { 
       spassword.AppendChar(c); 
      } 

      string orgunit = "<define the OU here if you always use the same one, alternatively, add as parameter in function call>"; 
      string dc = "<similarly, add DC here if needed, or call from function>"; 
      PSCredential newCred = (PSCredential)null; 
      WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri("<put in CAS server FQDN here>/powershell?serializationLevel=Full"), 
       "http://schemas.microsoft.com/powershell/Microsoft.Exchange", newCred); 
      connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Kerberos; 
      Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo); 
      PowerShell powershell = PowerShell.Create(); 

      PSCommand command = new PSCommand(); 
      command.AddCommand("New-Mailbox"); 
      command.AddParameter("-Name", name); 
      command.AddParameter("-Alias", alias); 
      command.AddParameter("-UserPrincipalName", email); 
      command.AddParameter("-PrimarySMTPAddress", email); 
      command.AddParameter("-Password",spassword); 
      // (ConvertTo-SecureString -AsPlainText "P4ssw0rd" -Force) 
      command.AddParameter("-Database", database); 
      command.AddParameter("-OrganizationalUnit", orgunit); 
//   command.AddParameter("-Email", email); 
      command.AddParameter("-DomainController", dc); 
      powershell.Commands = command; 
      try 
      { 
       runspace.Open(); 
       powershell.Runspace = runspace; 
       Collection<PSObject> results = powershell.Invoke(); 
       return results.ToString(); 
      } 
      catch (Exception ex) 
      { 
       string er = ex.InnerException.ToString(); 

      } 
      finally 
      { 
       runspace.Dispose(); 
       runspace = null; 

       powershell.Dispose(); 
       powershell = null; 

      } 
     } 

我的用例是通过WPF窗体,所以参数从窗体上的文本框填充。我已经设置了密码(我们有一个共享邮箱的默认密码,用户帐户被禁用),OU和域控制器为静态文本,但它们可以通过变量轻松调用。

相关问题