0

我需要导出一些 PST。问题是,当我使用我的 foreach-object 一个一个地导出每个 PST 时,它们都被放入队列中。但是另一个程序应该同时使用 PST 工作。

dir | foreach-object {
$var = $_
New-MailboxExportRequest -Mailbox $var -Filepath "\\******\******tmp\pst\$var.pst"
}

我不希望我的请求被排队,我希望在开始另一个请求之前完成它们。例如,如果第一个请求提取,我希望它在放入队列pst1之前被完全提取。pst2有没有办法做到这一点 ?

4

2 回答 2

1

您无法更改队列行为,但可以强制交换服务器每次仅处理 1 pst

为此,您需要编辑MSExchangeMailboxReplication.exe.config位于以下位置的文件:

<Exchange Installation Path>\Program Files\Microsoft\Exchange Server\V14\Bin

MaxActiveMovesPerSourceMDB - Default is 5 - Change it to 1
MaxActiveMovesPerTargetMDB - Default is 2 - Change it to 1

您可能还需要更改这些设置:

MaxActiveMovesPerTargetServer
MaxActiveMovesPerSourceServer

当然,如果您只想暂停 foreach 循环,您可以使用 while 语句(如 Oggew 建议的那样)来确保在处理下一个导出之前完成上一个作业

于 2015-12-18T10:38:21.777 回答
0

在传递 New-MailboxExportRequest(在 foreach 循环内)后,您可以添加类似的内容。如果导出状态等于“Queued”或“inprogress”,脚本将休眠 15 秒,然后再次检查。如果值将状态更改为已完成,它将在下一个 New-MailboxExportRequest 中传递。

while ((Get-MailboxExportRequest -Mailbox $var | Where {$_.Status -eq "Queued" -or $_.Status -eq "InProgress"}))
{
    sleep 15
}
于 2015-12-18T12:02:14.653 回答