IT

Wiederkehrende E-Mail-Abwesenheitsnotiz für Outlook mit PowerShell

Leider gibt es manchen Sonderfall, für den es keine direkten Konfigurationsmöglichkeiten in Outlook oder Exchange gibt. So ist es zwar möglich in Outlook einen Zeitraum für die Dauer einer Abwesenheitsnotiz einzustellen. Aber eine wöchentlich wiederkehrende Abwesenheitsnotiz für einen Mitarbeiter, der nicht alle Tage in der Woche da ist, kann man leider nicht ohne Weiteres festlegen. Insbesondere für Mitarbeiter in Teilzeit oder auch in Kurzarbeit könnte eine solche wöchentliche Abwesenheitsnotiz sinnvoll sein. Wie man das zumindest als Administrator per PowerShell umsetzen kann erfährst du in diesem Artikel.

Wiederkehrende Outlook-Abwesenheitsnotiz

Mit Bordmitteln kann man leider eine solche zeitgesteuerte Abwesenheitsnotiz nicht realisieren. Denn die in Outlook über den Abwesenheitsassistenten eingestellte Abwesenheitsnachricht gilt entweder dauerhaft oder für einen bestimmten Zeitraum. Diese Einstellung übernimmt der Exchange-Server und setzt diese unabhängig von Outlook um. Denn der Computer des betroffenen Mitarbeiters sollte während dessen Abwesenheit im Regelfall ausgeschaltet sein.

Mit den Regeln in Outlook selber ließe sich vielleicht etwas bauen, wodurch nur an bestimmten Tagen eine automatische Antwort-E-Mail versandt wird. Jedoch werden diese Regeln teils von Outlook lokal und nicht unbedingt von dem Exchange-Server umgesetzt. Das würde bedeuten, dass der Computer des betroffenen Benutzers dauerhaft eingeschaltet bleiben muss um die Regel auszuführen. Bei einer kurzen Recherche konnte ich auch keine Möglichkeit finden etwas anderes als eine datumsbezogene Regel zu definieren. Hier wäre also auch etwas selbst gestricktes wie irgendein Plugin oder Skript nötig. Oder der Mitarbeiter müsste als Arbeitsbeschaffungsmaßnahme für einen längeren Zeitraum im Vorfeld Regeln erstellen.

Am einfachsten wäre es natürlich der Benutzer würde einfach jede Woche selbständig den Abwesenheitsassistent einschalten. Aber eventuell wird dies so oft vergessen, sodass man in der IT-Abteilung dann irgendwann die Nachfrage nach einer Lösung bekommt. Manchmal darf man sich dann auch anhören, dass man unfähig ist. Schließlich kann es ja nicht so schwer sein so etwas einszustellen. Zumindest aus der Sicht von Leuten die am Computer gar nichts können 😉

 

Lösung mit PowerShell

Zum Glück gibt es doch kaum etwas, das sich nicht automatisieren lässt. Per PowerShell ist das ganze kein Problem. Mit folgendem Skript lässt sich auf dem Exchange-Server die Abwesenheitsnotiz unabhängig vom Outlook bzw. Computer des Benutzers ein- oder abschalten. Das ganze in Kombination mit der Aufgabenplanung auf dem Exchange-Server löst somit das Problem:

Ich habe mir dafür zwei einzelne Skripte erstellt. Eines zum Einschalten und eines zum Ausschalten. Für das Einschalt-Skript muss nur der Wert „enabled“ hinter dem Punkt „-AutoReply“ eingesetzt werden:

Diese Skripte lässt man dann alternierend durch zwei geplante Aufgaben auf dem Server ausführen. Das Skript zum Einschalten läuft dann beispielsweise donnerstags, wenn der Mitarbeiter nur Montag bis Mittwoch im Unternehmen ist. Das Ausschalt-Skript könnte dann freitags abends ausgeführt werden. Sofern der Mitarbeiter montags wieder im Unternehmen ist und generell am Wochenende keine E-Mails bearbeitet werden.

Die zugestellte Abwesenheitsnachricht wäre dann übrigens die in Outlook durch den Benutzer definierte. Wenn der Benutzer diese irgendwann wegen eines Urlaubs ändert, sollte man dies berücksichtigen oder diesen Text auch per Skript anpassen. Das habe ich aber nicht getestet. Einfacher ist es vermutlich den Benutzer darauf hinzuweisen dass er einen Standardtext für seine wöchentlichen Abwesenheitstage im Assistenten stehen lässt und dies vor und nach seinem Urlaub anpassen muss.

Info: Soweit ich es gelesen habe funktionieren diese „Set-MailboxAutoReplyonfiguration“-Kommandos nicht nur für einen lokalen Exchange-Server, sondern auch Office365.

Du benötigst gezielte Hilfe bei der Erstellung eines PowerShell-Skriptes oder bei einem anderen Projekt? Schreib mir gerne eine E-Mail mit deinem Anliegen an tolan@devilatwork.de für ein individuelles Angebot.

 

Funktionsweise

Durch den Punkt wird das angegebene Powershell-Skript nicht nur aufgerufen, sondern in das aktuelle Skript eingebunden. Das heißt die Funktionen etc. aus dem Skript stehen wie Module im eigenen Skript zur Verfügung.

Um den Exchange zu kontrollieren braucht man die Exchange-Management-Konsole. In diesem Fall aus dem Ordner „C:\Program Files\Microsoft\Exchange Server\V14\bin\“ für Exchange 2010.

 

Durch diesen Befehl verbindet man sich an den lokalen Exchange-Server.

 

Durch den letzten Befehl lässt sich für beliebige Domänenbenutzer die Abwesenheitsnotiz aktivieren oder deaktivieren. Zum Einschalten muss nur „disabled“ in „enabled“ geändert werden.

 

 



W E R B U N G

 

Wissenswertes

Mit folgendem Befehl kann man sich die aktuelle Konfiguration der Abwesenheitsnotiz ansehen:

Dabei habe ich mich von den dort angegebenen Start- und Endzeiten irritieren lassen. Der Exchange-Server zeigte diese an, aber diese waren nicht aktiv. Auch in Outlook waren die hinterlegten Zeiten ausgegraut.

Bei einem Gegentest habe ich dann gesehen, dass diese Zeiten immer so angegeben werden, wie sie in Outlook eingestellt sind. Ob der Exchange-Server diese wirklich berücksichtigt entscheidet der „AutoReplyState“:

Bei „Scheduled“ beachtet der Exchange-Server die hinterlegten Zeiten.

„Enabled“ bedeutet, dass die Abwesenheitsnotiz dauerhaft aktiv ist. Die Abwesenheitsnotiz wird also so lange gesendet bis man dan Status wieder auf Disabled setzt.

 

Weitere Probleme

Man muss eigentlich den letzten Stand vor Skriptlauf speichern, falls der Nutzer bereits einen „Schedule“ wegen eines nahenden Urlaubs vorgenommen hat. Ebenfalls passt der Text der Abwesenheitsnachricht dann vermutlich nicht mehr wenn das Skript den Abwesenheitsassistenten frühzeitig aktiviert. Daraus folgt:

  • Der Mitarbeiter muss hier also den Abwesenheitsassistenten wirklich erst kurz vor seinem Urlaub aktivieren, sodass es zu keinen Überschneidungen kommt.
  • Das heißt er dürfte den Abwesenheitsassistenten erst einen Tag vor Beginn des Urlaubs einschalten.
  • Wenn er nahtlos anschließend an seine normalen wöchentlichen Abwesenheitstage im Urlaub ist, muss er diesen Zeitraum mit in seine Abwesenheitszeit einbeziehen. Allerdings tun die meisten Personen so etwas sowieso von sich aus.

Auf jeden Fall sollte man das Ein- oder Ausschalten nicht ausführen wenn der „AutoReplyState“ auf „Scheduled“ steht. Dies könnte man wie folgt umsetzen:

 

Mehrere Benutzer

Wenn man mehrere Benutzer abfrühstücken will, könnte man eine foreach-Schleife nutzen:

 

Mehr Logik und Automatisierung?

Das ganze wirft natürlich wie immer weitere Anforderungen und Probleme auf. Wenn man das Skript eingerichtet hat, dauert es mit Sicherheit nicht allzu lange bis sich die Arbeitstage der Personen ändern.

Natürlich hat man keine Lust alle zwei Wochen einen Arbeitsplan der Teilzeitmitarbeiter überreicht zu bekommen und anhand dieses Plans das Skript immer wieder anzupassen. Man hat neben so einem Blödsinn normalerweise wichtigere Aufgaben, die natürlich keiner sieht.

 

Ideen

Ich habe mir ein paar Gedanken gemacht wie man das lösen könnte. Die Benutzeraccounts irgendwie zu gruppieren und in AD-Gruppen einzuteilen oder mit irgendwelchen Merkmalen im Active Directory zu versehen macht an dieser Stelle auch keinen Sinn. Denn auch dann wird der Administrator am Ende des Tages halt dort alles nachpflegen müssen.

Ein globales Konfigurations-File wo jeder rein schreibt an welchen Tagen die Abwesenheitsnotiz erscheinen soll ist auch keine Lösung. Das ist datenschutztechnisch nicht gut, da in dieser Datei für alle anderen Nutzer ersichtlich wäre wann wer nicht da ist. Man weiß das zwar meistens eh, aber so ist es halt mit dem Datenschutz…

Eine Konfigurationsdatei pro Benutzer die in den Userordnern liegen (z. B. „Abwesenheitstage.ini“) könnte stattdessen die Lösung sein. In diesen könnten die User ihre Abwesenheitstage selber pflegen.

Wenn man es komplett übertreiben möchte könnte man auch noch ein kleines Tool, z. B. in C#, schreiben in welchem die Nutzer die Wochentage mit Checkboxen ein- und ausschalten können oder man macht es direkt über eine Datenbank und ein Web-Frontend 😀

Da ich so etwas beruflich derzeit allerdings nicht benötige, fehlt mir die Muße dazu so etwas umzusetzen. Sollte jemand aber Interesse an einer solchen Lösung haben, kann er mich gerne für ein individuelles Angebot unter projekt@devilatwork.de oder über das Kontaktformilar kontaktieren.

 

Ist das rechtlich eigentlich in Ordnung?

Achtung: Dies ist keine rechtliche Auskunft, sondern nur meine persönliche Meinung und Interpretation. Für eine Beurteilung bitte einen Anwalt und/oder Datenschuztbeauftragten kontaktieren.

Darf man die Abwesenheitsnotiz einfach so ändern? In dem beschriebenen Fall kam die Anfrage von der Benutzerin selber. Da mit dieser Powershell-Methode nicht auf das Mail-Konto zugegriffen wird und keine E-Mails eingesehen werden halte ich persönlich die Anpassung auf diesem Wege aus datenschutzrechtlichen Gründen für unbedenklich. Zumindest im direkten Vergleich dazu sich einfach Zugang zum Mail-Konto des Benutzers zu verschaffen.

Wie eigentlich beim mittlerweile allem macht es vermutlich Sinn hierfür eine Tätigkeitsbeschreibung zu erstellen. Wenn man ganz auf Nummer sicher gehen will, dokumentiert man von allen Mitarbeitern das Einverständnis für diesen „Eingriff“ in ihren Mail-Account.

 

Weitere interessante Artikel zur Windows Powershell:

Screenshots mit PowerShell automatisch unter Windows speichern
Welche PowerShell-Version habe ich? – PowerShell-Version anzeigen
Was ist PowerShellCore? Windows PowerShell unter Linux und MacOS?
Powershell und CMD: Clear um Konsole zu leeren?
Powershell: Sudo-Befehl wie unter Linux nutzen für Administratorrechte?
COM-Port eines Geräts ändern per Powershell
CMD/Powershell: Ping-Ergebnis mit Errorlevel auswerten
Powershell: Netzwerkadapter-Konfiguration ändern (IP-Adresse, Gateway, DNS, DHCP)
Powershell-Skript als Benutzer-Anmeldeskript in einer Domäne nutzen?
Powershell: Fenster nach Skriptausführung nicht automatisch schließen
Powershell: UTF8-Problem beim Export
XML-Bearbeitung mit Powershell
Replace und Escaping in Powershell
MessageBox mit Powershell auf anderen Computern anzeigen
While- und Until-Schleifen in PowerShell und Batch
Einfaches inkrementelles Backup mit Powershell
Einfache Außer-Haus-Sicherung mit Powershell
Schnittstelle von XML zu MS-SQL mit Powershell realisieren
Powershell: Automatische Anwendungssteuerung
Macht die ExecutionPolicy für Powershell-Skripte Sinn?
Wiederkehrende E-Mail-Abwesenheitsnotiz für Outlook mit Powershell
HyperV-Netzwerkadapter per Powershell umbenennen und entfernen
Powershell: DELL Service Tags auslesen
Powershell-Backup-Skript für den Thunderbird-Profilordner
Download-Skript in Powershell
Einfache Powershell-Skripte
Java-Anwendungen über CMD oder Powershell starten
Pfad im Explorer schneller kopieren – auch als vollständigen UNC-Pfad
Windows 11: Startmenü anpassen, klassische Taskleiste, links ausrichten
Wie lange läuft mein PC schon? – PC Laufzeit auslesen unter Windows 10
Windows 10: Standorttyp des Netzwerks ändern
Windows Server 2016: WSUS startet nicht vernünftig
 

Tobias Langner

Tobias Langner

Ich arbeite seit mehreren Jahren als Software-Release-Manager, zuvor als IT-Administrator, bin ausgebildeter Fachinformatiker für Systemintegration und Studium-"Pausierer" an der FernUni Hagen. Achtung: Für die Richtigkeit der zur Verfügung gestellten Informationen, Skripte, etc. übernehme ich keine Gewähr. Deren Nutzung geschieht ausdrücklich auf eigene Gefahr!

Alle Beiträge ansehen von Tobias Langner →

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert