xy2018
Goto Top

Massen Anpassung AD

Hallo,

ich möchte bei allen Userkonten im Active Directory die Rufnummer auf das E.164 Standard anpassen. Kurze google Suche ergab, dass es wohl bereits fertige Skripte oder Lösungen gibt, da ich so eine Massenanpassung jedoch noch nicht gemacht habe bin ich da vorsichtig zumal ich nichtmal weiss ob wirklich jede einzelne Tel. Nr. das selbe Format hat was für den Skript wichtig wäre?

Eine andere Idee die ich hatte wäre es händisch anzupassen, dafür möchte ich mich aber nicht durch die GUI Klicken sondern am besten alle User mit der Tel Nr exportieren und in eine Excel Tabelle etc. zu ändern danach zurück importieren.

Oder gibt es andere Möglichkeiten / Tools für solche Zwecke die ich jetzt übersehe?

Content-ID: 368203

Url: https://administrator.de/contentid/368203

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

emeriks
emeriks 15.03.2018 um 13:49:30 Uhr
Goto Top
Hi,
von wieviel Benutzerkonten reden wir denn?

am besten alle User mit der Tel Nr exportieren und in eine Excel Tabelle etc. zu ändern danach zurück importieren.
Na dann mach doch.
Siehe z.B. LDIFDE
Das exportiert zwar nicht tabellarisch, aber Du findest dazu im Web massig Anleitungen, wie man mit diesem Tool umgeht.

Oder Powershell.
siehe Get-ADUser und Set-ADUser
mit Get-ADUser abfragen und als Tabelle exportieren. DistingusihedName und telephoneNumber
Im Excel importieren und Bearbeiten
mit Excel und "Verketten" die Befehle zum Ändern generiern (Set-ADuser ....)
genrierten Befehle ausfühen

E.
colinardo
Lösung colinardo 15.03.2018, aktualisiert am 19.03.2018 um 09:27:52 Uhr
Goto Top
Das war schon oft ein Thema, habe ich hier schon mal vor einiger Zeit ein Skript dazu gepostet
Telefonnummern im Active Directory per Powershell formatieren bzw. vereinheitlichen

Grüße Uwe
emeriks
emeriks 15.03.2018 um 13:57:13 Uhr
Goto Top
Ha, ha
Da haste ja das ganze ONB eingebaut. face-wink
colinardo
colinardo 15.03.2018 aktualisiert um 14:03:33 Uhr
Goto Top
Zitat von @emeriks:

Ha, ha
Da haste ja das ganze ONB eingebaut. face-wink
Ja das ist der Erkennung der diversen Nummern-Variationen geschuldet, wie willst du sonst "zuverlässig" Ortsvorwahlen und Ländervorwahlen auseinander halten, da gibt es einige Übereinstimmungen und nicht jede Nummer wird mit Trennen oder Leerzeichen getrennt, da hält sich ja kaum einer dran.
XY2018
XY2018 19.03.2018 um 18:09:22 Uhr
Goto Top
Danke für den Tipp, das arbeitet aber "Live" an dem AD wäre ein Umweg über eine CSV o.ä. möglich (um erstmal zu testen)?

Wenn ich das richtig verstanden habe müsste ich dann einfach "$changed " in eine Datei umleiten lassen?

Funktioniert das auch bei uneinheitlich eingegebenen Nummern? Im extremfall z.B. kombinationen wie 01234/115818
oder 01234/1234-123 oder 01234 123 123 123 usw.
colinardo
Lösung colinardo 19.03.2018 aktualisiert um 18:19:33 Uhr
Goto Top
Zitat von @XY2018:

Danke für den Tipp, das arbeitet aber "Live" an dem AD wäre ein Umweg über eine CSV o.ä. möglich (um erstmal zu testen)?
Klar.
Wenn ich das richtig verstanden habe müsste ich dann einfach "$changed " in eine Datei umleiten lassen?
Einfach Zeile 90 weg lassen und dir die Hashtable $changed in der Konsole ausgeben lassen, oder mit Set-Content in eine Datei umleiten lassen.
Funktioniert das auch bei uneinheitlich eingegebenen Nummern? Im extremfall z.B. kombinationen wie 01234/115818
oder 01234/1234-123 oder 01234 123 123 123 usw.
Selbstverständlich., das ist der Sinn des ganzen Aufwands.
XY2018
XY2018 20.03.2018 um 16:59:23 Uhr
Goto Top
Top Danke funktioniert, indem ich die Zeile 90 weggelassen habe so sehe ich schon mal wie das Skript mit den Tel.Nr. umgeht.
Ich bräuchte nur noch Hilfe bei 2 Punkten

1.) Soll die Nr. gänzlich ohne Leerzeichen sein (E.164 Standard) also +49123456789

2.) Eine Ausgabe in eine Datei und dann die Hilfe wie ich ein Set-AdUser Skript schreibe der diese Datei verarbeitet und ins AD schreibt. Möchte/Muss diese Trennung vom eigentlichem Skript haben, also Daten erst verarbeiten - Anschauen - Dann erst schreiben lassen mit getrenntem Skript.

(Die "nerverei" basiert nicht an der unwilligkeit zum Lernen sondern eher an Zeitmangel sich da mehr im Detail reinzufuchsen, habe tieferes Wissen nur im Batchbereich daher komm ich schon klar bei den Grundlegenden Sachen aber wenns so in tiefergehendes geht habe ich ein besseres Gefühl wenn es derjenige übernimmt der den Skript geschrieben hat und sich mehr auskennt.)

Danke dafür!
XY2018
XY2018 21.03.2018 um 11:20:27 Uhr
Goto Top
Nr 1.) habe ich lösen können

Zeile 58 von
    return "+$ccode $acode $rest".trim()  
einfach in
    return "+$ccode$acode$rest".trim()  

geändert also die Leerzeichen entfernt :D

Nr. 2 wäre noch offen
XY2018
XY2018 21.03.2018 aktualisiert um 14:00:00 Uhr
Goto Top
Für Nr. 2 würde mir erstmal reichen wenn ich den ganzen Befehl bevor er ausgeführt wird einmal sehe und dann manuell bestätigen kann.

Leider verstehe überhaupt nicht was da im Rahmen von $_ und $changed ausgelöst wird und wie sich der Befehl "Set-AdUser" zusammensetzt.
Sehe ich diese eine kritische Zeile während der Ausführung in Klartext ist es schon was anderes
XY2018
XY2018 22.03.2018 um 08:54:40 Uhr
Goto Top
Habe es nun so gelöst, das reicht mir als "Sicherheit"

$_ | Set-ADUser -Replace $changed **-Confirm**

So werde ich vor jedem Ausführen der Zeile gefragt und sehe welches Objekt dabei angefasst wird. (Leider nicht was genau geschrieben wird, aber da ja paar Zeilen vorher ohnehin der Inhalt von "$changed" angezeigt wird nehme ich das so hin)

@colinardo TOP! Vielen dank für das Skript welches mir viel Zeit gespart hat