Website-Icon Frankys Web

Exchange 2010/2013: Automatische Abwesenheitsnotiz

Oft vergessen Benutzer Ihre Abwesenheitsnotiz in Outlook zu pflegen wenn Sie zum Beispiel im Urlaub sind, eine mögliche Lösung wäre das automatische Eintragen der Abwesenheitsnotiz, wenn ein zentraler Kalender gepflegt wird, den Benutzer einladen wenn Sie im Urlaub sind.

Ich habe dazu ein kleines Script erstellt, welches einen Kalender via EWS abfragt und bei nicht gesetzter Abwesenheitsnotiz eine Entsprechende Notiz erstellt. Für das Script braucht Ihr die EWS Managed API:

http://www.microsoft.com/en-us/download/details.aspx?id=35371&WT.mc_id=rss_alldownloads_all

und ein Resourcenpostfach (zum Beispiel mit dem Namen “Urlaubskalender”). Das Script kann einfach per Aufgabenplanung jeden Morgen um 06:00 Uhr laufen.

Der Benutzer der das Script ausführt benötigt entsprechende Rechte um Abwesenheitsnotizen zu erstellen, sowie die folgenden Rechte auf dem Kalender des Abwesenheitskalenders:

Die Benutzer müssen dann den Urlaubskalender als Resource zu Ihrem Termineintrag im Outlook einladen. Hier das Script.

#————————————————————————————–
# Abwesenheitsnachrichten automatisiert erstellen
# www.frankysweb.de
#
# by Frank Zöchling
# Version 0.1
#
#————————————————————————————–

$mailboxName = „urlaub@frankysweb.de“

#EWS Verbindung herstellen

Add-Type -Path „C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll“
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService($version)
$service.UseDefaultCredentials = $true
$service.AutodiscoverUrl($mailboxName)

#Kalenderdaten holen

$Propset = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar, $mailboxName)
$calendarFolder = [Microsoft.Exchange.WebServices.Data.calendarFolder]::Bind($service, $folderid)
$calendarView = new-object Microsoft.Exchange.WebServices.Data.CalendarView([System.DateTime]::Now, [System.DateTime]::Now.AddDays(0))
$Calendarview.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet($Propset)
$calendarView.MaxItemsReturned = 200;
$resultlist = $calendarFolder.FindAppointments($calendarView)
$resultlist.load($Propset)

#Kalender verarbeiten und OOF aktivieren

foreach ($result in $resultlist)
{
$person = $result.Organizer
$mail = $person.Address
$name = $person.Name
$urlaubstart = $result.Start
$urlaubende = $result.End
$start = $urlaubstart
$ende = $urlaubende
$urlaubende = $urlaubende.AddDays(1)
$urlaubende = $urlaubende  | get-date -Format dd.MM.yyyy
$urlaubstart = $urlaubstart | get-date -Format dd.MM.yyyy

$status = Get-MailboxAutoReplyConfiguration -Identity $mail
$status = $status.AutoReplyState

if ($status -match „Disabled“)
{

# Hier Text für die externe Nachricht eingeben:
$txtextern = “

<html>
<body>
Sehr geehrte Damen und Herren, <br>
ich bin zur Zeit nicht im Büro. Sie können mich ab dem $urlaubende wieder wie gewohnt erreichen. <br>
Mit freundlichen Gruessen, <br>
$name
</body>
</html>


#Hier Text für die interne Nachricht eingeben:
$txtintern = “

<html>
<body>
Hallo Kollegen, ich bin im Urlaub und am $urlaubende wieder da. <br>
$name
</body>
</html>

$autoreply = Set-MailboxAutoReplyConfiguration -Identity $mail -StartTime $start -EndTime $ende -AutoReplyState Scheduled -ExternalMessage $txtextern -InternalMessage $txtintern
}
}

Die mobile Version verlassen