pixel0815
Goto Top

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?
$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  

Content-ID: 435218

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

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

erikro
erikro 01.04.2019 um 16:39:08 Uhr
Goto Top
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

$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. face-wink

hth

Erik
139374
139374 01.04.2019 aktualisiert um 16:44:32 Uhr
Goto Top
Ein Fall für "beaf286644d2c4bb62b6f19b6127f9de4b6a9a1e0e11e6ee79a0dd40038ba246"