Esporta le cassette postali di Exchange da un determinato database di Exchange e da un particolare intervallo di date con PowerShell in file PST con nomi univoci
- Voglio che lo script esporti la cassetta postale solo da un database specifico e non da tutti i database. Ho provato "-Database Databasename" nello script ma mi dà l'errore.
- Lo script dovrebbe esportare tutte le cassette postali dal database sopra menzionato per ogni mese. Di 'Se esegui questo script il 9 dicembre 2015, dovrebbe esportare dal 9 novembre al 9 dicembre 2015. Le date devono essere cambiate automaticamente in base alla data di compilazione.
- La parte inferiore dello script non verrà eseguita dove inizia ExportRequest.
Per la domanda n. 1. Sembra che tu debba solo inserire iGet-Mailbox -Database $ExchangeDB
comandi e poi reindirizzarlo al resto della logica, ecc. Qui sarebbe dove impostare una variabile$ExchangeDB
e impostarla sul nome del database Exchange. Per qualche motivo devi impostare questo comando come variabile e quindi reindirizzarlo o c'è qualche problema con il pipelining simultaneo, ecc.
Per la domanda n. 2. Sembra che la variabile di dati non vada bene con il-ContentFilter
parametro con la stringa di data per qualche motivo, ma lo fa se metti la data meno i giorni in una variabile e la concateni come parte di un comando e poi usi quel comando quando viene eseguito.
Per la domanda n. 3. Sembra che David abbia risposto a questa domanda e potrebbe trattarsi solo di un errore di battitura per questa parte in cui si verificano problemi. Altrimenti, sentiti libero di testare con questa sintassi nel tuo ciclo per vedere quali risultati ottieni poiché non penso che tu abbia bisogno delle-Mailbox $Export
parti nel comando:
Get-MailboxExportRequest -resultsize "unlimited" -Status Completed | Remove-MailboxExportRequest -confirm:$false
PUNTI DI NOTA SCRITTA
- Una variabile di data impostata con il numero di giorni da sottrarre dalla data corrente
$FromDate = (Get-Date).AddDays(-30).ToString("MM/dd/yyyy")
poiché otterrai i dati da quella data alla data corrente.
- Il
Get-Mailbox -Database $ExchangeDB
comando deve essere impostato come variabile e quindi quella variabile reindirizzata alle altre parti della $DynCMD
variabile [comando dinamico] o c'è un problema con il pipelining simultaneo.
- Usa ENTRAMBE
Received -ge
e Sent -ge
con -or
invece che -and
con il -ContentFilter
parametro: questo ti assicura di ottenere sia dalla data di ricezione che da quella inviata per gli articoli di posta elettronica in entrambe le direzioni.
- Questo si è trasformato in un bel compito per me, quindi ho finito per farlo in modo da creare dinamicamente uno script PowerShell con tutte le variabili applicabili, ecc. Impostato e quindi eseguire quello script in seguito. Lo script viene inserito nella
%temp%
posizione della variabile ambientale del sistema operativo Windows e, se esiste prima dell'esecuzione, lo elimina e quindi lo crea.
Nota sul problema
(Ho pensato che Invoke-Command
avrebbe funzionato, ma ho esaurito il tempo, quindi è stato più facile e molto più tempestivo per me eseguire il piping di tutto su uno script di PowerShell con tutte le variabili applicabili impostate in base ai criteri ed eseguirlo in seguito. Invoke-Command
Problemi con le variabili concatenato ad altre variabili e creato comandi dinamici, quindi questo è stato semplice e confermato per funzionare come previsto per risolvere i tuoi problemi, diverso dal n. 3, che non sono ancora sicuro al 100% del problema esattamente lì, quindi assumendo l'errore di battitura come suggerito da David a meno che la sintassi della domanda n. 3. fornita non sia risolta.)
POWERSHELL EXAMPLE SCRIPT (PIPELINE LOOP)
(Esportare tutte le cassette postali di Exchange da un determinato DB di Exchange in una condivisione file in file PST con il nome file che è il nome di collegamento dell'account della cassetta postale)
NOTA: sarà necessario modificare due variabili in questo script per indicare a quale ambiente è configurato il nome del database Exchange [ e il percorso UNC in cui devono essere esportati i file PST [ ], quindi è necessario modificare tali due variabili. Una volta modificati, esegui dalla finestra della console di comando di PowerShell di Exchange Server, che è il modo in cui l'ho testato e confermato che ha funzionato come previsto.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"
SCRIPT DI ESEMPI DI POWERSHELL (FOROACH 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"
Serigrafia Exchange Management Console e PowerShell Console
Prova
Di seguito è riportato ciò che è possibile incollare nella console di gestione di PowerShell di Exchange per creare dinamicamente lo script PowerShell temporaneo di Windows per esecuzione (secondo i criteri di conformità della conformità). Una volta eseguito in Exchange PowerShell Management Shell, su Exchange Server ma non su PS, vai su Start
-> Run
-> e digita %Temp%
e premi Enter.
Da lì vedi se il PS1
file viene creato con nome TempMBExport.ps1
e aprilo con Blocco note e osserva la logica. Guarda cosa succede se copi ciò che è nello script nella console di gestione di PowerShell di Exchange e premi Enter.
Non sono sicuro se c'è un problema con questo non andare nella cartella della variabile ambientale Temp di Windows se il file non esiste o la console PS non ha accesso per eseguirlo da lì o se la tua versione di Exchange non piace una di questi comandi, quindi inizia con questo e vediamo cosa succede per risolvere i problemi.
Questo script di seguito esclude la & "$TempPSScript"
parte in modo che NON esegua lo %temp%\TempMBExport.ps1
script creato in modo dinamico e complimentato , confermando così che si trova nella posizione e se questa logica verrà eseguita nella console di gestione di Exchange PS è un buon passo successivo per capire il problema.
È difficile risolvere i problemi per iscritto senza accesso o supporto remoto, quindi sono un po 'limitato qui e devo purtroppo specularne alcuni. Non sono sicuro di quali ulteriori opzioni avresti, ma quelle sono alcune considerazioni rapide.
$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"
INFINE
Quando eseguo il PS come ho detto sopra e lo apro con il blocco note solo per vedere la logica, lo costruisce in questo formato con questo sintassi, quindi forse prova a eseguirlo in Exchange PS Management Shell e vedi quali risultati ottieni. Se funziona in questo modo, il problema ha a che fare con l'esecuzione dello script ma non si ottengono errori, ma forse questo farà luce anche sull'argomento.
$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"}