2012-04-11 9 views
1

Ich versuche, ein Exchange-Postfach in C# zu erstellen. Der folgende Code erzeugt keinen einen Fehler, aber es scheint auch kein Postfach zu erstellen, wie ich erwarten würde:Wie erstelle ich ein Exchange Postfach?

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; 
} 

ich nicht einen Fehler, so dass ich weiß nicht, was ich bin falsch machen.

aktualisieren

I Web-Service für this.If bin mit betreibe ich denselben Code mit Windows-Anwendung funktioniert, aber nicht mit WebService? sollte ich Änderungen in Exchange Server vornehmen? Obwohl ich Informationen von MailBox mit Get-MailBox erhalten kann, aber New-MailBox nicht Benutzer erstellt.

+0

Entspricht der von Ihnen erstellte POSH-Befehl dem, was Sie erwarten? –

+0

@ M.Babcock Benutzer ist nicht im Postfach hinzugefügt – Hiren

+1

Erarbeiten Sie die Details des POSH-Befehls manuell, bevor Sie versuchen, es mit APIs dynamisch zu erstellen, die das Problem komplizieren. –

Antwort

1

ich die Lösung für dieses .Ich Änderungserlaubnis leval von Inproxy.dll und Whooooo seiner Arbeiten groß ...

2

Ich habe für ein paar Tage mit diesem Problem zu kämpfen (Ich wusste nichts über C# als eine Sprache vor dieser Woche). Wie auch immer, für jemanden wie mich, der versucht, dies zu implementieren, aber kämpft, hier ist ein Beispiel, das für mich funktioniert:

Wir verwenden Exchange2010, und ich kann dies von einer Maschine ausführen, die die Exchange-Tools nicht installiert hat.

Mein Anwendungsfall ist über ein WPF-Formular, so dass die Parameter aus Textfeldern im Formular ausgefüllt werden. Ich habe Dinge wie das Passwort (wir haben ein Standardkennwort für freigegebene Postfächer und das Benutzerkonto ist deaktiviert), die Organisationseinheit und den Domänencontroller als statischen Text festgelegt, aber sie könnten genauso einfach über Variablen aufgerufen werden.

Verwandte Themen