3

を使用してExchange 2010います。現在、C#でPowerShellコマンドレットを使用して新しいメールボックス アカウントを作成しています。New-Mailbox

新しいメールボックスを動的に作成することは可能ですか (c#)? 私が使用しているコードは次のとおりです。

// 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 = @"xxxxx";
string runasPassword = "xxxxx";
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://yourip/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 = "dom.dom.ca";
var password = "qwerty123";
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)
    MessageBox.Show("SUCCESS");
else
    MessageBox.Show("FAIL");

(出典)完全なチュートリアルはこちら

私の目標は、メールボックスの作成中にアカウントのプロパティを設定することです:

  1. 住所(番地、市区町村など)
  2. 電話番号
  3. 説明
  4. ファックス

しかし、コマンド コマンドレットにNew-Mailboxはこれらのパラメーターがすべて欠落しているようです。新しいメールボックスのドキュメント

メールボックスの作成中にこれらのパラメータを設定することは可能ですか?

4

1 に答える 1

2

私は C# を知りませんが、Exchange 管理シェルから実行する方法を説明し、C# からコマンドを呼び出す方法をあなたに任せることができます。問題はないようです。

最も簡単な方法は、Exchange 管理シェルのSet-Userコマンドレットを使用することです。

Set-User -Identity barack.obama -StreetAddress '1600 Pennsylvania Ave NW' -City 'Washington' -StateOrProvince 'D.C.' -PostalCode '20500' -Phone '202-456-1111' -Fax '202-456-2461'

-Identityは、SamAccountName、UserPrincipalName、SmtpAddress、Identity、Alias など、Get-Mailboxで使用できる任意の ID パラメーターにすることができます。メールボックス オブジェクトをSet-Userにパイプして、-Identityを省略することもできます。実際、作成したメールボックス オブジェクトを返すため、 New-Mailboxコマンドレットを直接Set-Userにパイプできます。

New-Mailbox [...] | Set-User -StreetAddress [...]

パラメータ名は、AD 属性名と常に一致するとは限りません。たとえば、-PhoneはofficePhone AD 属性にマップされます。-HomePhoneパラメーターもあり、 homePhone属性にマップされます。

ただし、Set-Userは、Active Directory プロパティの特定のサブセットに制限されています。必要なことのほとんどが実行されますが、このコマンドレットでは説明が公開されません。「Etc」には、公開されていない他の属性がいくつかある場合があります。他の属性を設定するには、Active Directory を更新する他の方法を使用する必要があります。

ただし、それを EMS スクリプトに統合することは難しくありません。Exchange Server では常に AD 管理ツールを使用できるため、dsmodを使用して、説明を含むさまざまな属性のサブセットを更新できます。

dsmod user (Get-Mailbox barack.obama).DistinguishedName -desc 'Description'

オブジェクト タイプ ( user )の後の最初のパラメーターは識別名で、 でメールボックスから読み取ることができます(Get-Mailbox barack.obama).DistinguishedName

繰り返しますが、パラメーター名は AD 属性と一致しませんが、入力すると完全なリストを取得できますdsmod user /?New-Mailboxから直接パイプするには:

New-Mailbox [...] | select -ExpandProperty DistinguishedName | %{dsmod user $_ -desc 'Description'}

その他のオプション:

  • PowerShell の ADSI プロバイダー。1 つのコマンドで複数の属性を設定することはできず、最後に変更をコミットする必要があるため、少し扱いに​​くいですが、設定可能な属性を変更することができます。次に例を示します。

    $user = [adsi]("LDAP://" + (Get-User barack.obama).DistinguishedName)
    $user.telephoneNumber = '202-456-1111'
    $user.streetAddress = '1600 Pennsylvania Avenue NW'
      [etc...]
    $user.SetInfo()
    
  • Set-ADUserコマンドレット。これは、設定したい任意の属性を変更でき、単一のコマンドで複数の属性を設定でき、おそらく最も使いやすいですが、もちろん落とし穴があります: ActiveDirectory モジュールをインポートする必要があります。 Exchange 2010 サーバーですぐに使用できます。

于 2014-04-29T19:46:36.560 に答える