我希望通过从 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 上被禁用)。