2016-09-28 6 views
0

Я пытаюсь создать скрипт, который может экспортировать почтовый ящик пользователя в PST удаленно (консоль Exchange Server 2010 установлена ​​на сервере, на котором мы это выполняем, и модуль загружается правильно). Это делается с использованием сценария, поэтому нашим администраторам L2 не нужно вручную выполнять задачу. Вот MWE.Prorgess bar для `New-MailboxExportRequest`

$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

Две вещи. Первый из них посвящен производительности/забиванию Exchange с нестандартными запросами в цикле do/while. Start-Sleep -Seconds 1 (или любая другая задержка, которая имеет смысл в зависимости от размера (я) почтового ящика) внутри цикла является обязательным.

Во-вторых, а не ждать, пока работа, чтобы начать, просто возобновить его самостоятельно:

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