Doppelte Rufnummern in Teams bereinigen

von

Table of Contents
2
3

Doppelte Rufnummern in Teams bereinigen

Benutzer, Ressourcenkonto, AD-Altlasten und Wählpläne im Blick

Rufnummer in Teams doppelt vergeben: Benutzer, Ressourcenkonto, Altlasten und Wählpläne bereinigen

Zwei Konten, Benutzer m.berger und Ressourcenkonto ra-zentrale-ffm, zeigen beide auf dieselbe Rufnummer +49 69 555 0100.

WISSEN

Alles zur Teams-Telefonie: Direct Routing, SBC, Wählpläne, Routing, Notruf und Betrieb an einem Ort.

› Teams-Telefonie

BERATUNG

Rufnummern aus drei Systemen, keiner weiß, welches stimmt? Wir räumen mit dir auf, ohne dass die Zentrale schweigt.

› Beratung zur Teams-Telefonie

SCHULUNG

Für Admins, die Rufnummern, Ressourcenkonten und Wählpläne in Teams sicher verwalten wollen.

› Schulung Teams-Telefonie

 

Dienstag, 9:12 Uhr. Ein Kunde ruft die Zentrale in Frankfurt an, +49 69 555 0100. Statt der freundlichen Ansage des Auto Attendants hebt Herr Berger aus dem Vertrieb ab. Das wäre nett, wenn Herr Berger nicht seit 2019 im Ruhestand wäre. Tatsächlich klingelt gar nichts, der Anruf landet in einer Voicemail, die niemand abhört, und die Zentrale ist seit dem Umzug auf Teams „irgendwie ruhig“. Das Helpdesk-Ticket dazu lautet: „Zentrale nicht erreichbar, bitte prüfen“.

Eine doppelt vergebene Rufnummer ist einer der unangenehmeren Fehler in der Teams-Telefonie, weil er sich nicht laut meldet. Kein Fehlercode, kein rotes Banner, nur Anrufe, die beim falschen Konto ankommen, Zuweisungen, die mit einer knappen Fehlermeldung abbrechen, oder eine Kurzwahl, die in Köln einen anderen Menschen erreicht als in Frankfurt. Die Ursachen liegen fast immer an einer von drei Stellen: eine Nummer hängt an Benutzer und Ressourcenkonto zugleich, eine Altlast aus Skype for Business steckt noch im lokalen Active Directory, oder dieselbe Durchwahl wird von zwei Wählplänen unterschiedlich aufgelöst.

Dieser Beitrag geht genau diese drei Fälle durch: wie sie sich zeigen, wie sie technisch entstehen, wie du sie mit lesenden PowerShell-Befehlen rund um Get-CsPhoneNumberAssignment findest und wie du sie bereinigst, ohne dass die Zentrale einen Nachmittag lang tot ist. Grundlagen zu Direct Routing, Wählplänen und Routing findest du gesammelt auf der Übersichtsseite Teams-Telefonie. Hier geht es nur um das eine Symptom: teams rufnummer doppelt.

Das Symptom: zwei Konten, eine Nummer, viel Verwirrung

Im Helpdesk kommt der Fehler nie mit dem Satz „AssignedPstnTargetId zeigt auf das falsche Objekt“ an. Er kommt so:

„Wenn man unsere Hauptnummer anruft, landet man bei einem Kollegen und nicht im Menü.“

„Ich wollte der Warteschlange die Nummer geben, Teams sagt, sie ist schon vergeben. An wen denn?“

„Im Teams Admin Center steht die Nummer als frei, zuweisen kann ich sie trotzdem nicht.“

„Wenn ich aus Köln die 210 wähle, geht bei Frau Hofmann in Frankfurt das Telefon.“

„Seit dem Sync heute Nacht hat der Kollege seine alte Nummer wieder.“

„Intern erreiche ich die Nummer, von extern kommt nur Besetzt.“

Diese Sätze klingen alle nach „doppelt“, zeigen aber auf unterschiedliche Stellen. Wer sie nicht auseinanderhält, löscht im Zweifel die Nummer am richtigen Konto und wundert sich, warum es danach schlimmer ist. Die Skizze sortiert die drei typischen Fälle.

Drei Ursachen für doppelte Rufnummern: Benutzer und Ressourcenkonto, Altlast aus Skype for Business, Durchwahl in zwei Wählpl

Was du hörst

Wahrscheinlicher Fall

Erster lesender Befehl

Hauptnummer landet bei einer Person

Benutzer und Ressourcenkonto

Get-CsPhoneNumberAssignment -TelephoneNumber

Zuweisung scheitert: Nummer schon vergeben

Benutzer und Ressourcenkonto oder Altlast

Get-CsPhoneNumberAssignment, Get-CsOnlineUser

Nach dem nächtlichen Sync ist die alte Nummer zurück

Altlast im lokalen AD (msRTCSIP-Line)

Get-ADUser -LDAPFilter (msRTCSIP-Line=*)

Kurzwahl trifft je nach Standort jemand anderen

Durchwahl in zwei Wählplänen

Test-CsEffectiveTenantDialPlan -DialedNumber

Intern erreichbar, extern nicht

Nummer in Teams anders als am SBC

Inventar plus SIP-Trace am SBC

 

WICHTIG · Gewollt doppelt ist kein Fehler

Nicht jede Nummer, die zweimal auftaucht, ist ein Problem. Bei Direct Routing darf eine Basisnummer an einem Ressourcenkonto hängen, während Benutzer Durchwahlen im Format +49695550100;ext=210 tragen. Ebenso legal sind private Leitungen (AssignmentCategory Private) und Zweitnummern (Alternate). Bevor du aufräumst, prüfe, ob jemand das bewusst so gebaut hat.

 

Wie eine Rufnummer doppelt wird

Teams hat ein zentrales Nummerninventar. Jede Calling-Plan- und Operator-Connect-Nummer steht darin, Direct-Routing-Nummern landen dort, sobald du sie hochlädst oder online zuweist. Weist du eine Nummer über Set-CsPhoneNumberAssignment oder das Teams Admin Center zu, prüft Teams gegen dieses Inventar und lehnt in aller Regel eine zweite Zuweisung derselben Nummer an ein anderes Konto ab. Doppelungen entstehen deshalb selten durch einen einzelnen Klick, sondern an den Rändern: dort, wo eine zweite Quelle mitredet (das lokale AD), wo gültige Sonderformen falsch kombiniert werden (Basisnummer und Durchwahl) oder wo gar nicht die Nummer doppelt ist, sondern die Kurzwahl, mit der Menschen sie erreichen.

Fall 1: gleiche Nummer an Benutzer und Ressourcenkonto

Der Klassiker entsteht bei Umbauten. Früher hing die Zentrale +49 69 555 0100 an der Empfangskraft, jetzt soll sie an einen Auto Attendant mit dem Ressourcenkonto ra-zentrale-ffm@contoso.com. Wer zuerst das Ressourcenkonto anlegt und dann die Nummer zuweisen will, bekommt eine Fehlermeldung, weil die Nummer noch am Benutzer hängt. Wer die Fehlermeldung „löst“, indem er am SBC eine Manipulation einbaut, die eingehende Anrufe auf eine andere Nummer umschreibt, hat jetzt zwei Wahrheiten: eine in Teams und eine am SBC.

Die zweite Variante ist subtiler: Das Ressourcenkonto trägt die Basisnummer +49695550100, ein Benutzer trägt +49695550100;ext=100. Teams betrachtet das als zwei verschiedene Nummern und lässt beides zu. Welches Konto ein eingehender Anruf erreicht, hängt dann davon ab, in welcher Form der SBC die Nummer an Teams übergibt. Kommt die Request-URI ohne Durchwahl, gewinnt das Ressourcenkonto. Baut eine Manipulationsregel am SBC die Durchwahl an, gewinnt der Benutzer. Für Teams-interne Anrufe kommt die Rückwärtssuche (Reverse Number Lookup) hinzu: Wählt ein Teams-Benutzer eine Nummer, die in Teams einem Konto zugewiesen ist, stellt Teams den Anruf intern über VoIP zu, statt ihn über den SBC ins Telefonnetz zu schicken. Intern landet der Anruf also beim Konto, das in Teams die Nummer hat, extern bei dem Ziel, das der SBC oder der Carrier kennt. Daher der Helpdesk-Satz „intern geht es, extern nicht“.

FAKTEN · Was Microsoft zum Nummerninventar dokumentiert

Get-CsPhoneNumberAssignment zeigt je Nummer unter anderem NumberType (DirectRouting, CallingPlan, OperatorConnect), PstnAssignmentStatus (Unassigned, UserAssigned, ConferenceAssigned, VoiceApplicationAssigned, ThirdPartyAppAssigned, PolicyAssigned), AssignedPstnTargetId (ObjectId des Benutzers oder Ressourcenkontos), AssignmentCategory (Primary, Alternate, Private) und NumberSource.

NumberSource lautet Online für Nummern, die in Microsoft 365 zugewiesen wurden, und OnPremises für Nummern, die im lokalen AD gesetzt und nach Microsoft 365 synchronisiert wurden.

Ohne weitere Angaben liefert das Cmdlet höchstens 500 Ergebnisse, mit -Top bis zu 1000. Für mehr kombinierst du -Skip und -Top oder exportierst das ganze Inventar mit Export-CsAcquiredPhoneNumber.

Die vollständige Parameterliste steht in der Microsoft-Referenz Get-CsPhoneNumberAssignment.

 

Fall 2: Altlast aus Skype for Business im lokalen AD

Wer vor Teams einen Skype for Business Server betrieben hat, trägt dessen Erbe im lokalen Active Directory mit sich herum. Microsoft beschreibt das ausdrücklich: Benutzer, die von Skype for Business Server in die Cloud verschoben wurden, behalten standardmäßig ihre msRTCSIP-Attribute im lokalen AD, und insbesondere SIP-Adresse (msRTCSIP-PrimaryUserAddress) und Rufnummer (msRTCSIP-Line) werden weiter nach Microsoft Entra ID synchronisiert. In Teams taucht die lokal gepflegte Nummer dann als OnPremLineURI auf.

Das funktioniert so lange, wie das AD sauber ist. Problematisch wird es, wenn Menschen gehen. Das Konto von Herrn Berger wurde 2019 deaktiviert, aber nicht gelöscht, und msRTCSIP-Line steht immer noch auf tel:+49695550100. Im AD ist msRTCSIP-Line ein schlichtes Textattribut; nichts hindert dich daran, denselben Wert an zwei Konten einzutragen, und kein Werkzeug warnt, wenn ein ausgeschiedener Mitarbeiter die Nummer noch hält. Nach dem Abbau des Skype-Servers fehlen zudem die alten Verwaltungswerkzeuge, die so etwas früher sichtbar gemacht hätten.

Microsoft nennt zwei Konsequenzen, die du kennen musst. Erstens: Hat ein Benutzer oder Ressourcenkonto eine Rufnummer aus dem lokalen AD, kannst du mit Set-CsPhoneNumberAssignment keine Nummer setzen, bevor die lokale Nummer entfernt und die Änderung synchronisiert ist. Für Calling-Plan- und Operator-Connect-Nummern gilt dasselbe: msRTCSIP-Line muss leer und synchronisiert sein. Zweitens: Sobald eine Direct-Routing-Nummer ins Online-Inventar hochgeladen oder online zugewiesen wurde, übernimmt Teams die Verwaltung, und die Werte, die der nächste Verzeichnissync aus dem lokalen AD anbietet, werden abgewiesen. Ab diesem Moment steht im AD etwas anderes als in Teams, und wer nur ins AD schaut, sieht die falsche Wahrheit.

Ablauf: Konto im lokalen AD mit msRTCSIP-Line wird über Entra Connect als OnPremLineURI nach Teams übertragen; zwei Migration

WARNUNG · Nicht einfach alle msRTCSIP-Attribute löschen

Microsoft weist darauf hin: Leerst du die msRTCSIP-Attribute von Benutzern mit Teams Phone, bevor ihre Nummern online verwaltet werden, verlieren diese Benutzer nach dem nächsten Sync vorübergehend die Fähigkeit zu telefonieren, bis die Nummer online neu zugewiesen ist. Microsoft empfiehlt ausdrücklich, zuerst einen Pilot mit wenigen Benutzern zu fahren und große Umgebungen in Gruppen abzuarbeiten.

Die Beschreibung beider Modelle findest du bei Microsoft unter Verwalten von Attributen nach der Außerbetriebnahme.

 

Fall 3: dieselbe Durchwahl in zwei Wählplänen

Der dritte Fall ist streng genommen keine doppelte Rufnummer, fühlt sich für Anwender aber genau so an. Contoso hat in Frankfurt den Block +49 69 5550 200 bis 399 und in Köln den Block +49 221 5550 200 bis 399. Intern wählen alle dreistellig, also 210. Damit das funktioniert, hat jeder Standort einen eigenen Wählplan mit einer Normalisierungsregel, die die Kurzwahl auf die volle E.164-Nummer ergänzt. Die Kette lautet: Benutzer › Wählplan › Normalisierung › E.164-Nummer › Rückwärtssuche in Teams oder Voice Routing Policy › PSTN Usage › Voice Route › SBC.

Wählplan

Name der Regel

Muster (Pattern)

Übersetzung (Translation)

Ergebnis für 210

DP-Frankfurt

FFM-Kurzwahl

^([23]\d{2})$

+49695550$1

+49695550210

DP-Köln

KOE-Kurzwahl

^([23]\d{2})$

+492215550$1

+492215550210

 

Solange jeder Benutzer den Wählplan seines Standorts hat, ist das korrekt. Die Durchwahl 210 existiert zweimal, aber jeder Wählplan meint eindeutig eine Nummer. Kaputt geht es in drei Situationen: Ein Kölner Benutzer bekommt den Frankfurter Wählplan oder gar keinen; jemand hat die Frankfurter Regel bequemerweise in den globalen Wählplan geschrieben, sodass jeder ohne eigene Zuweisung in Frankfurt landet; oder beide Regeln stehen im selben Wählplan. Im letzten Fall greift immer nur die erste passende Regel in der Reihenfolge der Liste, die zweite wird nie erreicht.

Kurzwahl 210 wird je nach Wählplan unterschiedlich normalisiert: DP-Frankfurt führt zu +49 69 5550 210, DP-Köln zu +49 221 55

WARNUNG · Kurzwahlbereich nie über 110 und 112 legen

Der Bereich 200 bis 399 ist hier bewusst gewählt. Eine Regel wie ^(1\d{2})$ für Durchwahlen ab 100 würde auch 110 und 112 erfassen und den Notruf zu einer internen Nummer wie +49695550112 umbauen. Hast du Durchwahlen im Bereich 1xx, musst du die Notrufnummern ausdrücklich ausnehmen oder vor der Kurzwahlregel abfangen und anschließend testen, was bei 110 und 112 herauskommt.

Wie du den Notruf richtig aufsetzt, steht in Notruf in Microsoft Teams konfigurieren.

 

WEITERLESEN · Mehr zu Wählplänen und Rufweg

› Normalisierungsregeln in Teams: typische Fehler und wie du sie findest

› Wählplan mit Amtsholung 0 in Teams richtig bauen

› Teams-Benutzer fällt auf die globale Richtlinie zurück

 

Diagnose Schritt für Schritt

Alle Befehle in diesem Abschnitt sind lesend. Du brauchst das MicrosoftTeams-Modul, für Schritt 4 zusätzlich das ActiveDirectory-Modul auf einem Rechner in der Domäne. Für die Teams-Abfragen reicht eine lesende Rolle; zum Ändern brauchst du später eine der Rollen Teams-Administrator, Teams-Kommunikationsadministrator oder Teams-Telefonieadministrator. Der Prüfpfad folgt der Skizze: von oben nach unten, beim ersten Treffer weißt du, welcher Fall vorliegt.

Sechsstufiger Prüfpfad zur Ermittlung des Nummernbesitzers mit PowerShell-Befehlen von Nummerninventar bis SIP-Trace am SBC.

Schritt 1: Was sagt das Nummerninventar?

Beginne mit der Nummer selbst, nicht mit dem Benutzer. Das Inventar sagt dir, ob Teams die Nummer kennt, wer sie hat und woher die Zuweisung stammt.

Get-CsPhoneNumberAssignment -TelephoneNumber "+49695550100" |

Format-List TelephoneNumber, NumberType, NumberSource, PstnAssignmentStatus,

AssignedPstnTargetId, AssignmentCategory, ActivationState

 

# Basisnummer und alle Durchwahlen mit ;ext= auf einen Blick

Get-CsPhoneNumberAssignment -TelephoneNumberStartsWith "+49695550100" |

Select-Object TelephoneNumber, PstnAssignmentStatus, AssignedPstnTargetId

 

Feld

Typischer Wert

Was er dir sagt

PstnAssignmentStatus

UserAssigned

Die Nummer hängt an einem Benutzer, nicht am Ressourcenkonto.

PstnAssignmentStatus

VoiceApplicationAssigned

Die Nummer hängt an einem Ressourcenkonto (Auto Attendant oder Warteschlange).

NumberSource

OnPremises

Die Zuweisung kommt aus dem lokalen AD. Weiter mit Schritt 4.

AssignmentCategory

Private oder Alternate

Bewusste Zweitnummer; nicht vorschnell entfernen.

Kein Ergebnis

 

Teams kennt die Nummer nicht im Inventar. Bei Direct Routing kann sie trotzdem über das AD an einem Konto stehen.

 

Schritt 2: Welches Konto zeigt die Nummer?

AssignedPstnTargetId ist eine ObjectId. Löse sie auf und schau dir an, ob es ein Benutzer oder ein Ressourcenkonto ist und ob die Nummer als LineURI (online) oder als OnPremLineURI (aus dem AD) geführt wird.

$n = Get-CsPhoneNumberAssignment -TelephoneNumber "+49695550100"

Get-CsOnlineUser -Identity $n.AssignedPstnTargetId |

Select-Object DisplayName, UserPrincipalName, InterpretedUserType,

LineURI, OnPremLineURI, EnterpriseVoiceEnabled, TenantDialPlan

 

# Welche Ressourcenkonten tragen eine Nummer aus diesem Block?

Get-CsOnlineApplicationInstance |

Where-Object PhoneNumber -like "*49695550*" |

Select-Object DisplayName, UserPrincipalName, PhoneNumber

 

Im Teams Admin Center findest du dieselbe Information an zwei Stellen: unter Sprache › Telefonnummern, wo du nach der Nummer suchst und siehst, wem sie zugewiesen ist, und unter Benutzer › Benutzer verwalten › Konto, wo die zugewiesene Rufnummer des einzelnen Benutzers steht. Für Ressourcenkonten schaust du unter Sprache › Ressourcenkonten.

Schritt 3: Doppelte Nummern im ganzen Tenant suchen

Einzelne Nummern prüfen ist gut, alle Nummern prüfen ist besser. Das folgende Skript sammelt LineURI und OnPremLineURI aller Konten und meldet jede Nummer, die an mehr als einem Konto hängt. Es ändert nichts. In großen Tenants dauert Get-CsOnlineUser ohne Filter einige Minuten; nimm dir einen Kaffee, nicht die Produktivumgebung als Testobjekt.

$liste = foreach ($u in Get-CsOnlineUser -ResultSize Unlimited) {

foreach ($feld in 'LineURI', 'OnPremLineURI') {

if ($u.$feld) {

[pscustomobject]@{

Nummer = ($u.$feld -replace '^tel:', '')

Quelle = $feld

Konto = $u.UserPrincipalName

Typ = $u.InterpretedUserType

}

}

}

}

$liste | Group-Object Nummer |

Where-Object { ($_.Group.Konto | Sort-Object -Unique).Count -gt 1 } |

ForEach-Object Group | Format-Table Nummer, Quelle, Konto, Typ

 

Für das Inventar selbst gilt die Grenze von 500 Ergebnissen pro Aufruf. Willst du Basisnummern und Durchwahlen gegeneinander abgleichen, blätterst du in Tausenderschritten:

$inv = @(); $skip = 0

do {

$seite = Get-CsPhoneNumberAssignment -Top 1000 -Skip $skip

$inv += $seite; $skip += 1000

} while ($seite.Count -eq 1000)

 

# Durchwahlen, deren Basisnummer ebenfalls zugewiesen ist

$belegt = $inv | Where-Object PstnAssignmentStatus -ne 'Unassigned'

$belegt | Where-Object TelephoneNumber -like '*;ext=*' | Where-Object {

($_.TelephoneNumber -replace ';ext=.*$', '') -in $belegt.TelephoneNumber

} | Select-Object TelephoneNumber, PstnAssignmentStatus, AssignedPstnTargetId

 

Jede Zeile, die dieser zweite Block ausgibt, ist kein automatischer Fehler, aber eine Frage an den, der das Routing gebaut hat: Ist das so gewollt, und weiß der SBC davon?

Schritt 4: Altlasten im lokalen AD finden

Zeigt Schritt 1 NumberSource OnPremises oder Schritt 2 eine OnPremLineURI, geht es ins lokale AD. Get-ADObject statt Get-ADUser erfasst auch Kontakte und andere Objekte, die von alten Skype-Endpunkten übrig sein können.

Get-ADObject -LDAPFilter '(msRTCSIP-Line=*)' -Properties 'msRTCSIP-Line', objectClass |

Group-Object 'msRTCSIP-Line' | Where-Object Count -gt 1 |

ForEach-Object Group | Select-Object Name, objectClass, 'msRTCSIP-Line'

 

# Deaktivierte Benutzer, die noch eine Nummer halten

Get-ADUser -LDAPFilter '(msRTCSIP-Line=*)' -Properties 'msRTCSIP-Line' |

Where-Object { -not $_.Enabled } | Select-Object SamAccountName, 'msRTCSIP-Line'

 

Achte beim Vergleich auf die Schreibweise. Im AD steht der Wert mit dem Präfix tel:, manchmal auch mit ;ext=. Eine Nummer, die einmal als tel:+49695550100 und einmal als tel:+49695550100;ext=100 eingetragen ist, fällt bei einer reinen Gruppierung nicht auf, kollidiert aber in der Praxis genauso.

AUS DER PRAXIS · Ein Maschinenbauer mit zwölf Standorten

Nach der Migration von Skype for Business auf Teams klingelte bei einem Maschinenbauer die Nummer der Servicehotline zuverlässig auf dem Handy eines Teamleiters, der Jahre zuvor die Hotline betreut hatte. Sein aktives Konto trug online eine neue Nummer, sein deaktiviertes Zweitkonto aus der Skype-Zeit hielt im AD noch die Hotline in msRTCSIP-Line, und die Anrufweiterleitung des Zweitkontos zeigte auf sein Handy.

Gefunden hat es niemand über Teams, sondern über die LDAP-Abfrage aus Schritt 4. Die Bereinigung dauerte zehn Minuten, die Suche davor drei Wochen.

 

Schritt 5: Welche Nummer erzeugt die Kurzwahl wirklich?

Für den Wählplan-Fall prüfst du nicht die Nummer, sondern den Weg dorthin. Teste mit den Konten beider Standorte dieselbe Kurzwahl und vergleiche das Ergebnis.

Get-CsOnlineUser -Identity a.schulz@contoso.com | Select-Object TenantDialPlan

Get-CsEffectiveTenantDialPlan -Identity a.schulz@contoso.com

 

Test-CsEffectiveTenantDialPlan -DialedNumber 210 -Identity a.schulz@contoso.com

Test-CsEffectiveTenantDialPlan -DialedNumber 210 -Identity j.hofmann@contoso.com

 

# Alle Regeln aller Wählpläne in einer Liste

Get-CsTenantDialPlan | ForEach-Object {

$dp = $_.Identity

$_.NormalizationRules | Select-Object @{n='Wählplan'; e={$dp}}, Name, Pattern, Translation

} | Format-Table -AutoSize

 

Liefert Test-CsEffectiveTenantDialPlan für den Kölner Benutzer +49695550210, hat er den falschen Wählplan oder gar keinen und fällt auf eine Regel im globalen Wählplan zurück. In der Regelliste erkennst du außerdem sofort, ob zwei Standortregeln mit demselben Muster im selben Wählplan stehen. Im Teams Admin Center findest du die Wählpläne unter Sprache › Wählpläne; dort kannst du eine gewählte Nummer gegen einen Wählplan testen.

Schritt 6: Was kommt am SBC an?

Ist in Teams alles eindeutig und der Anruf von extern landet trotzdem falsch, liegt die zweite Wahrheit am SBC. Entscheidend ist die Nummer in der Request-URI des INVITE, das der SBC an Teams schickt. Auf meinem eigenen anynode-SBC ist der Trace in solchen Fällen der erste Blick: Steht dort +49695550100 oder +49695550100;ext=100, oder hat eine Manipulationsregel die Nummer umgebaut? Erst wenn Teams-Inventar und SBC-Regeln dieselbe Nummer meinen, ist der Fall erledigt.

WERKZEUG · So findet es der Teams-Telefonie Diagnostiker

Der Teams-Telefonie Diagnostiker liest Nummernzuweisungen, Ressourcenkonten und Wählpläne nur lesend aus und meldet doppelt vergebene Nummern als Befund mit Prüffall, also mit der konkreten Nummer, den beteiligten Konten und dem Befehl, mit dem du es selbst nachprüfst. Die Ampel zeigt, in welchem Bereich der Befund liegt.

Im Benutzer-Steckbrief siehst du je Konto Rufnummer, Wählplan und Voice Routing Policy nebeneinander. Der Rufweg-Simulator zeigt für eine gewählte Kurzwahl wie 210, welcher Wählplan greift und welche E.164-Nummer daraus entsteht. Mit dem Assistenten für Wählpläne baust du Standortregeln samt Testtabelle, und die Drift-Erkennung meldet, wenn nach der Bereinigung wieder eine Doppelung auftaucht. Der Bericht fasst die Befunde für die Dokumentation zusammen.

Teams-Telefonie Diagnostiker: 15 Tage kostenlos testen.

 

Rufnummern-Inventar der Teams-Telefonie Diagnostiker mit farbigen Kacheln für belegte, freie, doppelte und deaktivierte Rufnu
So siehst du je Standort, welche Nummern frei, belegt, doppelt vergeben oder einem deaktivierten Konto zugeordnet sind (Demo-Daten).

Bereinigung mit Rückweg

Jede Bereinigung folgt demselben Muster: sichern, entscheiden, entfernen, zuweisen, prüfen. Der unangenehme Teil liegt zwischen Entfernen und Zuweisen. In diesem Zeitfenster gehört die Nummer niemandem, und Anrufe darauf laufen ins Leere. Bei der Zentrale wählst du dafür also nicht Montag 9 Uhr, sondern ein Wartungsfenster, und sagst dem Empfang Bescheid.

Fünf Schritte zum Bereinigen einer doppelten Rufnummer: Sichern, Entscheiden, Entfernen, Zuweisen, Prüfen, mit Wartungsfenste

Vor dem ersten Eingriff: Stand sichern

$stamp = Get-Date -Format 'yyyyMMdd-HHmm'

Export-CsAcquiredPhoneNumber # liefert eine Download-Adresse für das ganze Inventar

Get-CsPhoneNumberAssignment -TelephoneNumberStartsWith "+49695550" -Top 1000 |

Export-Csv ".\nummern-$stamp.csv" -NoTypeInformation -Encoding UTF8

Get-ADObject -LDAPFilter '(msRTCSIP-Line=*)' -Properties 'msRTCSIP-Line' |

Select-Object DistinguishedName, 'msRTCSIP-Line' |

Export-Csv ".\ad-msrtcsip-$stamp.csv" -NoTypeInformation -Encoding UTF8

 

Klingt pedantisch, ist aber die halbe Miete: Ohne diese Dateien weißt du nach der dritten Korrektur nicht mehr, wem die Nummer ursprünglich gehörte.

Fall 1 beheben: Nummer vom Benutzer zum Ressourcenkonto

Entscheiden. Kläre, wer die Nummer haben soll. Bei der Zentrale ist das in der Regel das Ressourcenkonto des Auto Attendants, nicht die Person am Empfang.

Entfernen. Remove-CsPhoneNumberAssignment -Identity empfang.ffm@contoso.com -PhoneNumber "+49695550100" -PhoneNumberType DirectRouting. Hat der Benutzer weiter Telefonie, weist du ihm anschließend eine eigene Nummer zu, etwa +49695550250.

Zuweisen. Set-CsPhoneNumberAssignment -Identity ra-zentrale-ffm@contoso.com -PhoneNumber "+49695550100" -PhoneNumberType DirectRouting.

SBC prüfen. Entferne Manipulationsregeln, die eingehende Anrufe auf die Zentrale umgeschrieben haben, und kontrolliere die Request-URI im Trace.

Testen. Ruf die Nummer einmal von extern und einmal aus Teams an. Beide Wege müssen beim Auto Attendant landen.

Mischst du Basisnummer und Durchwahlen bewusst, dokumentiere die Regel im Rufnummernplan: Basisnummer am Ressourcenkonto, Durchwahlen ausschließlich mit ;ext= an Benutzern, und der SBC übergibt eingehende Anrufe in genau dieser Form.

Fall 2 beheben: Altlast aus dem AD entfernen

Für einen einzelnen ausgeschiedenen Benutzer wie Herrn Berger ist der Weg kurz: Nummer im AD sichern, Attribut leeren, synchronisieren, dann online neu zuweisen.

# Sicherung des Einzelwerts

Get-ADUser -Identity m.berger -Properties 'msRTCSIP-Line' | Select-Object SamAccountName, 'msRTCSIP-Line'

 

# Bereinigung (ändernd!)

Set-ADUser -Identity m.berger -Clear 'msRTCSIP-Line'

Start-ADSyncSyncCycle -PolicyType Delta # auf dem Entra-Connect-Server

 

# Nach dem Sync: Nummer online zuweisen (ändernd!)

Set-CsPhoneNumberAssignment -Identity ra-zentrale-ffm@contoso.com -PhoneNumber "+49695550100" `

-PhoneNumberType DirectRouting

 

Bei vielen Benutzern entscheidest du zuerst, welches Modell du künftig fährst. Microsoft beschreibt zwei: Im ersten bleibt das lokale AD für alle Konten führend, die dort schon eine Nummer haben; neue Konten verwaltest du online. Im zweiten leerst du alle msRTCSIP-Attribute und verwaltest ausschließlich online. Microsoft beschreibt für das zweite Modell eine Reihenfolge, in der vor dem Leeren der Attribute die Benutzerdaten samt LineURI exportiert werden und die Nummern nach dem Sync wieder mit Set-CsPhoneNumberAssignment zugewiesen werden. Lädst du die Direct-Routing-Nummern vorher ins Online-Inventar hoch, vermeidest du laut Microsoft die Unterbrechung. Für eine zweistellige Zahl an Standorten ist das ein Projekt mit Pilotgruppe, kein Freitagnachmittag; wenn du dafür Unterstützung willst, hilft dir die Beratung zur Teams-Telefonie.

TIPP · Nach der Bereinigung Geduld einplanen

Microsoft nennt für das Aktivieren von Benutzern nach einer Nummernzuweisung eine Laufzeit von bis zu 24 Stunden. Prüfe deshalb zuerst mit Get-CsPhoneNumberAssignment und Get-CsOnlineUser, ob der Stand in Teams stimmt, bevor du am nächsten Rad drehst. Wer nach zehn Minuten nachkorrigiert, korrigiert meistens die eigene Korrektur.

 

Fall 3 beheben: Wählpläne entwirren

Zuweisung korrigieren. Gib dem Kölner Benutzer den Kölner Wählplan: Grant-CsTenantDialPlan -Identity a.schulz@contoso.com -PolicyName "DP-Köln". Für ganze Standorte nutzt du eine Gruppenzuweisung statt Einzelzuweisungen.

Globalen Wählplan entrümpeln. Standortregeln haben im globalen Wählplan nichts verloren. Notiere die Regel mit Name, Muster und Übersetzung und entferne sie im Teams Admin Center unter Sprache › Wählpläne › Global.

Doppelte Muster in einem Plan auflösen. Steht dasselbe Muster zweimal im selben Wählplan, lebt nur die erste Regel. Entscheide, welcher Standort gemeint ist, und verschiebe die andere Regel in den richtigen Wählplan.

Testen. Test-CsEffectiveTenantDialPlan -DialedNumber 210 für je einen Benutzer pro Standort, dazu 110 und 112, damit du siehst, dass der Notruf unberührt bleibt.

Wenn Standorte die gleiche Kurzwahl nutzen, aber standortübergreifend telefoniert wird, lohnt eine Standortvorwahl für interne Gespräche, etwa 8 für Frankfurt und 7 für Köln. Das ist eine Organisationsfrage, keine technische, und gehört in den Rufnummernplan.

Assistent zur Wählplan-Normalisierung mit Eingabefeldern für den Standort Dortmund und einer Testtabelle der Wählvarianten.
So legst du im Wählplan-Assistenten Ortsvorwahl, Stammnummer und Durchwahlbereich fest und siehst in der Testtabelle, was aus Kurzwahl, 110 und 112 wird (Demo-Daten).

Rollback: wie du jeden Schritt zurücknimmst

Änderung

Rückweg

Worauf du achten musst

Nummer mit Remove-CsPhoneNumberAssignment entfernt

Set-CsPhoneNumberAssignment mit Nummer und NumberType aus der Sicherung

Nummer zuerst am neuen Konto entfernen, sonst ist sie belegt

Nummer an Ressourcenkonto zugewiesen

Remove-CsPhoneNumberAssignment am Ressourcenkonto

Auto Attendant ist danach ohne Nummer nur intern erreichbar

msRTCSIP-Line geleert

Set-ADUser -Replace @{'msRTCSIP-Line'='tel:+49695550100'}, dann Sync

Wurde die Nummer inzwischen online zugewiesen, weist Teams den AD-Wert ab

Wählplan neu zugewiesen

Grant-CsTenantDialPlan mit dem alten Namen aus der Sicherung

Laufzeit bis zum Client einplanen

Regel aus Global entfernt

Regel mit notiertem Muster und Übersetzung neu anlegen

Reihenfolge der Regeln wiederherstellen

 

WEITERLESEN · Passend zur Bereinigung

› Teams Auto Attendant: wenn Anrufer im Nirwana landen

› Eingehende Anrufe kommen in Teams nicht an

› Rufnummernanzeige in Teams falsch: CLIP, Caller ID Policy und SBC

 

Vorbeugung: damit die Nummer einen Besitzer behält

Doppelte Nummern sind ein Symptom fehlender Zuständigkeit. Technisch verhindert Teams die meisten Doppelungen selbst, solange alle Zuweisungen über das Online-Inventar laufen. Die Lücken entstehen durch zweite Quellen, Ausnahmen und vergessene Konten. Dagegen helfen keine Werkzeuge allein, sondern ein paar feste Regeln.

Maßnahme

Wirkung

Aufwand

Ein Rufnummernplan als einzige Wahrheit

Jede Nummer hat genau einen Eintrag mit Besitzer, Typ und Standort

einmalig hoch, danach gering

Verwaltung nur an einer Stelle

Entweder AD oder online, nicht beides nebeneinander

Projekt bei Skype-Altlasten

Austrittsprozess mit Nummernrückgabe

Konten ausgeschiedener Mitarbeiter halten keine Nummern mehr

gering, wenn im HR-Prozess verankert

Monatlicher Doppel-Check mit dem Skript aus Schritt 3

Doppelungen fallen auf, bevor Kunden sie bemerken

wenige Minuten

Wählpläne nur per Gruppenzuweisung

Neue Benutzer bekommen automatisch den Wählplan ihres Standorts

gering

Keine Standortregeln im globalen Wählplan

Fehlende Zuweisung führt nicht still an den falschen Standort

gering

 

Wie du Zuständigkeiten, Freigaben und Dokumentation für die gesamte Telefonie regelst, beschreibt der Beitrag Microsoft Teams Telefonie-Governance. Und weil sich Konfigurationen nach jeder Bereinigung gern wieder auseinanderentwickeln, lohnt ein Blick auf Konfigurationsdrift in der Teams-Telefonie erkennen. Wer das Wissen im Team verankern will, findet es kompakt in der Schulung Teams-Telefonie.

TIPP · Nummern ausgeschiedener Mitarbeiter nicht sofort neu vergeben

Eine Nummer, die gestern noch einem Vertriebsmitarbeiter gehörte, wird morgen von seinen Kunden angerufen. Lass freigewordene Nummern eine Weile ruhen, bevor du sie neu vergibst, und leite sie in dieser Zeit bewusst an ein Team oder eine Warteschlange weiter. Dann ist die Nummer zwar belegt, aber mit Absicht und dokumentiert.

 

FAQ: doppelte Rufnummern in Teams

Kann Teams eine Rufnummer überhaupt zweimal vergeben?

Über das Online-Inventar im Normalfall nicht: Set-CsPhoneNumberAssignment und das Teams Admin Center lehnen eine Zuweisung ab, wenn die Nummer bereits einem anderen Konto gehört. Doppelungen entstehen über Werte aus dem lokalen AD, über die Kombination von Basisnummer und Durchwahl mit ;ext= oder über abweichende Regeln am SBC.

Darf die Basisnummer am Auto Attendant hängen und Durchwahlen mit ;ext= an Benutzern?

Ja, bei Direct Routing unterstützt Teams Nummern mit Durchwahl im Format +49695550100;ext=210. Wichtig ist, dass der SBC eingehende Anrufe in genau der Form an Teams übergibt, die du zugewiesen hast, und dass diese Regel im Rufnummernplan steht.

Warum kann ich die Nummer nicht zuweisen, obwohl sie frei aussieht?

Häufig hat das Zielkonto selbst noch eine Nummer aus dem lokalen AD in msRTCSIP-Line. Laut Microsoft kannst du dann online keine Nummer setzen, bevor der lokale Wert entfernt und synchronisiert ist. Prüfe OnPremLineURI am Zielkonto mit Get-CsOnlineUser.

Muss ich die msRTCSIP-Attribute nach Skype for Business überhaupt löschen?

Nein. Microsoft beschreibt ein Modell, in dem das lokale AD für bestehende Nummern führend bleibt. Das funktioniert, verlangt aber Disziplin, weil du zwei Verwaltungsorte hast. Für Ordnung auf Dauer ist das Modell mit reiner Online-Verwaltung übersichtlicher; dafür brauchst du eine geplante Umstellung.

Was passiert mit Nummern an deaktivierten Konten?

Sie bleiben zugewiesen. Ein deaktiviertes Konto hält die Nummer so lange fest, bis du sie entfernst. Genau so entstehen die meisten „Geisternummern“. Nimm die Nummernrückgabe deshalb in den Austrittsprozess auf.

Warum findet Get-CsPhoneNumberAssignment nicht alle Nummern?

Ohne Parameter liefert das Cmdlet höchstens 500 Ergebnisse, mit -Top höchstens 1000. Für mehr blätterst du mit -Skip und -Top oder exportierst mit Export-CsAcquiredPhoneNumber. Direct-Routing-Nummern, die nur im lokalen AD stehen und nie hochgeladen wurden, findest du zusätzlich über Get-CsOnlineUser und OnPremLineURI.

Ist dieselbe Durchwahl an zwei Standorten ein Fehler?

Nein, solange jeder Benutzer den Wählplan seines Standorts hat und keine Standortregel im globalen Wählplan steht. Zum Fehler wird es erst, wenn eine Kurzwahl für denselben Benutzer zwei Ziele haben könnte. Test-CsEffectiveTenantDialPlan zeigt dir, welches Ziel tatsächlich entsteht.

Können Kurzwahlregeln den Notruf treffen?

Ja, wenn ihr Muster 110 oder 112 einschließt, etwa bei Durchwahlen ab 100. Teste nach jeder Änderung an Normalisierungsregeln die Notrufnummern mit Test-CsEffectiveTenantDialPlan und lege Kurzwahlbereiche möglichst so, dass sie 110 und 112 gar nicht berühren.

Wie lange dauert es, bis eine Bereinigung wirkt?

Die Zuweisung im Inventar siehst du meist sofort, beim Benutzer kann es laut Microsoft bis zu 24 Stunden dauern. Bei Werten aus dem AD kommt die Laufzeit des Verzeichnissyncs dazu.

Fazit: Jede Nummer braucht genau einen Besitzer

Eine doppelt vergebene Rufnummer ist selten ein Teams-Fehler und fast immer ein Ordnungsfehler. Mal hält ein Konto die Nummer fest, das niemand mehr kennt, mal redet das lokale AD aus Skype-Zeiten noch mit, mal meinen zwei Wählpläne mit derselben Kurzwahl zwei verschiedene Menschen. Die gute Nachricht: Alle drei Fälle lassen sich mit einer Handvoll lesender Befehle eindeutig unterscheiden, angefangen bei Get-CsPhoneNumberAssignment für die Nummer selbst.

Räum in der richtigen Reihenfolge auf: sichern, entscheiden, entfernen, zuweisen, prüfen. Plane das Fenster ein, in dem die Nummer niemandem gehört, und halte die Sicherung bereit, falls du falsch entschieden hast. Danach sorgt ein Rufnummernplan mit klarer Zuständigkeit dafür, dass Herr Berger seinen Ruhestand endlich ungestört genießen kann.

WEITERLESEN · Weiterlesen

› Teams-Telefonie Probleme: die zehn häufigsten Ursachen

› Teams-Anrufprotokolle auswerten: Call Records statt Bauchgefühl

› Teams Direct Routing einrichten

› Kein Wählfeld in Teams: Lizenz, Rufnummer und Enterprise Voice prüfen

 

Dieses Consulting-Dokument steht als PDF zum Download bereit: https://www.boddenberg.de/ArtikelPdf/deine-zentrale-ist.pdf — © Ulrich B. Boddenberg · boddenberg.de

Noch Fragen? Frag Uli

Du hast eine Frage zu diesem Thema? Schreib sie einfach hier rein. Ich antworte persönlich, kurz und ohne Verkaufsgespräch.

Antwort innerhalb von 24 Stunden

Deine Mailadresse nutze ich nur, um dir zu antworten. Kein Newsletter, keine Weitergabe. Zur Datenschutzerklärung