“New-MailboxExportRequest”

时间:2016-09-28 20:01:33

标签: powershell exchange-server-2010

我尝试创建一个脚本,可以将用户的邮箱远程导出到PST(Exchange Server 2010控制台安装在我们正在运行此服务器的服务器上,以及模块正确加载)。它是使用脚本完成的,因此我们的L2管理员不必手动执行任务。这是MWE。

$UserID = Read-Host "Enter username"
$PstDestination = "\\ExServer\Share\$UserID.pst"
$Date = Get-Date -Format "yyyyMMddhhmmss"
$ExportName = "$UserID" + "$Date"
try { 
New-MailboxExportRequest -Mailbox $UserID -FilePath $PstDestination -Name $ExportName -ErrorAction Stop -WarningAction SilentlyContinue | Out-Null
# Loop through the process to track its status and write progress
do {
$Percentage = (Get-MailboxExportRequest -Name $ExportName | Get-MailboxExportRequestStatistics).PercentComplete
Write-Progress "Mailbox export is in progress." -Status "Export $Percentage% complete" -PercentComplete "$Percentage"
}
while ($Percentage -ne 100)
Write-Output "$UserID`'s mailbox has been successfully exported. The archive can be found at $PstDestination."
}
catch {
Write-Output "There was an error exporting the mailbox. The process was aborted."
}

问题是,一旦我们启动导出,任务就会得到Queued。有时,导出仍然排队很长时间,并且脚本当前无法确定任务何时开始,何时开始,无法正确显示进度。导出发生在后台,但脚本仍然卡在那里。因此,导出后的任何内容都不会被执行,然后整个过程必须手动完成。

请建议一种方法来解决这个问题?

我尝试添加等待计时器,然后检查导出是否已开始。它没有像预期的那样完成工作。

1 个答案:

答案 0 :(得分:1)

两件事。第一个更多是关于在do / while循环中使用unnesacary请求进行性能/锤击Exchange。必须使用Start-Sleep -Seconds 1(或任何其他有意义的延迟,具体取决于邮箱大小)。

第二:不要等待工作开始,而是自己恢复:

if ($request.Status -eq 'Queued') {
    $request | Resume-MailboxExportRequest
}