Exchange 2010/2013: Automatic out-of-office note

Users often forget to maintain their out-of-office note in Outlook when they are on vacation, for example. A possible solution would be to automatically enter the out-of-office note if a central calendar is maintained that users invite when they are on vacation.

I have created a small script that queries a calendar via EWS and creates a corresponding note if the absence note is not set. You need the EWS Managed API for the script:

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

and a resource mailbox (for example with the name "vacation calendar"). The script can simply be run every morning at 06:00 using task scheduling.

The user who executes the script requires the appropriate rights to create absence notes, as well as the following rights on the calendar of the absence calendar:

Out of office note

The users must then invite the vacation calendar as a resource to their appointment entry in Outlook. Here is the script.

#————————————————————————————–
# Create automated out-of-office messages
# www.frankysweb.de
#
# by Frank Zöchling
# Version 0.1
#
#————————————————————————————–

$mailboxName = "urlaub@frankysweb.de"

#EWS Establish connection

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)

#Get calendar data

$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)

#Process calendar and activate OOF

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

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

if ($status -match "Disabled")
{

# Enter text for the external message here:
$txtextern = "

<html>
<body>
Ladies and Gentlemen, <br>
I am currently out of the office. You can reach me again as usual from the end of the 1TP4 vacation. <br>
With kind regards, <br>
$name
</body>
</html>


#Here Enter text for the internal message:
$txtintern = "

<html>
<body>
Hello colleagues, I am on vacation and will be back at the end of my 1TP4 vacation. <br>
$name
</body>
</html>

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

7 thoughts on “Exchange 2010/2013: Automatische Abwesenheitsnotiz”

  1. Servus Frank.

    Ich finde die Idee hinter dem Skript großartig und würde dieses gerne auf einer Exchange 2016 und 2019 Umgebung einsetzten. Hast Du dazu schon Erfahrungen gesammelt?

    Wäre es nicht auch eine toll, wenn auch gleich die Abwesenheitsnotiz der Abwesenheit entsprechend angepasst sein würde. In dieser könnte die auf dem Termin gelesene Dauer des Termins als Dauer auch für die Abwesenheitsnotiz verwenden werden. Im Grunde suche ich schon lange nach einer Lösung die Abwesenheitsnotiz über die gesetzten Termine in Abwesenheit zu automatisieren. Warum noch eine Abwesenheitsnotiz, wenn diese über die Abfrage des Kalenderstatus automatisch erstellt sein könnte.

    Bisher habe ich noch keinen Entwickler gefunden, der diese Idee so anfing zu verfolgen wie Du.

    Reply
  2. Kann ich irgendwie die Abwesenheitsmeldung ausschalten? Ich weiss ist ein bisschen doof was ich gerade schreibe.

    Aber bei uns sind jetzt zwei Ressourcen-Kalender Stellvertreterinnen in den Ferien. Jedes mal wenn ein Benutzer „Neue Besprechungstermin“ mit dem Ressourcen Kalender erstellt bekommt die Abwesenheitsmeldung von unseren zwei Stellvertreterinnen.

    Ist das so oder kann man dies irgendwie deaktivieren?

    MFG
    Selcuk

    Reply
  3. Heutzutage gewinnt die Disziplin eSports an Popularität.
    Es ist auf der ganzen Welt populär geworden, Wetten zu platzieren
    für eSport-Ereignisse. Jetzt gibt es Buchmacherfirmen auf der Welt, die rate mal, welche
    Ereignisse während des Spiels stattfinden werden und wenn deine Prognose erfolgreich ist,
    kannst du Geld bekommen. Heute möchte ich Ihnen die GG BET-Wettfirma empfehlen, die hohe Gewinnchancen und eine sehr breite Palette an Veranstaltungen bietet.
    Wenn Sie an meinem Vorschlag interessiert sind, können Sie dies auf der Website
    überprüfen.

    Reply
  4. Hallo Frank,

    ich habe Deine Demo-Konfig Server 2012R2 als DC/Exchange 2013 hinter Sophos UTM mit ADSL mit allem Drum und Dran am laufen. Einzig die automatischen Antworten aus Outlook (2016 Professional) heraus wollen nicht funktionieren. Es wird immer mit der Meldung „Ihre Einstellungen für automatische Anwoten können nicht angezeigt werdden, da der Server zurzeit nicht verfügbar ist. Versuchen…“ Autodiscover funktioniert prächtig. Hast Du einen Hinweis woran das liegen könnte?

    Viele Grüße
    Dominik

    Reply
  5. Hi,
    irgendwie ist bei mir entweder der Wurm drin, oder es hat sich was geändert durch SP und Updates.
    Beim ausführen kommt diese Fehlermeldung:

    Get-MailboxAutoReplyConfiguration: Die Benennung „Get-MailboxAutoReplyConfiguration“ wurde nicht als Name eines Cmdlet …. erkannt.

    Die exakte Stelle ist hier:

    $status = Get-MailboxAutoReplyConfiguration -Identity $mail
    Fehlerdetail: Object not Found

    Reply

Leave a Comment