Website-Icon .: blog cscholz.io :.

Exchange 2007: PowerShell script zeitgesteuert starten, Report per eMail

Zieht ein User in einen andere Standort um, wird meißt auch sein Postfach mit verschoben. Dies kann man nun entweder händisch machen, oder über die Mangement Console, was relativ unschön ist, da die Sitzung am Server offen bleiben muss.

Schöner wäre es doch, wenn man für das moven der Mailbox einen geplante Task anlegt, der das Postfach oder auch mehrere Zeitgerecht verschiebt und den Admin dann auch noch per eMail über diesen Vorgang informiert.
Um dies nun einzurichten, muss als ersten ein PowerShell script erstellt werden. Diese enden üblicherweise auf .ps1 können aber auch jede andere beliebige Endung tragen. In dieses Script werden dann die auszuführenden Befehle aufgenommen.

Move-Mailbox

Get-Mailbox "Max Mustermann" |Move-Mailbox -TargetDatabase "Exhsrv1StorageGroup 1" -Confirm:$false

Dieser Befehl verschiebt das Postfach von Max Mustermann auf den Exhsrv1 Server in die Speichergruppe StorageGroup 1. Damit dieser Vorgang nicht bestätigt werden muss, wird -Confirm:$false übergeben.

Das Ergebniss muss nun in einer Log-Datei festgehalten werden, die dann später der Admin per eMail bekommt.

Logging aktivieren

Get-Mailbox "Max Mustermann" |Move-Mailbox -TargetDatabase "Exhsrv1StorageGroup 1)" -Confirm:$false  | out-file "C:installscriptsmove_max.mustermann.log" -append

Jenachdem wieviel Sie von den Statusinformationen habe möchte, können Sie diese noch filtern

Get-Mailbox "Max Mustermann" |Move-Mailbox -TargetDatabase "Exhsrv1StorageGroup 1)" -Confirm:$false | select DisplayName,SourceServer,SourceDatabase,TargetServer,TargetDatabase,MailboxSize,StartTime,EndTime,StatusCode,StatusMessage | out-file "C:installscriptsmove_max.mustermann.log" -append

SMTP-Versand über die PowerShell

Da die PowerShell nun selbst keine eMails versenden kann, muss das script dazu ergänzt werde.
(Quelle: http://mspowershell.blogspot.com/…)

$SMTPserver = "127.0.0.1"
$fileattachment = "C:\install\scripts\move_max.mustermann.log"
$from = "postmaster@domain.tld"
$to = "admin@domain.tld"
$subject = "Move-Mailbox Max Mustermann"
$emailbody = "please check the attached file"
$mailer = new-object Net.Mail.SMTPclient($SMTPserver)
$msg = new-object Net.Mail.MailMessage($from, $to, $subject, $emailbody)
$attachment = new-object Net.Mail.Attachment($fileattachment)
$msg.attachments.add($attachment)
$mailer.send($msg)

Einrichtung des geplante Tasks

Nun kann in der Systemsteuerung ein neue geplanter Task hinzugefügt werden der folgenden Befehl ausführt

C:WINDOWSsystem32WindowsPowerShellv1.0powershell.exe -PSConsoleFile "C:Program FilesMicrosoftExchange ServerBinExShell.psc1" -Command " C:installscriptsmove_max.mustermann.ps1

Achten Sie darauf, dass der Task mit den Berechtigungen eines Users ausgeführt wird, der auch Postfächer auf den dafür notwendigen Servern verschieben darf!

Die mobile Version verlassen