Doppelte Rufnummern in Teams bereinigen
Benutzer, Ressourcenkonto, AD-Altlasten und Wählpläne im BlickRufnummer in Teams doppelt vergeben: Benutzer, Ressourcenkonto, Altlasten und Wählpläne bereinigen

|
WISSEN Alles zur Teams-Telefonie: Direct Routing, SBC, Wählpläne, Routing, Notruf und Betrieb an einem Ort. |
BERATUNG Rufnummern aus drei Systemen, keiner weiß, welches stimmt? Wir räumen mit dir auf, ohne dass die Zentrale schweigt. |
SCHULUNG Für Admins, die Rufnummern, Ressourcenkonten und Wählpläne in Teams sicher verwalten wollen. |
|---|
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.

|
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.

|
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.

|
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 |
|---|
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.

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. |
|---|

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.

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.

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











