`New-MailboxExportRequest` 的进度条

Prorgess bar for `New-MailboxExportRequest`

我正在尝试创建一个可以将用户邮箱远程导出到 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。有时,导出保持排队很长时间,脚本当前无法确定任务何时开始,何时开始,也无法正确显示进度。导出发生在后台,但脚本仍然停留在那里。所以导出后的任何东西都不会被执行,整个过程必须手动完成。

请建议一种处理方法?

我尝试添加一个等待计时器,然后检查导出是否已经开始。效果不如预期。

两件事。第一个是关于 performance/hammering 与 do/while 循环中的异常请求交换。 Start-Sleep -Seconds 1(或任何其他根据邮箱大小有意义的延迟)在循环内是必须的。

第二:与其等待工作开始,不如自己恢复:

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