Пакетный экспорт почтовых ящиков Exchange 2010 в PST-файлы

У меня есть среда Exchange 2010 с примерно 1000 пользователей в 6 базах данных. У всех включены архивы, которые хранятся в отдельных базах данных.

У меня есть программное обеспечение для резервного копирования, которое получает базу данных, но я хочу дополнить его, выполнив экспорт почтовых ящиков в формате .pst непосредственно из Exchange. Я хочу взять всех пользователей в данной базе данных и экспортировать в .pst. Моя команда выглядит следующим образом:

foreach ($i in (Get-Mailbox -database Accounting)) { 
    New-MailboxExportRequest -Mailbox $i -FilePath "\\server\D$\PSTBackup\test\Accounting\$($i.Alias).pst" -baditemlimit 50 -acceptlargedataloss 
}

Проблема в том, что он экспортирует их все сразу (убивая ресурсы нашего сервера), и половина из них терпит неудачу, потому что слишком много запущено одновременно. Мне нужен сценарий для резервного копирования около 20 почтовых ящиков за раз. Любая помощь приветствуется.


person user2047787    schedule 06.02.2013    source источник


Ответы (1)


По сути, вы захотите создать новую переменную, которая будет содержать результаты Get-Mailbox -database Accounting).

Затем вы можете определить номера пакетов программно, используя процент от количества этой переменной или определенное число.

$myEmailBoxes = Get-Mailbox -database Accounting

$myEmailBoxes.count должно дать вам общее количество почтовых ящиков в списке. Однако это может быть не совсем точный синтаксис для Exchange PowerShell. Во время тестирования вы можете захотеть Echo вывести результаты, чтобы знать, что вы получаете то, что ожидаете.

Для группирования транзакций используйте цикл for вместо for each и установите для него число, которое вы хотите пакетировать.

Это будет выглядеть примерно так:

$allMailboxes = Get-Mailbox -database Adjunct
$batchSize = 2
$currentBatchIndex = 0
$currentBatchMailboxes
# Call the function to start the process
batchMailboxes

function batchMailboxes {
                for (i = $currentBatchIndex; i < $currentBatchIndex + $batchSize; i++)
                {
                                $currentBatchMailboxes += $allMailboxes[i]
                                $currentBatchIndex++
                }

                exportBatchedMailboxes($currentBatchMailboxes)
                $batchStatus = getBatchedMailboxStatus($currentBatchMailboxes)

                if ($batchStatus == false) {
                                #Execute timer to get getBatchedMailboxStatus($currentBatchMailboxes)
                }
                else {
                                if ($currentBatchIndex < $allMailboxes.count - 1) {
                                                batchMailboxes
                                }
                }
}

function exportBatchedMailboxes ($exportMailboxes)
{
                foreach ($i in $exportMailboxes) {
                                New-MailboxExportRequest -Mailbox $i -FilePath "backuplocation\Adjunct\$($i.Alias).pst" -baditemlimit 50 -acceptlargedataloss
                }
}

function getBatchedMailboxStatus ($batch)
{
                # command for checking status needs to go here using a foreach loop
}

Вот полная реализация скрипта, который отлично работает http://blog.bluepegasusinc.com/index.php/batch-export-exchange-2010-mailbox-to-pst/

person BRogers    schedule 06.02.2013
comment
Вышеупомянутое позволит вам проверить состояние текущих пакетных почтовых ящиков, прежде чем переходить к другим. Если они потерпят неудачу, это нормально, потому что вы не хотите останавливать всю резервную копию из-за этого. Это позволяет уменьшить нагрузку на сервер и убедиться, что он не перегружен. - person BRogers; 06.02.2013