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-Key: 244573

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

Printed on: April 23, 2024 at 23:04 o'clock

Member: colinardo
colinardo Jul 24, 2014 updated at 14:25:58 (UTC)
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
Member: pixel0815
pixel0815 Jul 24, 2014 updated at 13:15:35 (UTC)
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 )
Member: colinardo
colinardo Jul 24, 2014 updated at 13:44:13 (UTC)
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.
Member: pixel0815
pixel0815 Jul 24, 2014 updated at 13:47:32 (UTC)
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`?
Member: colinardo
colinardo Jul 24, 2014 updated at 13:55:51 (UTC)
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

Member: pixel0815
pixel0815 Jul 24, 2014 updated at 14:02:09 (UTC)
Goto Top
geht. Habe jetzt gerade im AD noch ein Alptraum gefunden.

04101123 111
+49 4101-123111
Member: colinardo
colinardo Jul 24, 2014 updated at 14:05:44 (UTC)
Goto Top
Die paar kannst du von Hand anpacken ....
Member: pixel0815
pixel0815 Jul 24, 2014 at 14:10:21 (UTC)
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
Member: colinardo
Solution colinardo Jul 24, 2014 updated at 14:35:33 (UTC)
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 ...
Member: pixel0815
pixel0815 Jul 24, 2014 at 14:29:37 (UTC)
Goto Top
Du bist genial !!! Ich hab schon angefangen !! Ich danke dir 1000000 mal !
Member: colinardo
colinardo Jul 24, 2014 updated at 14:45:17 (UTC)
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
Member: pixel0815
pixel0815 Jul 25, 2014 at 06:30:23 (UTC)
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
Member: blackhawk17
blackhawk17 May 18, 2017 at 11:58:06 (UTC)
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?
Member: colinardo
colinardo May 18, 2017 updated at 20:27:07 (UTC)
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
Member: colinardo
Solution colinardo May 23, 2017, updated at Oct 01, 2022 at 11:56:39 (UTC)
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
Member: Oldbrain
Oldbrain Apr 09, 2024 at 09:21:47 (UTC)
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