0

我希望通过从 C# 运行 Powershell 命令在 Microsoft Online 的 GAL 中创建多个邮件联系人(外部联系人)。下面的代码可以运行,但速度很慢,运行 400 个邮件联系人大约需要 15-20 分钟。

foreach(EmailAdressVM emailAddressVM in emailList.emailAddresses1)
{
    //Create New MailContact.
    Pipeline pplNewMailContact = runspace.CreatePipeline();

    Command cmdNewMailContact = new Command("New-MailContact");
    cmdNewMailContact.Parameters.Add("Name", emailAddressVM.sExternalEmailAddress);
    cmdNewMailContact.Parameters.Add("Displayname", emailAddressVM.sFullName.Trim());
    cmdNewMailContact.Parameters.Add("Lastname", emailAddressVM.sLastName.Trim());
    cmdNewMailContact.Parameters.Add("Firstname", emailAddressVM.sFirstName.Trim());
    cmdNewMailContact.Parameters.Add("ExternalEmailAddress", emailAddressVM.sExternalEmailAddress.Trim());

    pplNewMailContact.Commands.Add(cmdNewMailContact);
    pplNewMailContact.Invoke();
    pplNewMailContact.Stop();
    pplNewMailContact.Dispose();
}

我猜这很慢,因为我为每个添加的新邮件联系人创建了一个新管道,并且自从运行以来必须有一种更有效的方式来执行此操作......

import-csv <filename> | ForEach {
    new-mailcontact -name $_.emailaddress -displayname $_.FullName -lastname $_.lastname -firstname $_.firstname -externalemailaddress $_.emailaddress -alias $_.alias
}

...快得多。

经过数小时的网络搜索后,我发现了一些参考资料,您可以在从 C# 运行 Powershell 命令时执行类似于使用 CSV 的操作,即将值列表(或数组)发送到命令(在本例中为“new-邮件联系人”命令)。但是,我还没有找到任何关于如何向命令发送多个值的好例子,我需要向“ new-邮件联系人”命令。

是否可以以与“import-csv”命令(使用常规 powershell 时)类似的方式发送列表(或数组),这会更快,还是有更好的方法?如果我使用 Powershell 3 而不是 1(就像我现在使用的那样),我会获得更好的性能吗?

请提供工作示例代码我 C#!

请注意,我无法将 CSV 文件保存到磁盘并从 CMD 执行 powershell,因为我没有对磁盘的写入权限,并且我认为我不能远程运行整个脚本(因为远程脚本可能在 Exchange Online 上被禁用)。

4

1 回答 1

0

我认为最大的原因是因为对于每个地址,您都在创建一个新的 Powershell 实例,并且您不是多线程的。

您的代码从上面看起来像这样:

Foreach email address{
    Declare a new Powershell process
    Add attributes to call later
    Start Powershell and pipe stuff in
    Close Powershell instance
}

我认为您最好创建一次 Powershell 实例/管道,然后将每个对象发送到其中。更多沿线:

Create PS Pipe
    Foreach email address{
     PS.SendArguments(Email, Name, DN, etc.);
     }

我现在还没有让某些东西工作或测试的环境,所以希望这至少能给你提供你需要的大部分东西......

于 2013-04-25T00:49:56.063 回答