earthshaker
Goto Top

Powershell - Split-Funktion

Guten Tag,

ich würde gerne folgendes Ziel erreichen. Auslesen aller Zeichen vor dem @-Zeichen.

Beispiel
Ausgangswert Ergebnis
User1@firma.de ---> User1
User2@firma.de ---> User2


Für einen einzelnen User klappt das auch folgendermaßen:

$mail=(get-aduser user1 -Properties mail).mail
$mail.Split("@")

Ergebnis=user1

Allerdings schaffe ich es nicht, dies auf ein Array zu übertragen. Nach meinen Recherchen müsste ich hier mit Out-String arbeiten, damit ich überhaupt die Splitmethode anwenden kann.

$mails=(get-aduser -Filter * -Properties mail).mail | Out-String


Wenn ich dann versuche mit einer Schleife zu arbeiten, wende ich die Split-Methode nur noch auf eine Mailadresse an, das bringt mich leider nicht weiter.

foreach ($mail in $mails) {

$mail.Split("@")

}

Man muss ehrlicherweise sagen, dass ich bezüglich Powershell noch ganz am Anfang stehe und meistens nur einfache Get-Befehle abfeuere.
Ich erwarte keine fertige Lösung, aber ein Tipp in welche Richtung ich suchen sollte, wäre super.

Vielen Dank

Content-ID: 462228

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

Ausgedruckt am: 25.11.2024 um 13:11 Uhr

certifiedit.net
certifiedit.net 14.06.2019 um 17:02:32 Uhr
Goto Top
Ich glaube, du brauchst einfach folgenden Ablauf

Schleifenstart
Schleifenabhandlung/Task (siehe Oben)
Ausgabe (Datenarray bzw eben nach Wunsch)

Damit solltest du jew. autarke Tasks haben, die in Summe alles erledigen.
LeeX01
Lösung LeeX01 14.06.2019 aktualisiert um 18:04:22 Uhr
Goto Top
Hi,

damit hast du dann doch bereits alle Adressen in dem Objekt $mails

$mails=(get-aduser -Filter * -Properties mail).mail

und komplett dann so (z.b. mit Ausgabe auf der Console). Du müsstest dann halt noch die User abfangen bei denen das Attribut nicht gesetzt ist.

$mails=(get-aduser -Filter * -Properties mail).mail
foreach ($mail in $mails) {
write-host $mail.Split("@")
}
emeriks
Lösung emeriks 17.06.2019 aktualisiert um 09:37:56 Uhr
Goto Top
Hi,
es geht u.U. auch ohne Schleife, wenn man einfach ein fixes Kriterium findet, um Prefix von Suffix eindeutig zu unterscheiden. Eins könnte "frima.de" sein.

(get-aduser -filter {mail -like "*"} -properties mail).mail.split("@") | ?{!$_.Endswith("firma.de")}  

E.

Edit:
Wobei man dann sogar koplett darauf spekulieren könnte.
(get-aduser -filter {mail -like "*"} -properties mail).mail.replace("@firma.de","")  
EarthShaker
EarthShaker 17.06.2019 um 09:18:23 Uhr
Goto Top
Komisch, das liefert mir nun das korrekte Ergebnis. Muss ich nicht verstehen.

$mails=(get-aduser -Filter {mail -like "*"} -Properties mail).mail  
foreach ($mail in $mails) {
write-host $mail.Split("@")  
}

Wenn es nur eine Firma geben würde, würde ich definitiv diesen Weg bevorzugen

get-aduser -filter {mail -like "*"} -properties mail).mail.replace("@firma.de","")  


Eine Frage hätte ich noch. Das Skript soll den Wert in ein ExtensionAttribute schreiben und dies periodisch wiederholen.
(Neue User, Änderung der Emailadresse etc.)

Würdet Ihr die Werte immer hart überschreiben, oder erst überprüfen, ob der Wert bereits korrekt gesetzt ist ?
Braucht es für solch simple Aktionen Logfiles? (Was sollte schon schief gehen? ^^)
emeriks
Lösung emeriks 17.06.2019 aktualisiert um 09:41:15 Uhr
Goto Top
Zitat von @EarthShaker:
Würdet Ihr die Werte immer hart überschreiben, oder erst überprüfen, ob der Wert bereits korrekt gesetzt ist ?
Wenn Du "mail" bereits auslesen konntest, dann wurde es doch bereits "korrekt gesetzt". Dann kannst Du diesen Wert also auch in ein anderes Attribut schreiben.

Braucht es für solch simple Aktionen Logfiles? (Was sollte schon schief gehen? ^^)
Wie sollen wir das für Dich beantworten? Das hängt doch von den Anforderungen ab, welche man an diese Lösung stellt oder gestellt bekommt.