我有以下代码来执行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();
}
}
}
答案 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时保持更新。