从c#执行Microsoft Exchange 2013命令的PowerShell缓慢

时间:2014-07-07 08:03:47

标签: c# powershell runtime exchange-server

我有以下代码来执行exchange 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秒,命令执行时为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();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

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

来自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来加快速度,该过滤器准确指定您用于身份的属性。如果找不到邮箱,请不要尝试进行设置。

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