簡體   English   中英

從C#運行Powershell最有效的方法來在Exchange Online中創建多個郵件聯系人

[英]Run powershell from c# most efficient way to create multiple mailcontacts in Exchange Online

我希望通過從C#運行Powershell命令在Microsoft Online中的GAL中創建多個mailcontact(外部聯系人)。 下面的代碼可以運行,但是速度很慢,大約需要15-20分鍾才能運行400個郵件聯系人。

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”命令)。 但是,我還沒有找到任何有關如何向命令發送多個值的好示例,並且我需要向“ new-”提供許多值(例如:-name $ .emailAddress -displayname $ .FullName等)。 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.);
     }

我現在不在環境中進行任何工作或測試,因此希望這至少可以為您提供所需的大部分東西...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM