PowerShell在c#中执行Microsoft Exchange 2013命令的速度很慢

本文关键字:命令 速度 2013 Exchange 执行 Microsoft PowerShell | 更新日期: 2023-09-27 18:11:47

我有下面的代码来执行一个交换cmdlet。当命令返回一些输出时,它工作得很快,但如果命令没有输出,它工作得很慢。

例如

Invoke("Get-Mailbox")打印以下输出:

Begin execution at 11:44:43 Finish execution at 11:44:51 Output : Administrator Discovery Search Mailbox Artem Romanchik

执行时间约为8秒(6秒加载exchange snappin + 2秒执行命令)

慢速示例为Invoke("Set-Mailbox -identity tema -MaxSendSize 10MB")

Begin execution at 11:53:34 Finish execution at 11:54:36 Output :

现在是62秒(2秒的命令和60秒的等待)

如何减少第二个示例的执行时间?

调用方法代码

 public void Invoke(string command)
    {
        var config = RunspaceConfiguration.Create();
        PSSnapInException warning;
        config.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Snapin", out warning);
        using(var runspace = RunspaceFactory.CreateRunspace(config))
        {
            runspace.Open();
            using(var _psInstance = new RunspaceInvoke(runspace))
            {
                var psCommand = new PSCommand();
                Console.WriteLine(String.Format("Begin execution at {0}", DateTime.Now.ToLongTimeString()));
                var result = _psInstance.Invoke(command);
                Console.WriteLine(String.Format("Finish execution at {0}", DateTime.Now.ToLongTimeString()));
                var output = "";
                foreach (var line in result)
                {
                    if (line == null)
                        continue;
                    output += "'n" + line.BaseObject.ToString();
                }
                Console.WriteLine(String.Format("Output: {0}", output));
                runspace.Close();
            }
        }
    }

PowerShell在c#中执行Microsoft Exchange 2013命令的速度很慢

Set-Mailbox将接受多个身份参数

From Get-Help Set-Mailbox:

Identity: 
The Identity parameter specifies the mailbox. 
This parameter accepts the following values:
•Alias 
 Example: JPhillips
•Canonical DN 
 Example: Atlanta.Corp.Contoso.Com/Users/JPhillips
•Display Name 
 Example: Jeff Phillips
•Distinguished Name (DN) 
 Example: CN=JPhillips,CN=Users,DC=Atlanta,DC=Corp,DC=contoso,DC=com
•Domain'Account 
 Example: Atlanta'JPhillips
•GUID 
 Example: fb456636-fe7d-4d58-9d15-5af57d0354c2
•Immutable ID 
 Example: fb456636-fe7d-4d58-9d15-5af57d0354c2@contoso.com
•Legacy Exchange DN 
 Example: /o=Contoso/ou=AdministrativeGroup/cn=Recipients/cn=JPhillips
•SMTP Address 
 Example: Jeff.Phillips@contoso.com
•User Principal Name 
 Example: JPhillips@contoso.com

它需要很长时间因为它需要搜索所有的邮箱在每个邮箱中寻找匹配你给它的标识字符串的属性

您可以通过首先使用过滤器执行Get-Mailbox来加快速度,该过滤器可以精确指定用于标识的属性。如果没有找到邮箱,不要尝试进行设置。

除此之外,我认为您最好切换到使用隐式远程处理而不是加载snap。在Exchange服务器上建立一个到其中一个管理会话的PS Session连接,然后使用Invoke-Command在该会话中运行Exchange cmdlet要快得多。它还消除了在运行脚本的地方安装Exchange管理工具的需要,并在每次向Exchange服务器添加服务包或RU时保持更新。