Exportieren Sie Exchange-Postfächer aus einer bestimmten Exchange-Datenbank und aus einem bestimmten Datumsbereich mit PowerShell in PST-Dateien mit eindeutigen Namen
- Ich möchte, dass das Skript Postfach nur aus einer bestimmten Datenbank und nicht aus allen Datenbanken exportiert. Ich habe "-Datenbank-Datenbankname" im Skript versucht, aber es wird ein Fehler angezeigt.
- Das Skript sollte für jeden Monat alle Postfächer aus der oben genannten Datenbank exportieren. Wenn das Skript am 9. Dezember 2015 ausgeführt wird, sollte es vom 9. November bis zum 9. Dezember 2015 exportiert werden. Die Datumsangaben müssen sich je nach Erstellungsdatum automatisch ändern.
- Der untere Teil des Skripts wird nicht dort ausgeführt, wo ExportRequest beginnt.
Für Frage Nr. 1. Anscheinend müssen Sie nur dieGet-Mailbox -Database $ExchangeDB
Befehle eingeben und diese dann an den Rest der Logik weiterleiten usw. In diesem Fall müssen Sie eine Variable$ExchangeDB
festlegen und diese auf den Namen der Exchange-Datenbank setzen. Aus irgendeinem Grund müssen Sie diesen Befehl als Variable festlegen und dann weiterleiten, oder es gibt Probleme mit dem gleichzeitigen Pipelining usw.
Für Frage Nr. 2. Es scheint, dass die-ContentFilter
Datenvariable aus irgendeinem Grundnicht gut mit demParameter mit der Datumszeichenfolgeübereinstimmt.Dies ist jedoch der Fall, wenn Sie das Datum minus den Tagen in eine Variable setzen und dieses als Teil eines Befehls verketten und dann diesen Befehl verwenden wenn es ausgeführt wird
Für Frage 3. Es hat den Anschein, als hätte David darauf geantwortet, und es könnte nur ein Tippfehler für diesen Teil sein, wenn Sie Probleme haben. Andernfalls testen Sie diese Syntax in Ihrer Schleife, um zu sehen, welche Ergebnisse Sie erhalten, da ich nicht glaube, dass Sie die-Mailbox $Export
Teile im Befehlbenötigen:
Get-MailboxExportRequest -resultsize "unlimited" -Status Completed | Remove-MailboxExportRequest -confirm:$false
HINWEISPUNKTE
- Eine Datumsvariable mit der Anzahl der Tage, die vom aktuellen Datum abgezogen werden soll,
$FromDate = (Get-Date).AddDays(-30).ToString("MM/dd/yyyy")
da Sie die Daten von diesem Datum bis zum aktuellen Datum erhalten. - Der
Get-Mailbox -Database $ExchangeDB
Befehl muss als Variable festgelegt und dann an die anderen Teile der$DynCMD
Variablen [dynamischer Befehl] geleitet werden. Andernfalls tritt ein Problem mit dem gleichzeitigen Pipelining auf. - Verwenden Sie BEIDE
Received -ge
undSent -ge
mit-or
statt-and
mit dem-ContentFilter
Parameter. Dadurch wird sichergestellt, dass Sie sowohl das Empfangs- als auch das Sendedatum für E-Mail-Elemente in beide Richtungen erhalten. - Dies wurde für mich zu einer ziemlichen Aufgabe, also habe ich es am Ende so gemacht, dass es ein PowerShell-Skript mit allen anwendbaren Variablen usw. dynamisch erstellt und dieses Skript anschließend ausführt. Das Skript wird im
%temp%
Speicherort der Windows-Umgebungsvariablen abgelegt. Wenn es vor der Ausführung vorhanden ist, wird es gelöscht und dann erstellt.
Ausgabehinweis
(Ich dachte, das Invoke-Command
würde funktionieren, aber ich hatte keine Zeit mehr, daher war es einfacher und viel zeitiger, alles an ein PowerShell-Skript mit allen anwendbaren Variablen zu leiten, die gemäß den Kriterien festgelegt wurden, und es anschließend auszuführen. Das Invoke-Command
hat Probleme mit Variablen Verkettet mit anderen Variablen und integrierten dynamischen Befehlen, so war dies einfach und erwies sich als erwartet, um Ihre Probleme zu lösen, mit Ausnahme von # 3, wobei ich mir immer noch nicht hundertprozentig sicher bin, dass das Problem genau da ist es sei denn, die von mir zur Verfügung gestellte Syntax für Frage Nr. 3 wurde aufgelöst .)
POWERSHELL BEISPIELSCHRIFT (PIPELINE LOOP)
(Exportieren Sie alle Exchange-Postfächer aus einer bestimmten Exchange-Datenbank in eine Dateifreigabe in PST-Dateien, wobei der Dateiname der Aliasname des Postfachkontos ist.)
ANMERKUNG: Sie müssen zwei Variablen in diesem Skript ändern, um darauf hinzuweisen, was in Ihrer Umgebung mit dem Exchange-DB-Namen [ und dem UNC-Pfad, unter dem die PST-Dateien exportiert werden sollen ] [ ] konfiguriert ist, sodass diese beiden Variablen geändert werden müssen. Sobald diese geändert wurden, führen Sie das Fenster der Exchange Server PowerShell-Befehlskonsole aus. Ich habe es getestet und bestätigt, dass es wie erwartet funktioniert.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 BEISPIELSCHRIFT (FOREACH LOOP)
$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"
Bildschirmdruck Exchange Management Console und PowerShell Console
Testlauf
Nachfolgend finden Sie die Elemente, die Sie in die Exchange PowerShell-Verwaltungskonsole einfügen können, um das temporäre Windows Power-PowerShell-Skript pro Lauf dynamisch zu erstellen (gemäß den Kriterien für die Erfüllung). Sobald dies in der Exchange PowerShell-Verwaltungsshell ausgeführt wird, gehen Sie auf dem Exchange-Server, aber nicht in PS auf Start
-> Run
->, geben Sie ein %Temp%
und drücken Sie Enter.
Von dort aus sehen Sie, ob die PS1
Datei benannt wurde, TempMBExport.ps1
öffnen Sie sie mit Notepad und sehen Sie sich die Logik an. Sehen Sie, was passiert, wenn Sie den Inhalt dieses Skripts in die Exchange PowerShell-Verwaltungskonsole kopieren und drücken Enter.
Ich bin mir nicht sicher, ob ein Problem vorliegt, das nicht in den Windows Temp-Ordner für Umgebungsvariablen wechselt, wenn die Datei nicht vorhanden ist oder die PS-Konsole keinen Zugriff darauf hat, um sie von dort aus auszuführen, oder wenn Ihre Version von Exchange keine Version hat Beginnen Sie also mit diesen Befehlen und schauen wir uns an, was bei der Fehlerbehebung passiert.
Das folgende Skript schließt den & "$TempPSScript"
Teil aus, so dass das dynamisch erstellte und vervollständigte %temp%\TempMBExport.ps1
Skript NICHT ausgeführt wird. Wenn Sie also bestätigen, dass sich das Skript in der Position befindet und ob diese Logik in der Exchange PS-Verwaltungskonsole ausgeführt wird, ist dies ein guter nächster Schritt, um das Problem zu ermitteln.
Es ist schwierig, Fehler ohne Zugriff oder Fernunterstützung schriftlich zu beheben. Daher bin ich hier ein wenig eingeschränkt und muss einige leider spekulieren. Sie sind sich nicht sicher, welche weiteren Optionen Sie haben, aber dies sind einige schnelle Gedanken.
$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"
ZULETZT
Wenn ich das PS-Gerät wie oben erwähnt ausführte und es mit dem Notizblock öffne, um die Logik zu sehen, wird es in diesem Format mit diesem Sytax erstellt. Versuchen Sie es daher in Ihrer Exchange-PS-Verwaltungsshell, um zu sehen, welche Ergebnisse Sie erhalten. Wenn dies auf diese Weise funktioniert, hat das Problem etwas mit der Skriptausführung zu tun, aber es werden keine Fehler angezeigt, aber möglicherweise wird auch das Thema beleuchtet.
$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"}