2012-04-11 10 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サービスではない、それが動作するWindowsアプリケーションと同じコードを実行し、しかしthis.IfのためのWebサービスを使用していますか? Exchange Serverで何か変更を加える必要がありますか? Get-MailBoxではなく、New-MailBoxを使ってMailBoxの情報を取得することはできますが、ユーザーを作成することはできません。

+0

あなたが作成しているPOSHコマンドは、期待どおりの動作をしていますか? –

+0

@ M.Babcockユーザーがメールボックスに追加されない – Hiren

+1

問題を複雑にするAPIを使用して動的にビルドする前に、POSHコマンドの詳細を手動で作成してください。 –

答えて

1

私は(私はC#のについて何も知らなかった私は数日間、この非常に問題で苦労してきたinproxy.dllのこの.I変更許可levalのためのソリューションを取得し、その作業偉大をwhooooo ...

2

この週の前に言語として)。とにかく、私のような、これを実装しようと思っているが、苦労している人のために、私のために働く例がここにあります:

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とドメインコントローラは静的テキストとして設定しましたが、変数を介して簡単に呼び出すことができます。

関連する問題