bellojr
Goto Top

AD Usernamen in CSV Vergleichen mit Attribut sn und gn

Hallo Leute,
es gab hier schon ein ähnliches Problem , was gelöst würde. Hier der Code:

Import-Module ActiveDirectory

$Ausgabepfad = "C:\temp\export_final.csv"  
$users = Get-ADUser -filter *
$arr=@()

$userCSV = "c:\temp\userlist.csv"  
Import-Csv $userCSV -delimiter ';' | Foreach-Object{  
        $csvuser= $_
        
        if($users | Where-Object {$_.SamAccountName -eq $csvuser.SAMAccountName}) {
            $arr += New-Object psobject -Property @{
                SamAccountName = $csvuser.SAMAccountName
                Status = 'im AD vorhanden'   
            }
        } 
        else {
            $arr += New-Object psobject -Property @{
                SamAccountName = $csvuser.SAMAccountName
                Status = 'nichtmehr im AD, nur in der Liste'   
            }
        } 
}
echo $arr  
echo "Start export:"  
 $arr | export-csv $Ausgabepfad  -NoType -Delimiter ';' -Encoding UTF8  


Ich stehe vor einem ähnlichen Problem. Leider komme ich mit SamAccountname nicht weiter. Hab es mal mit "SN" erfolglos probiert. Wenn man Vorname+Nachname Abfragen könnte wäre es perfect für mich. Geht das ?
Hintergrund: Es wurde jahrelang "Pseudo-Accounts" angelegt ( für eine dig. Anwendung ) die nie gepflegt wurden. Das SamAccountname sieht so aus " devobiMmüller ". Zusätzlich kommen noch viele User dazu noch keinen oder eben diesen "Pseudo-Accounts" AD-Account haben. Ich habe von der Perso eine Liste alles Mitarbeiterbeitenden bekommen.
Bitte helft mir.

Content-Key: 666001

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

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: Doskias
Lösung Doskias 22.04.2021 um 09:15:08 Uhr
Goto Top
Hallo,

bitte die Frage nicht falsch verstehen, aber hast du dir das Skript eigentlich mal angeschaut was du hier gepostet hast. In Zeile 4 steht:
$users = Get-ADUser -filter *

Was ist das Ergebnis davon?
Richtig es wird jeder User abgefragt und du erhälst folgende Infos

DistinguishedName : CN=Test\, Benutzer,OU=xxxx,DC=xxx,DC=xxx
Enabled : True
GivenName : Benutzer
Name : Test, Benutzer
ObjectClass : user
ObjectGUID : [gelöscht]
SamAccountName : It-Test
SID : S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxx
Surname : Test
UserPrincipalName : Test@Domäne.de

Was könnte in dieser Auflistung wohl der Vor- bzw. Nachname sein?

Gruß
Doskias
Mitglied: bellojr
bellojr 22.04.2021 um 11:11:36 Uhr
Goto Top
Hallo,

Danke für die schnelle Antwort.
Das verstehe ich nicht was Du meinst. Ich habe das Script im originalen ausgeführt. Das Ergebniss ist eine Liste wo steht das keiner der User in meiner Liste im Ad einen Account hat. Aber das war mir ja vorher klar, wegen der oben beschrieben Problematik. Meine csv besteht aus einer Spalte ( sn). Ich habe jetzt im Script alles was samaacountname war gegen SN ( surname ) ausgetauscht. In der Liste tauchen jetzt die Nachnamen auf , aber mit der Meldung :nicht mehr im AD, nur in der Liste, was nicht stimmt. Zusätzlich wegen Namensdopplungen möchte ich noch die Vornamen abfragen (csv muss ich dann noch anpassen).
Mitglied: Doskias
Doskias 22.04.2021 um 11:27:23 Uhr
Goto Top
Wenn du noch mehr Felder brauchst empfehle ich dir einmal
 get-aduser [SamAccountName] -Properties * 
Dann erhältst du eine alphabetische Auflistung aller AD-Felder des Benutzers. Vielleicht findest du dort ja noch andere Felder, die dir bei der Identifizierung helfen können.

Je nachdem wie eure "PSeudo-Accounts" genutzt wurden, könnte der logonCount oder das LastLogonDate ja weiterhelfen.

Gruß
Doskias
Mitglied: bellojr
bellojr 23.04.2021 um 10:33:48 Uhr
Goto Top
Guten Morgen,
hmmm. nicht ganz was ich suche. Vielleicht hab ich mich schlecht ausgedrückt..Ich versuchs nochmal.Vergest mal bitte den Code den ich gepostet habe.
Ich habe eine CSV-Datei mit zwei Spalten ( Vorname, Nachname ).Diese möchte ich mit allen Vor,-und Nachnamen der AD Accounts vergleichen.
Die dann im AD nicht gefunden werden möchte ich aufgelistet haben, damit ich Sie anlegen kann.
Mitglied: Doskias
Lösung Doskias 26.04.2021 um 10:36:16 Uhr
Goto Top
Und wo ist jetzt dein Problem? Also voran scheitert es?

Mein Vorschlag:
$fehlende=@()
$userPfad="c:\temp\"  
$userCSV="Mappe1.csv"  
$user_Log="fehlt.csv"  
$CSV_Log= $userPfad+$user_Log
$CSV_Path=$userPfad+$userCSV

if (Test-Path $CSV_Log) {remove-item $CSV_Log -Force}

$Liste=import-csv $CSV_Path -delimiter ';'  
foreach ($datensatz in $Liste)
{
$AD_Vorhanden={}
$AD_Vorhanden=Get-ADuser -filter *|? givenname -like $datensatz.vorname | ? surname -like $datensatz.name
# $AD_Vorhanden
if ($AD_Vorhanden.length -eq 0) {write-host $datensatz.vorname $datensatz.name "existiert nicht im AD"  
# pause
$fehlende=$fehlende+$datensatz
}
}
$fehlende | export-csv $CSV_Log  -NoType -Delimiter ';' -Encoding UTF8  

Zeile 1-6 definierst du die Variablen die du im Skript über rauchst (und brauchst )
Zeile 8 löscht die Log-Datei falls eine existiert
Zeile 10 liest deine CSV ein
Zeile 11 bis 20 geht dann Deine Quelldatei Zeilenweise durch und schaut ob ein Benutzer mit der Kombination vor und Nachname vorhanden ist.
Zeile 16 gibt dir das Ergebnis dann als Text aus, wenn der User nicht vorhanden ist.
Zeile 17 (auskommentiert) würde auf eine Bestätigung zum Fortfahren von dir warten.
Zeile 18 Sammelt die fehlenden User
Zeile 21 erzeugt dann aus der Sammlung eine CSV-Datei auf Basis deiner importierten CSV-Datei mit den fehlenden Einträgen

Theoretisch könntest du anstatt die CSV dann händisch abzuarbeiten das Ganze mit new-aduser auch noch automatisieren.

Gruß
Doksias

PS: Und ja ich weiß, die Foreach-Schleife ließe sich auch deutlich kürzer Fassen, aber ich persönlich finde, dass es so wie es hier steht einfacher zu erklären ist.

Nachtrag: Ich habe das ganze direkt in der ISE auf einem DC ausgeführt. Daher komme ich ohne Import-Module ActiveDirectory aus. Das muss ggf. noch ergänzt werden.
Mitglied: bellojr
bellojr 27.04.2021 um 10:54:29 Uhr
Goto Top
Super. Vielen Dank. Das war der richtige Ansatz den ich brauchte. Hatte noch einige Herausforderungen , wovon ich die meisten lösen konnte.

1. Traue keiner Excel von der Perso face-smile - Neu gemacht ( Leerzeichen raus)
2. Umlaute aus der CSV entfernt ( Excel, Strg+H ) umlaute in AD entfernt für SN,GN – das war mir schon immer ein Dorn im Auge und gab Probleme mit anderen Schnittstellen. Ein Script dafür gibt’s auch auf administrator.de
3. Script ein bissen angepasst (dauert sonst ewig in meiner Umgebung) mit Searchbase und Filtereinstellungen

Einige Kleinigkeiten werde ich wohl händisch machen müssen, da mache Benutzer in der Ausgabenliste auftauchen, die es bereits gibt. Ein Grund ist ein Dr.med usw. im Vornamen Feld oder in der Liste von der Perso sind in der Spalte Vornamen mehrere Vornamen eingetragen.

$fehlende=@()
$userPfad="c:\temp\"
$userCSV="userlistGNSN_ohne_umlaute.csv"
$user_Log="fehlt.csv"
$CSV_Log= $userPfad+$user_Log
$CSV_Path=$userPfad+$userCSV

if (Test-Path $CSV_Log) {remove-item $CSV_Log -Force}

$Liste=import-csv $CSV_Path -Encoding Default -delimiter ';'
foreach ($datensatz in $Liste)
{
$AD_Vorhanden={}
$AD_Vorhanden=Get-ADuser -filter {enabled -eq "true" -and objectclass -eq "user" -and userPrincipalName -like "*XXXX.local*"} -SearchBase "OU=XXXX,DC=XXXX,DC=local" |? givenname -like $datensatz.vorname | ? surname -like $datensatz.name
  1. $AD_Vorhanden
if ($AD_Vorhanden.length -eq 0) {write-host $datensatz.vorname $datensatz.name "existiert nicht im AD"
  1. pause
$fehlende=$fehlende+$datensatz
}
}
$fehlende | export-csv $CSV_Log -NoType -Delimiter ';' -Encoding UTF8