Экспорт почтовых ящиков Exchange из определенной базы данных Exchange и из определенного диапазона дат с помощью PowerShell в файлы PST с уникальными именами
- Я хочу, чтобы этот скрипт экспортировал почтовый ящик только из определенной базы данных, а не из всех баз данных. Я пытался "-Database Databasename" в сценарии, но он выдает ошибку.
- Скрипт должен экспортировать все почтовые ящики из вышеупомянутой базы данных за каждый месяц. Скажем, если запустить этот скрипт 9 декабря 2015 года, он должен экспортироваться с 9 ноября по 9 декабря 2015 года. Даты должны изменяться автоматически в соответствии с датой компиляции.
- Нижняя часть скрипта не будет запускаться там, где начинается ExportRequest.
На вопрос № 1. Похоже, вам просто нужно ввестиGet-Mailbox -Database $ExchangeDB
команды, а затем направить их к остальной логике и т. Д. Это будет то место, где вы устанавливаете переменную$ExchangeDB
и присваиваете ей свое имя базы данных Exchange. По какой-то причине вы должны установить эту команду как переменную, а затем передать ее по конвейеру, или есть какая-то проблема с параллельной конвейерной обработкой и т. Д.
На вопрос № 2. Кажется, что переменная данных-ContentFilter
по какой-то причине не очень подходит параметру со строкой даты, но она делает это, если вы помещаете дату минус дни в переменную и объединяете ее как часть команды, а затем используете эту команду когда он будет выполнен.
На вопрос № 3. Похоже, Дэвид, возможно, ответил на это, и это может быть просто опечатка для этой части, где у вас возникли проблемы. В противном случае, не стесняйтесь проверять этот синтаксис в цикле, чтобы увидеть, какие результаты вы получите, так как я не думаю, что вам нужны-Mailbox $Export
части в команде:
Get-MailboxExportRequest -resultsize "unlimited" -Status Completed | Remove-MailboxExportRequest -confirm:$false
ТОЧКИ ЗАПИСИ
- Одна переменная даты, установленная с числом дней, которые нужно вычесть из текущей даты,
$FromDate = (Get-Date).AddDays(-30).ToString("MM/dd/yyyy")
так как вы получите данные с этой даты до текущей даты. - Команда
Get-Mailbox -Database $ExchangeDB
должна быть задана как переменная, а затем эта переменная передана в другие части$DynCMD
переменной [динамическая команда], иначе возникнет проблема с параллельной конвейерной обработкой. - Используйте ОБА
Received -ge
иSent -ge
с,-or
а не-and
с-ContentFilter
параметром - это гарантирует, что вы получите как дату получения, так и дату отправки для элементов электронной почты в обоих направлениях. - Для меня это оказалось довольно сложной задачей, поэтому я просто сделал так, чтобы он динамически создавал сценарий PowerShell со всеми применимыми переменными и т. Д., А затем выполнял этот сценарий впоследствии. Сценарий помещается в расположение
%temp%
переменной среды ОС Windows и, если он существует до его запуска, удаляет его, а затем создает его.
Примечание к выпуску
(Я думал, что Invoke-Command
это сработает, но у меня не хватило времени, поэтому мне было проще и гораздо своевременнее получить все, что нужно, для скрипта PowerShell со всеми применимыми переменными, установленными в соответствии с критериями, и просто выполнить его впоследствии. У Invoke-Command
него есть проблемы с переменными объединены с другими переменными и построены динамические команды, так что это было просто и подтверждено, что сработало так, как и ожидалось, для решения ваших проблем, кроме # 3, который я все еще не на 100% уверен в проблеме, точно так, предполагая опечатку, как предложил Дэвид если синтаксис « Вопрос № 3.», который я предоставил, не разрешается.)
ПРИМЕР ОБОЛОЧКИ СЦЕНАРИЙ (ТРУБОПРОВОДНАЯ ПЕТЛЯ)
(Экспортируйте все почтовые ящики Exchange из определенной базы данных Exchange в общую папку в PST-файлы с именем файла, являющимся псевдонимом учетной записи почтового ящика)
ПРИМЕЧАНИЕ. Вам нужно будет изменить две переменные в этом сценарии, чтобы указать, что ваша среда настроена с именем базы данных Exchange [ и UNC-путем, куда должны экспортироваться файлы PST [ ], поэтому эти две переменные необходимо изменить. После того, как они будут изменены, запустите из окна командной консоли Exchange Server PowerShell, как я и протестировал, и подтвердил, что он работает должным образом.1.
$ExchangeDB = "<Exchange_DB_Name>"
2.
$ExportDir = "\\<ServerName>\<ShareName>\<FolderPath>"
$TempDir = $env:Temp $TempPSScript = "$TempDir\TempMBExport.ps1" $ExchangeDB = "Mail04-Original" $ExportDir = "\\FileServer\Emailbackups\ExportTest\MonthTest2" $FromDate = (Get-Date).AddDays(-30).ToString("MM/dd/yyyy") $DynCMD = '$GetMBCMD | % { $_ | New-MailboxExportRequest -ContentFilter {(Received -ge "' + $FromDate + '") -or (Sent -ge "' + $FromDate + '")} -FilePath "' + $ExportDir + '\$($_.alias).pst"}' If (Test-Path $TempPSScript){ Remove-Item $TempPSScript } '$GetMBCMD = Get-Mailbox -Database ' + $ExchangeDB + '' | Out-File -Append -Force "$TempPSScript" $DynCMD | Out-File -Append -Force "$TempPSScript" & "$TempPSScript"
Сценарий примера POWERSHELL (ИНОСТРАННЫЙ ПЕТЛЯ)
$TempDir = $env:Temp $TempPSScript = "$TempDir\TempMBExport.ps1" $ExchangeDB = "Mail04-Original" $ExportDir = "\\FileServer\Emailbackups\ExportTest\MonthTest2" $FromDate = (Get-Date).AddDays(-30).ToString("MM/dd/yyyy") $DynCMD1 = 'ForEach ($u in (Get-Mailbox -database ' + $ExchangeDB + ')) {' $DynCMD2 = 'New-MailboxExportRequest -ContentFilter {(Received -ge "' + $FromDate + '") -or (Sent -ge "' + $FromDate + '")} -Mailbox $u -FilePath "' + $ExportDir + '\$($u.alias).pst"}' If (Test-Path $TempPSScript){ Remove-Item $TempPSScript } $DynCMD1 | Out-File -Append -Force "$TempPSScript" $DynCMD2 | Out-File -Append -Force "$TempPSScript" & "$TempPSScript"
Консоль управления печатью экрана и консоль PowerShell
Тестовый забег
Ниже приведено, что вы можете вставить в консоль управления Exchange PowerShell, чтобы динамически создавать сценарий временного PowerShell для Windows за один прогон (при соблюдении критериев соответствия). После запуска в командной консоли Exchange PowerShell, на сервере Exchange, но не в PS, перейдите к Start
-> Run
->, введите %Temp%
и нажмите Enter.
Оттуда посмотрите, создан ли PS1
файл с именем, TempMBExport.ps1
откройте его с помощью Блокнота и посмотрите на логику. Посмотрите, что произойдет, если скопировать содержимое этого сценария в консоль управления Exchange PowerShell и нажать Enter.
Я не уверен, есть ли проблема с тем, что это не происходит в папку переменных среды Windows Temp, если файл не существует или консоль PS не имеет доступа для его запуска оттуда, или если ваша версия Exchange не нравится из этих команд, так что начните с этого, и давайте посмотрим, что происходит с устранением неполадок.
Этот скрипт ниже исключает & "$TempPSScript"
часть, поэтому он НЕ выполняет динамически созданный и компилированный %temp%\TempMBExport.ps1
скрипт, поэтому подтверждение того, что он находится в расположении, и будет ли эта логика работать в консоли управления Exchange PS, является хорошим следующим шагом для выяснения проблемы.
Трудно устранить неполадки в письменной форме без доступа или удаленной поддержки, поэтому я немного ограничен в этом и, к сожалению, вынужден спекулировать некоторыми. Не знаю, какие у вас есть варианты, но это несколько быстрых мыслей.
$TempDir = $env:Temp $TempPSScript = "$TempDir\TempMBExport.ps1" $ExchangeDB = "Mail04-Original" $ExportDir = "\\FileServer\Emailbackups\ExportTest\MonthTest2" $FromDate = (Get-Date).AddDays(-30).ToString("MM/dd/yyyy") $DynCMD = '$GetMBCMD | % { $_ | New-MailboxExportRequest -ContentFilter {(Received -ge "' + $FromDate + '") -or (Sent -ge "' + $FromDate + '")} -FilePath "' + $ExportDir + '\$($_.alias).pst"}' If (Test-Path $TempPSScript){ Remove-Item $TempPSScript } '$GetMBCMD = Get-Mailbox -Database ' + $ExchangeDB + '' | Out-File -Append -Force "$TempPSScript" $DynCMD | Out-File -Append -Force "$TempPSScript"
НАКОНЕЦ
Когда я запускаю PS, как я уже говорил выше, и открываю его с помощью блокнота, просто чтобы увидеть логику, он строит его в этом формате с этим синтаксисом, так что, возможно, попробуйте запустить его в командной консоли Exchange PS и посмотреть, какие результаты вы получите. Если это работает таким образом, то проблема связана с выполнением скрипта, но вы не получаете никаких ошибок, но, возможно, это также поможет пролить свет на эту тему.
$GetMBCMD = Get-Mailbox -Database Mail04-Original $GetMBCMD | % { $_ | New-MailboxExportRequest -ContentFilter {(Received -ge "11/12/2015 00:00:00") -or (Sent -ge "11/12/2015 00:00:00")} -FilePath "\\FileServer\Emailbackups\ExportTest\MonthTest2\$($_.alias).pst"}