2012-04-11 4 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; 
} 

나는 오류가 발생하지 않는, 그래서 내가 모르는 잘못하고있다.

내가 이것도 알라를 들어 웹 서비스를 사용하고

업데이트 나는하지 WebService에와 작동 윈도우 응용 프로그램과 같은 코드를 실행, 그러나? Exchange Server를 변경해야합니까? Get-MailBox가있는 MailBox 정보를 얻을 수 있지만 New-MailBox는 사용자를 만들 수는 없지만.

+0

구축중인 POSH 명령이 예상 한대로 작동합니까? –

+0

@ M.Babcock 사용자가 사서함에 추가되지 않았습니다. – Hiren

+1

문제를 복잡하게 만드는 API로 동적으로 빌드하기 전에 POSH 명령의 세부 사항을 수동으로 작성하십시오. –

답변

2
내가 몇 일이 매우 문제로 어려움을 겪고 있었어요

(전 C#에 대해 아무것도 알지 ... inproxy.dll의 .I 변경 허가 leval에 대한 해결책을 얻을하고 큰 작업 whooooo 이번 주 이전에 언어로). 어쨌든, 나를 좋아하는 사람이라면, 이것을 구현하려고하지만 어려움을 겪고있는 사람은 나를 위해 좋은 예가 있습니다.

우리는 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 및 도메인 컨트롤러를 정적 텍스트로 설정했지만 변수를 통해 쉽게 호출 할 수 있습니다.

관련 문제