Certified Cloud Developer


Seit meinem Einstieg in die Softwareentwicklung in den 80er-Jahren habe ich mich kontinuierlich in der jeweils aktuellen Technologie bewegt: von Assembler über C++ und Lisp/Common Lisp in den 1980er-Jahren, gefolgt von Java und Python in den 1990er-Jahren, später C# und .NET. Seit 2024 widme ich mich verstärkt wieder der Softwareentwicklung, nun im Kontext von KI-gestützten Systemen.

Als Anthropic-Certified Claude Developer setze ich moderne KI-Entwicklungsmethoden produktiv ein: Aufgaben, die früher Wochen an Entwicklungszeit beansprucht hätten, lassen sich heute in Stunden umsetzen. Aktuelles Beispiel ist Kontor, eine von mir entwickelte Handelsoberfläche mit Claude-API-Anbindung und einem eigenständigen Trader-Agent für KI-gestützte Marktanalyse, inklusive eines öffentlichen Wirtschaftskalenders mit allen Terminen.

Engineering is a Passion


Als System-Engineer (MCITP, CCP-V und AI Fluency & Claude Expert) betreue ich Netzwerkinfrastrukturen, führe Planungen durch, schule Mitarbeiter und führe Migrationen von Netzwerk, Server- als auch Client Infrastrukturen bis zum mittleren Enterprise Umfeld durch. Mein Aufgabengebiet umfasste der IT Support von mittelständischen Unternehmen als auch die Umsetzung von Projekten in Server und Clientnetzwerken unter den Betriebssystemen Microsoft, Mac OS und Linux resp. den Hypervisoren VMware, Hyper V und Citrix.

Mein Knowhow und Wissen sammelte ich in Projekten im Bereich öffentlicher und privater Auftraggeber.

 

Teams-Feiertage:
Auto Attendants prüfen und je Kanton setzen

BLG-1500-ch-deLernanleitung5 Minuten

Im Teams Admin Center legt man Feiertage pro Schedule Tag für Tag an, und jedes Jahr stellt sich die Frage, ob alle Auto Attendants die richtigen Feiertage kennen und was Anrufer dann hören. Der Artikel zeigt zwei PowerShell-Werkzeuge für Schweizer Teams-Telefonie. Das erste liest die Feiertagslisten aller Auto Attendants samt Rufnummer und zugehöriger Call Queue in eine Excel-Tabelle. Das zweite schreibt die Feiertage eines Kantons in einen bestehenden Schedule, wahlweise ergänzend oder ersetzend. Dazu kommen die Voraussetzungen, zwei gekürzte Codebeispiele, typische Fehler und die Grenzen, vor allem die jährliche Pflege der Daten.

Inhalt 10 Abschnitte
  1. Auf einen Blick
  2. Das Problem: Feiertage von Hand pflegen
  3. Feiertage der Teams Auto Attendants auslesen
  4. Kantonsfeiertage per Klick setzen
  5. Voraussetzungen und Ablauf
  6. Typische Fehler
  7. Grenzen
  8. Einordnung: Was das für Teams-Admins in der Schweiz heisst
  9. Fazit
  10. Änderungshistorie
Wandkalender mit gelb markierten Wochenenden in Nahaufnahme (Symbolfoto zu Feiertagen und Terminplanung)
Teams-Feiertagslisten
Je Kanton prüfen und setzen
Foto: webandi / Pixabay

Einmal im Jahr dieselbe Frage: Sind unsere Feiertage im Auto Attendant, und was hört der Anrufer? Zwei Skripte beantworten sie in Minuten.

Auf einen Blick

  • Das Admin Center verlangt Handarbeit. Feiertage legst du pro Schedule einzeln und Tag für Tag an.
  • Ein Skript liest alle Auto Attendants aus. Das Ergebnis ist eine Excel-Tabelle mit Datum, Rufnummer und zugehöriger Call Queue.
  • Ein zweites Skript setzt die Feiertage eines Kantons. Du wählst zwischen Ergänzen und Ersetzen und siehst vorher eine Vorschau.
  • Die Daten gelten für ein Kalenderjahr. Prüfe sie jedes Jahr gegen die offizielle Liste deines Kantons.

Das Problem: Feiertage von Hand pflegen

Jeder Betrieb mit Teams-Telefonie stellt jährlich dieselbe Frage. Sind die Feiertage in den Auto Attendants hinterlegt, und welche Ansage hört der Anrufer? Ohne Skript öffnest du jeden Auto Attendant einzeln, klappst die Feiertagsliste auf und liest die Ansage nach.

Bei kantonalen Sonderfeiertagen wird leicht einer vergessen. Der Berchtoldstag, St. Josef, Bruder Klaus oder der Bettagsmontag gelten nicht überall. Der Auto Attendant kennt solche Tage nur, wenn sie im Schedule stehen. Fehlt einer, läuft der Anruf ausserhalb der Geschäftszeit in die falsche Richtung: Er landet in der Warteschlange, obwohl niemand arbeitet.

Die zwei Werkzeuge lösen je einen Teil. Das erste zeigt dir den Ist-Zustand, das zweite schreibt den Soll-Zustand.

Feiertage der Teams Auto Attendants auslesen

Das Auslese-Skript verbindet sich mit dem Teams-Modul und lädt alle Call Queues und Auto Attendants seitenweise. Für jeden Auto Attendant ermittelt es die Rufnummer des Ressourcenkontos und liest die Feiertagslisten samt Zeiträumen. Eine Lookup-Tabelle löst die Namen der Feiertage auf. Die Zuordnung von Auto Attendant zu Call Queue läuft über die GUIDs der Ressourcenkonten.

Das Ergebnis ist eine Excel-Datei mit Autofilter und fixierter Kopfzeile, zusätzlich eine Ansicht im Grid-View. Fehlt das Modul ImportExcel, nutzt das Skript Excel per COM oder Out-GridView.

$autoAttendants = Get-AllPaged { param($t, $s) Get-CsAutoAttendant -First $t -Skip $s } $PageSize

$rows = foreach ($aa in $autoAttendants) {
    $phones = foreach ($id in @($aa.ApplicationInstances)) {
        try { (Get-CsOnlineApplicationInstance -Identity "$id").PhoneNumber } catch { }
    }
    try { $holidays = @(Get-CsAutoAttendantHolidays -Identity $aa.Identity) }
    catch { Write-Warning "Holidays für '$($aa.Name)' nicht lesbar: $($_.Exception.Message)"; continue }

    foreach ($h in $holidays) {
        foreach ($range in @($h.DateTimeRanges)) {
            [pscustomobject]@{
                AutoAttendant  = $aa.Name
                Rufnummer      = ($phones | Where-Object { $_ }) -join ', '
                Feiertagsliste = $h.Name
                Start          = $range.Start
                Ende           = $range.End
                Zeitzone       = $aa.TimeZoneId
            }
        }
    }
}
$rows | Sort-Object Start, AutoAttendant |
    Export-Excel -Path $ExcelPath -WorksheetName 'Feiertage' -TableName 'TeamsFeiertage' -AutoSize -AutoFilter -FreezeTopRow

Dabei fängt der try-Block Auto Attendants ab, deren Feiertage nicht lesbar sind. Das Skript meldet sie als Warnung und macht mit dem nächsten weiter. Die Seitengrösse steuerst du mit -PageSize, Standard ist 100. Die Anleitung von Microsoft zum Aufbau eines Auto Attendants erklärt Schedules und Feiertage im Admin Center.

Kantonsfeiertage per Klick setzen

Das zweite Werkzeug schreibt die Feiertage eines Schweizer Kantons in einen bestehenden Schedule vom Typ Fixed. Im Original hat es eine kleine Windows-Forms-Oberfläche. Du wählst den Schedule, klickst den Kanton an, prüfst die Vorschau und entscheidest dich für einen Modus:

  • Ergänzen: Bestehende Einträge bleiben, gleiche Tage werden ersetzt.
  • Ersetzen: Nur die Liste des Kantons bleibt übrig.

Ein separates Skript hält die Feiertage aller 26 Kantone für ein Jahr als Hashtables bereit. Das gekürzte Beispiel zeigt den Kern ohne Oberfläche, mit einem Auszug an Daten.

$KantonDaten = @{
    'Luzern' = @('01/01/2026', '19/03/2026', '03/04/2026', '06/04/2026', '01/08/2026', '25/12/2026', '26/12/2026')
}
$schedule = Get-CsOnlineSchedule | Where-Object Name -eq $ScheduleName | Select-Object -First 1

$ranges = [Collections.Generic.List[object]]::new()
if ($Mode -eq 'Append' -and $schedule.FixedSchedule.DateTimeRanges) {
    $schedule.FixedSchedule.DateTimeRanges | ForEach-Object { $ranges.Add($_) }
}
foreach ($d in $KantonDaten[$Kanton]) {
    $start = [datetime]::ParseExact($d, 'dd/MM/yyyy', $ci)
    @($ranges | Where-Object { (Get-Date $_.Start).Date -eq $start.Date }) | ForEach-Object { [void]$ranges.Remove($_) }
    $ranges.Add((New-CsOnlineDateTimeRange -Start $start.ToString('dd/MM/yyyy', $ci) -End $start.AddDays(1).ToString('dd/MM/yyyy', $ci)))
}
$schedule.FixedSchedule.DateTimeRanges = @($ranges | Sort-Object { Get-Date $_.Start })
Set-CsOnlineSchedule -Instance $schedule

Jeder Feiertag ist ganztägig: Das Ende liegt einen Tag nach dem Start. Vor dem Eintragen entfernt das Skript einen gleichen Tag, damit keine Dubletten entstehen. Die Cmdlets New-CsOnlineDateTimeRange und Set-CsOnlineSchedule beschreibt Microsoft in der Referenz. Die Daten im Beispiel sind ein Auszug und gehören vor dem Einsatz gegen die offizielle Liste deines Kantons abgeglichen.

Voraussetzungen und Ablauf

Du brauchst Windows PowerShell 5.1 oder 7 mit dem Modul MicrosoftTeams und die Rolle Teams-Administrator oder Teams-Kommunikationsadministrator. Für den Excel-Export hilft das Modul ImportExcel. Das Setz-Skript braucht eine bestehende Teams-Session, also vorher Connect-MicrosoftTeams.

  1. Das Auslese-Skript mit -AccountId [email protected] starten und die Excel-Datei prüfen.
  2. Mit Connect-MicrosoftTeams anmelden und das Setz-Skript starten.
  3. Schedule und Kanton wählen, die Vorschau lesen und den Modus bestimmen.
  4. Die Aktualisierung auslösen und das Ergebnis erneut mit dem Auslese-Skript kontrollieren.

Beide Skripte haben oben einen Konfigurationsblock. Reihenfolge der Werte: Parameter, Konfigurationsblock, automatische Erkennung, Abfrage. Tenant- und Mail-Domäne liest das Skript nach der Anmeldung selbst aus. Beim Start fragt es nach dem Kunden und baut ihn in den Dateinamen der Excel-Datei ein.

Typische Fehler

Symptom Ursache Lösung
„Access Denied“ bei Get-CsCallQueue
Dem Konto fehlt die Teams-Admin-Rolle
Rolle zuweisen
Keine Schedules gefunden
Es besteht keine Teams-Session
Zuerst Connect-MicrosoftTeams ausführen
Excel-Export fehlt
ImportExcel ist nicht installiert
Modul installieren, sonst greift COM oder Grid-View
Tage um einen Tag verschoben
Zeitzone des Auto Attendants abweichend
Zeitzone prüfen

Grenzen

Die Feiertagsdaten gelten für ein Kalenderjahr. Du pflegst sie jährlich und gleichst sie vor dem Einsatz mit der offiziellen Kantonsliste ab. Das Setz-Skript bearbeitet nur Schedules vom Typ Fixed. Kommunale Feiertage sind nicht enthalten. Pro Session arbeitest du mit einem Tenant, und beide Werkzeuge laufen interaktiv. Als Ausbaustufe ist ein Self-Service denkbar: ein Formular, ein Runbook und dann Teams. Die Beispiele sind gekürzt und gehören vor dem produktiven Einsatz in ein Testlab. Wie sich Warteschlangen für Fachabteilungen selbst bedienen lassen, zeigt der Artikel Teams Premium: Queues-App, Shared Call History und Self-Service.

Einordnung: Was das für Teams-Admins in der Schweiz heisst

Feiertage sind eine kleine Aufgabe mit grosser Wirkung am Telefon. Ein vergessener Tag kostet Kundenvertrauen, weil Anrufer vor einer Warteschlange ohne Personal warten. Für Betriebe mit mehreren Standorten in verschiedenen Kantonen lohnt der Export doppelt, denn er zeigt auf einen Blick, wo Listen voneinander abweichen. Plane die Pflege als festen Termin im Dezember. Dann liegen die Listen für das Folgejahr bereit, bevor der erste Feiertag naht. IT-Dienstleister mit vielen Tenants sparen am meisten, weil jeder Kunde dieselben Schritte durchläuft.

Fazit

Feiertage in Auto Attendants sind schnell gepflegt, wenn du sie systematisch ausliest und schreibst. Das Auslese-Skript liefert eine Excel-Übersicht über alle Listen und ihre Warteschlangen. Das Setz-Skript trägt die Tage eines Kantons ein und lässt dir die Wahl zwischen Ergänzen und Ersetzen. Prüfe die Daten jedes Jahr und halte den Termin dafür fest im Kalender.

Geschrieben von

Änderungshistorie

  • — Artikel veröffentlicht.