martedì 16 luglio 2019

Uno script per esportare l'ultimo mese della cassetta postale in archivio .PST, con Powershell - direttamente dal server Exchange con Management Shell


Buongiorno a tutti e  benvenuti ad un altro articolo del mio blog.
Oggi, riagganciandomi all’articolo precedente di Giugno, sul metodo di esportare una cassetta postale dal server con new-mailboxexportrequest, voglio fornirvi uno script bello e pronto per schedulare l’archiviazione del mese precedente alla data di esecuzione.
Ovviamente, poi, potete modificarlo per ampliare o restringere il periodo, accettare le date di inizio e di fine dai parametri…. …e chi più ne ha, più ne metta.

Bando alle ciance, dunque: ecco lo script, prontissimo per essere messo in un ps1 e lanciato a piacimento, serialmente...



Param(
    [parameter(Mandatory=$true, HelpMessage="indirizzo principale della mailbox da archiviare")]
    [string]$address,
    [parameter(Mandatory=$true, HelpMessage="indica il percorso DI RETE dove salvare il PST (verrà appesa una sottocartella con l'anno)")]
    [string]$baseP
)
import-module activeDirectory
if ( (Get-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction SilentlyContinue) -eq $null ){
    add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010
}

# check di esistenza mailbox
if (-not ($mb=Get-mailbox $address -ErrorAction silentlycontinue)) {
write-host "la casella specificata non esiste"
exit
}

$a=get-date
# ottengo il primo giorno del mese precedente
$b=get-date(""+($a.AddMonths(-1)).Month+"/"+$a.Year)
$nomeMese=$b.Month | %{(Get-Culture).DateTimeFormat.GetMonthName($_)}
# ottengo il primo giorno del mese corrente
$c=get-date(""+$a.Month+"/"+$a.Year)

if (-not(test-path -PathType Container ($baseP+"\"+$b.Year))){
    New-Item -ItemType Directory -Force -Path ($baseP+"\"+$b.Year)
}
$path = $baseP+"\"+$b.Year+"\"+($mb.Name+"_"+$nomeMese+"-"+$b.Year)+".pst"

new-mailboxExportRequest $mb -FilePath $path -ContentFilter {(received -gt $b) -and (received -lt $c)} -Name ($mb.Name+"--"+$nomeMese+$b.Year)




Ma cosa fa questo bellissimo script?
Ecco qui in sostanza:


Param(
    [parameter(Mandatory=$true, HelpMessage="indirizzo principale della mailbox da archiviare")]
    [string]$address,
    [parameter(Mandatory=$true, HelpMessage="indica il percorso DI RETE dove salvare il PST (verrà appesa una sottocartella con l'anno)")]
    [string]$baseP
)

Accetta i parametri necessari (indirizzo di posta della cassetta postale e percorso di base dove archiviare il PST (attenzione che l’account del SERVER deve avere accesso alla cartella di destinazione. Vedere il precedente articolo per spiegazioni).




import-module activeDirectory
if ( (Get-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction SilentlyContinue) -eq $null ){
    add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010
}

Importano sia il modulo di amministrazione di AD che la snap-in di Exchange, qual’ora non fosse stata già importata.




# check di esistenza mailbox
if (-not ($mb=Get-mailbox $address -ErrorAction silentlycontinue)) {
write-host "la casella specificata non esiste"
exit
}

Controlla che la mailbox esista effettivamente (e quindi anche che l’indirizzo inserito non sia di un gruppo di distribuzione o di una public folder…)




$a=get-date
# ottengo il primo giorno del mese precedente
$b=get-date(""+($a.AddMonths(-1)).Month+"/"+$a.Year)
$nomeMese=$b.Month | %{(Get-Culture).DateTimeFormat.GetMonthName($_)}
# ottengo il primo giorno del mese corrente
$c=get-date(""+$a.Month+"/"+$a.Year)

Un po’ di operazioni sulle date…




if (-not(test-path -PathType Container ($baseP+"\"+$b.Year))){
    New-Item -ItemType Directory -Force -Path ($baseP+"\"+$b.Year)
}
$path = $baseP+"\"+$b.Year+"\"+($mb.Name+"_"+$nomeMese+"-"+$b.Year)+".pst"

new-mailboxExportRequest $mb -FilePath $path -ContentFilter {(received -gt $b) -and (received -lt $c)} -Name ($mb.Name+"--"+$nomeMese+$b.Year)

La parte finale ed efficace dello script:
  1. Se non esiste la cartella nel percorso di destinazione, la crea.
  2. Definisce il percorso e il nome file, concatenando:  _-.pst
  3. Lancia la richiesta di esportazione con il filtro sulle date, assegnando un nome leggibile al JOB (così poi nell’elenco delle request di esportazione, si riesce a capirci qualcosa (vedere sempre l’articolo precedente).



Beh, che dire: spero di aver aiutato qualche sysadmin e di aver stuzzicato la vostra fantasia.
Vi saluto e…

Happy Scripting a tutti!



Nessun commento:

Posta un commento

I commenti sono soggetti a moderazione, prima di essere pubblicati.

Qualsiasi contenuto illecito, immorale o che io ritenga (arbitrariamente) offensivo od inappropriato, verrà cancellato.