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
Please also mark the comments that contributed to the solution of the article
Content-Key: 435218
Url: https://administrator.de/contentid/435218
Printed on: May 3, 2024 at 13:05 o'clock
2 Comments
Latest comment
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"