Frage zu Skript, Abgleich Vorname und Nachname mit AD
Hallo zusammen,
ich habe als Grundlage einen auszug aus einem HR System.
Dort gibt es viele Felder, unter anderem auch Vor und Nachname.
Damit gleiche ich Zeile für Zeile das AD ab.
Die Emailadresse wird auch benötigt, diese liegt in einem externen Mail Forest. Das abziehen der Daten funktioniert auch soweit gut.
Es gibt aber manchmal lücken, und dann sind Email und der Benutzernamen aus dem Mail Forest nicht in der CSV.
Hat da jemand ein Tip für mich? Oder kann einiges zusammengefasst werden?
ich habe als Grundlage einen auszug aus einem HR System.
Dort gibt es viele Felder, unter anderem auch Vor und Nachname.
Damit gleiche ich Zeile für Zeile das AD ab.
Die Emailadresse wird auch benötigt, diese liegt in einem externen Mail Forest. Das abziehen der Daten funktioniert auch soweit gut.
Es gibt aber manchmal lücken, und dann sind Email und der Benutzernamen aus dem Mail Forest nicht in der CSV.
Hat da jemand ein Tip für mich? Oder kann einiges zusammengefasst werden?
$csv = Import-CSV -Path 'W:\Stammdaten.csv' -Delimiter ";" -Encoding Unicode
$aduser = Get-ADUser -Filter * -Properties Surname,Givenname,LastLogonDate,Enabled,msDS-parentdistname,PasswordLastSet
#$aduser = Get-ADUser -Filter * -Properties Surname,Givenname,LastLogonDate,EmailAddress,Enabled,msDS-parentdistname
Function Umlaute-Ersetzen([string]$text){
return [regex]::Replace($text,'(?i)[äöüß]',{param($m) switch -CaseSensitive ($m){'ä'{'ae'};'ü'{'ue'};'ö'{'oe'};'ß'{'ss'};'Ä'{'Ae'};'Ü'{'Ue'};'Ö'{'Oe'}}})
}
$csv | %{
$sn = $_.Nachname
$gn = $_.Vorname
$kst = $_.Kostenstelle
$kst1 = $_.KST
$perso =$_.Vertragsstatus
$personalnr =$_.PNR
$mandant=$_.MAN
$DA=$_.DA
$Anrede=$_.Anrede
$titel=$_.Titel
$Namenszusatz=$_.Namenszusatz
$Vorsatzwort=$_.Vorsatzwort
$user = $aduser | ?{($_.Surname -like "*$sn*" -and $_.GivenName -like "*$gn*") -or ($_.Surname -like (Umlaute-Ersetzen "*$sn*") -and $_.GivenName -like (Umlaute-Ersetzen "*$gn*" ))}
# Mailadresse holen
$filter = "$($user.SamaccountName)*"
$filter1= "$($user.SamaccountName)-6"
$mailinfos= Get-ADUser -Filter {SamAccountname -like $filter -or SamAccountName -like $filter1 } -server "mailserver.mail" -SearchBase "OU=Mandant1234,DC=xxx,DC=xxx -Properties Name,SamAccountName,Mail| select Name,SamAccountName,Mail
$email = $mailinfos.mail -join "; "
$SAM-Mailcenter = $mailinfos.SamAccountName -join "; "
if($user){
$user | select *,@{n='Kostenstelle';e={$kst}},@{n='Vertragsstatus';e={$perso}},@{n='Email-Adresse';e={$email}},@{n='KST-Nummer';e={$kst1}},@{n='Personalnummer';e={$personalnr}},@{n='MandantNr';e={$mandant}},@{n='DA';e={$DA}},@{n='Anrede';e={$anrede}},@{n='Titel';e={$titel}},@{n='Namenszusatz';e={$Namenszusatz}},@{n='Vorsatzwort';e={$Vorsatzwort}},@{n='Mailcenter-SAM';e={$SAM-Mailcenter }}
}else{[pscustomobject]@{SamAccountName="-NICHT GEFUNDEN - Bitte prüfen-";Name="$sn, $gn";Kostenstelle="$kst"}}
} | select Anrede,Titel,Vorsatzwort,Namenszusatz,Surname,Givenname,Name,SamAccountName,Mailcenter-SAM,Email-Adresse,Enabled,LastLogonDate,PasswordLastSet,MandantNr,DA,Personalnummer,KST-Nummer,Kostenstelle,Vertragsstatus,msDS-parentdistname | export-csv "W:\Testliste.csv" -Delimiter ";" -Force -Notype -Encoding Unicode
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 435218
Url: https://administrator.de/contentid/435218
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
2 Kommentare
Neuester Kommentar
Moin,
ein paar Tipps hätte ich:
1. Quellcode richtig formatieren, um ihn lesbarer zu machen.
2. In Skripten keinen Aliases verwenden wie % und ?. Auch das macht den Code lesbarer.
3. Nicht Foreach-Object benutzen, sondern die Foreach-Schleife. Letzteres ist schneller.
https://sid-500.com/2017/08/31/measure-command-a-speed-comparison-foreac ...
https://devblogs.microsoft.com/scripting/getting-to-know-foreach-and-for ...
Also nicht
sondern besser
Ansonsten scheint das Skript zu machen, was Du willst, sofern ich richtig verstanden habe, was Du willst.
hth
Erik
ein paar Tipps hätte ich:
1. Quellcode richtig formatieren, um ihn lesbarer zu machen.
2. In Skripten keinen Aliases verwenden wie % und ?. Auch das macht den Code lesbarer.
3. Nicht Foreach-Object benutzen, sondern die Foreach-Schleife. Letzteres ist schneller.
https://sid-500.com/2017/08/31/measure-command-a-speed-comparison-foreac ...
https://devblogs.microsoft.com/scripting/getting-to-know-foreach-and-for ...
Also nicht
$csv | foreach-Object {...}
sondern besser
foreach($dataset in $csv) {...}
Ansonsten scheint das Skript zu machen, was Du willst, sofern ich richtig verstanden habe, was Du willst.
hth
Erik
Ein Fall für "beaf286644d2c4bb62b6f19b6127f9de4b6a9a1e0e11e6ee79a0dd40038ba246"