我正在使用Exchange 2010
。我目前正在 c#中使用 PowerShell cmdlet 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");
(Source) Here's the complete tutorial
我的目标是在邮箱创建过程中设置帐户属性:
但看起来命令cmdlet New-Mailbox
缺少所有这些参数。 New-Mailbox documentation
是否可以在创建邮箱期间设置这些参数?
答案 0 :(得分:1)
我不知道C#,但是我可以告诉你如何从Exchange命令行管理程序执行此操作,并让它从C#中调用命令,看起来你没有问题。
最简单的方法是使用Exchange命令行管理程序的设置用户 cmdlet:
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 可以是您可以与 Get-Mailbox 一起使用的任何身份参数,包括SamAccountName,UserPrincipalName,SmtpAddress,Identity,Alias,一些otehrs。您还可以将邮箱对象通过管道传输到设置用户,并省略 -Identity 。实际上,您可以将 New-Mailbox cmdlet直接发送到 Set-User ,因为它会返回它创建的邮箱对象:
New-Mailbox [...] | Set-User -StreetAddress [...]
参数名称不一定与AD属性名称匹配。例如, -Phone 映射到 officePhone AD属性;还有一个 -HomePhone 参数,该参数映射到 homePhone 属性。
但是, Set-User 仅限于Active Directory属性的某个子集。它将执行您想要的大部分操作,但 description 不会通过此cmdlet公开。你的" Etc"中可能还有其他一些属性。没有暴露的。要设置其他属性,您需要使用其他一些更新Active Directory的方法。
但是,将其集成到EMS脚本中并不困难。您始终可以在Exchange Server上使用AD管理工具,因此您可以使用 dsmod ,它可以更新不同的属性子集,包括说明:
dsmod user (Get-Mailbox barack.obama).DistinguishedName -desc 'Description'
对象类型(用户)之后的第一个参数是专有名称,您可以使用(Get-Mailbox barack.obama).DistinguishedName
从邮箱中读取该名称。
同样,参数名称与AD属性不匹配,但您可以通过键入dsmod user /?
来获取完整列表。
直接从 New-Mailbox :
New-Mailbox [...] | select -ExpandProperty DistinguishedName | %{dsmod user $_ -desc 'Description'}
其他选择:
PowerShell的ADSI提供商。有点笨拙,因为你不能用一个命令设置多个属性,你必须在最后提交更改,但它确实允许你修改任何可设置的属性。这是一个例子:
$user = [adsi]("LDAP://" + (Get-User barack.obama).DistinguishedName)
$user.telephoneNumber = '202-456-1111'
$user.streetAddress = '1600 Pennsylvania Avenue NW'
[etc...]
$user.SetInfo()
Set-ADUser cmdlet。这个可以修改你想要设置的任何属性,并且可以在一个命令中设置多个属性,并且可能是最容易使用的,但当然有一个问题:你需要导入ActiveDirectory模块,在Exchange 2010服务器上无法立即使用。