从c#运行powershell最有效的方式来创建多个邮件联系人在Exchange Online
本文关键字:联系人 Online Exchange 创建 powershell 运行 有效 方式 | 更新日期: 2023-09-27 18:10:42
我希望通过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-mailcontact"命令)。但是,我还没有找到任何关于如何向命令发送多个值的好例子,我需要提供许多值(例如:-name $)。emailAddress -displayname $。FullName等)到"new-mailcontact"命令
是否有可能以类似的方式发送列表(或数组)作为"import-csv"命令(当使用常规powershell时),这会更快,或者有更好的方法?如果我使用Powershell 3而不是1(就像我现在使用的),我会得到更好的性能吗?
请提供c#的工作示例代码!
请注意,我不能将CSV文件保存到磁盘和从CMD执行powershell,因为我没有对磁盘的写访问权限,我不认为我可以远程运行整个脚本(因为远程脚本可能在Exchange Online上被禁用)。
我认为最大的原因是你为每个地址创建一个新的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.);
}
我现在不是在一个环境中得到一些工作或测试,所以希望这给你至少大部分你需要的…