pixel0815
Goto Top

Powershell - Active Directory Nummern bearbeiten

Moinsen zusammen,

nach vielem Hin und Her habe bin ich jetzt soweit gekommen und nu hört s gerade irgendwie auf.

Ich möchte im AD die Telefonnummer anpassen - so weit so gut.
Das Skript macht das auch ganz gut inzwischen, allerdings habe ich ein Problem mit Bindestrichen und Schrägstrichen zwischen den Nummern.

Dann bekomme ich den Fehler: Cannot convert value "+494121/111111" to type "System.Double". Error: "Input string was not in a correct format."

Er macht dann folgendes in der Anzeige.

Alte Nummer
+49 4121/111-111 +49 494121 111 111

Ich möchte damit lediglich die Nummern die vorhanden sind in die Internationale Variante konvertieren.

Hier der Code:

 

Add-PSSnapin Quest.ActiveRoles.ADManagemetn

#Benutzeraccounts in OU
$OU = "OU=TestOUT=_Benutzer,DC=kit,DC=pi"  
$users = get-qaduser -SearchRoot $OU -SizeLimit 0

foreach ($user in $users) 
{
    if (($user.PhoneNumber).length -gt 1)
    {
	$user.PhoneNumber -replace "[).( -]"|  

	ForEach-Object 	{
           #format regio nummern
	   	   $i = "{0: +49 ##### ### ###}" -f [double]$_  
			
	   $output = New-Object PSObject
	   $output | Add-Member -MemberType NoteProperty UserName($user.DisplayName)
	   $output | Add-Member -MemberType NoteProperty OldNumber($user.PhoneNumber)
	   $output | Add-Member -MemberType NoteProperty NewNumber($i)
			
	   #set-qaduser $user.dn -PhoneNumber $i
	}
	Write-Output $output
    }
}

Content-ID: 244573

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

Ausgedruckt am: 16.11.2024 um 21:11 Uhr

colinardo
colinardo 24.07.2014 aktualisiert um 16:25:58 Uhr
Goto Top
Moin,
warum ein AD-Zusatzmodul verwenden ? Geht doch alles mit Bordmitteln ... Für dich nochmal länger ausgeschrieben face-wink
Import-Module ActiveDirectory
$OU = "OU=TestOUT=_Benutzer,DC=kit,DC=pi"  
$users = get-aduser -Filter * -SearchBase $OU -Properties telephoneNumber -ResultSetSize $null | ?{$_.telephoneNumber -ne $null}
$log = @()
foreach($user in $users){
    $oldNumber = $user.telephoneNumber
    $newNumber = $oldnumber -replace '^(0|\+49|49)[^\d]*(0?(\d{4}))[^\d]*(\d{3})[^\d]*(\d*)$','+49 $3 $4 $5'  
    #set-aduser $user -Replace @{telephoneNumber=$newNumber}
    $log += New-Object PSObject -Property @{"Username"=$user.Name;"OldNumber"=$oldNumber;"NewNumber"=$newNumber}  
}
$log | select Username,OldNumber,NewNumber | ft
Du solltest aber mal posten ob in allen Nummern der Schrägstrich die Vorwahl vom Rest trennt und ob die Extensions jeweils immer 3 Stellen lang sind. Dann wäre das für uns einfacher face-smile

Grüße Uwe

p.s. Die Kategorie C++ ist wohl nicht sehr passend gewählt, schiebe es in Batch & Shell
pixel0815
pixel0815 24.07.2014 aktualisiert um 15:15:35 Uhr
Goto Top
Da bekomme ich die Meldung " Cmdlet Get-ADUser an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:" .. Mach ich da jetzt was falsch?

Ach ja..Die Nummer wird durch ein / Zeichen getrennt, durch ein - Zeichen, mal durch Blanks, manchmal steht schon ein +49 davor aber die Nummer falsch (beispiel: +49 123456 )
colinardo
colinardo 24.07.2014 aktualisiert um 15:44:13 Uhr
Goto Top
teste mal die oben korrigierte Fassung. Es ist hier nicht so einfach alle Varianten zu erfassen ohne zu wissen wie lang die Orts-Vorwahl ist wenn diese nicht von den anderen Zahlen getrennt ist, dann müsste man dies mit einer Liste von Vorwahlen vergleichen ... Es reicht aber normal schon das alle Sonderzeichen raus sind und +49 vorne dran steht. Ich würde es nicht so kompliziert machen.
pixel0815
pixel0815 24.07.2014 aktualisiert um 15:47:32 Uhr
Goto Top
Das sieht ja richtig gut aus.
Die Vorwahl ist immer 5 Ziffern lang wenn Sie ausgeschrieben wurde. danach folgt die meist 3 stellige Nummer für den Standort und dann die entweder drei oder vierstellige Durchwahl, es gibt aber auch die berühmte 0 wenn eine rkeine durchwahl hat.. Kann ich dir damit etwas helfen`?
colinardo
colinardo 24.07.2014 aktualisiert um 15:55:51 Uhr
Goto Top
regex korrigiert teste nochmal

04101/123-111
04101-123 111
+49 04101 123/111

+49 4101 123 111
+49 4101 123 111
+49 4101 123 111

pixel0815
pixel0815 24.07.2014 aktualisiert um 16:02:09 Uhr
Goto Top
geht. Habe jetzt gerade im AD noch ein Alptraum gefunden.

04101123 111
+49 4101-123111
colinardo
colinardo 24.07.2014 aktualisiert um 16:05:44 Uhr
Goto Top
Die paar kannst du von Hand anpacken ....
pixel0815
pixel0815 24.07.2014 um 16:10:21 Uhr
Goto Top
Wenns ein paar wären, dann mach ich das sehr gerne. von den 4500 Benutzern sind das nach meiner Excelreport Sichtung 424 Telefonnummern. Wenn das noch gehn würde dann mach ich alles andere von Hand und schließe dich in mein Nachtgebet ein :o))))) Die Regex geschichte ist ja sowas von verzwickt :O
colinardo
Lösung colinardo 24.07.2014 aktualisiert um 16:35:33 Uhr
Goto Top
Zitat von @pixel0815:
Wenn das noch gehn würde dann mach ich alles andere von Hand und schließe dich in mein Nachtgebet ein
:o)))))
dann bete mal face-smile, Anpassung siehe oben.

Achtung ganze Zeile 7 korrigiert ...
pixel0815
pixel0815 24.07.2014 um 16:29:37 Uhr
Goto Top
Du bist genial !!! Ich hab schon angefangen !! Ich danke dir 1000000 mal !
colinardo
colinardo 24.07.2014 aktualisiert um 16:45:17 Uhr
Goto Top
Zitat von @pixel0815:
Ich hab schon angefangen !!
[OT]
danke, aber leider hat es hier gerade das Gegenteil bewirkt, hier is grad das ###haus übergelaufen face-wink wat ne Sauerei ....Na dem Seppel der hier grad so'n Monster abgeseilt hat, werd ich aber was erzählen face-smile
[/OT]

Viel Erfolg weiterhin
Grüße Uwe
pixel0815
pixel0815 25.07.2014 um 08:30:23 Uhr
Goto Top
Schön ###e face-sad So heftige Unwetter? Ich bin froh das wir hier nur mit Stromausfällen zu kämpfen haben face-smile
blackhawk17
blackhawk17 18.05.2017 um 13:58:06 Uhr
Goto Top
Hallo,

ich würde mit Deinem Skript gerne Handynummern (mobile) bearbeiten wollen.

Für das Regex habe ich mit den Schlüssel "'^(\+\d{1,4})([\s-])(\(\d{1,4}\))([\s-])(\d{1,9})'" gebaut.

Nun würde ich einfach aus deinem Skript "telefonnumber" gegen "mobile" tauschen und gut.

Was ich aber nicht so ganz verstehe ist wie setze ich die Änderungen jetzt um?

Wie machst du das '+49 $3 $4 $5' fest? Dies zerreißt meinen Schlüssel natürlich.

Hast du da mal einen Tipp zu?
colinardo
colinardo 18.05.2017 aktualisiert um 22:27:07 Uhr
Goto Top
Servus,
Wie machst du das '+49 $3 $4 $5' fest? Dies zerreißt meinen Schlüssel natürlich.
das sind die Submatches (die geklammerten Ausdrücke) im Regex-String, der Reihenfolge nach wie sie auftauchen, also $1 = Inhalt des ersten Klammernpaars, $2 = vom zweiten, usw.

Grüße Uwe
colinardo
Lösung colinardo 23.05.2017, aktualisiert am 01.10.2022 um 13:56:39 Uhr
Goto Top
Auch wenn der Beitrag schon älter ist, eine umfassende Lösung zur einheitlichen Formatierung alle Rufnummern der User im AD mit automatischer Erkennung des Ländercodes und deutscher Vorwahlen habe ich hier gepostet:

Telefonnummern im Active Directory per Powershell formatieren bzw. vereinheitlichen

Grüße Uwe
Oldbrain
Oldbrain 09.04.2024 um 11:21:47 Uhr
Goto Top
Hallo,
ich versuche das Script laufen zu lassen, scheitere aber an folgender fehlermeldung..

MethodInvocationException: C:\Scripts\format_phone_numbers.ps1:78
Line |
78 | … $acode = $acode.Substring(0,$acode.Length - $ecode.Length …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Exception calling "Substring" with "2" argument(s): "length ('-2') must be a non-negative value. (Parameter
| 'length') Actual value was -2."

Kann mir jemand helfen?
Das Format ist momentan +49123412312345 und soll so aussehen +49 1234 123 - 1234

Danke