mguenth83
Goto Top

Powershell String selektieren....

Hi,

Ich wollte Euch mal fragen wie Ihr das machen würdet...ich habe eine Liste von AD Usern mit Telefonnummer und will dort die letzten 4 Zeichen auslesen. Blöd ist nur das diese in einem sehr komischen Format sind..

Hier mal ein Beispiel:

Name: Telefonnummer
testuser +49 8558 678 1983

Ich brauche jetzt quasi die letzten Zahlen nach dem dritten Leezeichen.

Leider kann ich nicht die letzten vier Ziffern nehmen weil manche User auch ne Durchwahl mit 3,2 bzw. 1 Ziffer haben.
Das heißt ich müsste Powershell sagen das er die letzten Zahlen hinter dem dritten Leerzeichen nehmen soll.

Hoffe jemand kann helfen...

Gruß
Matze

Content-Key: 226662

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

Printed on: April 20, 2024 at 03:04 o'clock

Member: colinardo
colinardo Jan 14, 2014 updated at 22:22:49 (UTC)
Goto Top
Hello again Matze,
machst du ganz einfach so;
$tel = "+49 8558 678 1983"  
$tel.Split(" ")[3].Substring(0,4)  
oder für Advanced User mit Regular Expressions und noch mehr Möglichkeiten bei speziellen Fällen:
# Hilfsfunktion für RegEx GroupMatching (braucht dich erst mal nicht zu interessieren)
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}}

# Beispiel Telefonnummer
$tel = "+49 8558 678 1983"  

#Extrahiere den Part mit der obigen Funktion und einem passenden RegEx Pattern
$tel | Get-Matches "\+?[\d]+ \d+ \d+ (\d{4})" 1  
Grüße Uwe
Member: mguenth83
mguenth83 Jan 14, 2014 updated at 18:25:05 (UTC)
Goto Top
Hi Uwe,
ich kann nicht mehr das Powershell mach mich fertig...
weiss wie immer net weiter...will wieder formatieren

$CFG = Get-Content -Path '\\contoso\JustDial.cfg'  
$Users = get-aduser -Filter * -properties * | where {$_.telephonenumber -ne $NULL} | Select-Object SamAccountname,telephonenumber
foreach ($tel in $Users.telephonenumber){
$tel.Split(" ")[3]  
}

Ich will einfach nur ne Tabelle wo ich Usernamen und die Durchwahl (letzten nummern) drin habe.

Bis jetzt habe ich die kompletten Nummern und ne foreach schleife die mir die durchwahlen gibt.

Das Projekt ist eine XML Datei zu verändern mit der richtigen Durchwahl und eine Datei in %Username%.JustDail.cfg zu ändern.

Gruß
Matthias
Member: colinardo
colinardo Jan 14, 2014, updated at Jan 15, 2014 at 16:52:57 (UTC)
Goto Top
$Users = get-aduser -Filter * -properties * | where {$_.telephonenumber -ne $NULL} | Select-Object SamAccountname,@{Name="Durchwahl";expression{$_.telephonenumber.Split(" ")[3].Substring(0,4)}}  
Wenn du dich jetzt wieder fragst "Was is das nun schon wieder?" sei dir diese Seite dazu empfohlen:
http://technet.microsoft.com/en-us/library/ff730948.aspx

Um die Sachen in ein vorhandenes XML zu speichern brauche ich aber mehr Infos zum Aufbau der XML-Datei.
Poste diese mal hier, dann melde ich mich dazu wieder face-wink

Grüße Uwe

p.s. lass uns bei Zeiten mal ein Teamviewer Meeting halten dann zeige ich dir ein paar Tipps und Tricks dazu...
Member: mguenth83
mguenth83 Jan 16, 2014 at 10:19:46 (UTC)
Goto Top
Hi,
habe jetzt so gelöst...wahrscheinlich total Naphaft aber es geht...


$CFG = Get-Content -Path '\\contoso\JustDail\JustDial.cfg'  
$Users = get-aduser -Filter * -properties * | where {$_.telephonenumber -ne $NULL} | Select-Object SamAccountname,telephonenumber
$XML = Get-Content "\\contoso\XML\JustDial.cfg"  
foreach ($user in $Users){
$Durchwahl = ($user.telephonenumber).Split(" ")[3]  
$Nick = $User.SamAccountname
$Path = "\\contoso\XML\Output\$Nick-JustDial.cfg"  

if (Test-Path -Path $Path){
Write-Host "Benutzer ""$Nick"" wurde schon eine Konfig erstellt"  
}
if (($Durchwahl -ne "0") -or ($Durchwahl -ne $NULL)){  
$XML.Replace("XXXX","$Durchwahl") | Out-File "$Path"  

$Test0= Get-Content -Path $Path

if (Select-String -Path $Path -SimpleMatch '<Value></Value>'){  
Remove-Item $Path -Force
}
}
}