AD Usernamen in CSV Vergleichen
Hallo Liebe Community,
Ich hatte zu diesem Thema schon einen ähnlichen Thread offen, habe das Thema vorerst auf Eis gelegt gehabt da ich einen Workaround mit einem Teil des Skriptes darstellen konnte nun ist die Anforderung doch wieder aufgetaucht und ich muss mich erneut damit befassen.
Ihr konntet mir damals gut weiterhelfen jedoch komme ich mit dem Letzen also ein guter Ansatz in den Teil meines Skriptes nicht ganz weiter ich habe das Auslesen der User.
Mit SearchBase sAMAccountName kann ich Arbeiten. Ich Brauche jedoch ein if der ausgibt das der User gefunden ist oder nicht. Und auch fehlt mir das else, das mir die Nicht existierenden User in der Liste ausgibt.
Hier mein nicht ganz so schlauer Ansatz - Kann gar nicht so funktionieren ich weiß, ich wollte nur darstellen was ich bereits habe.
Ich würde mich um eure Hilfe sehr freuen da es im Moment echt drängt und ich ohne dieses Script in meinem vorhaben nicht weiterkomme.
Ich brauche richtige Ansätze und Verknüpfungen.
Gruß,
Hainoon -Euer Script N00b
Ich hatte zu diesem Thema schon einen ähnlichen Thread offen, habe das Thema vorerst auf Eis gelegt gehabt da ich einen Workaround mit einem Teil des Skriptes darstellen konnte nun ist die Anforderung doch wieder aufgetaucht und ich muss mich erneut damit befassen.
Ihr konntet mir damals gut weiterhelfen jedoch komme ich mit dem Letzen also ein guter Ansatz in den Teil meines Skriptes nicht ganz weiter ich habe das Auslesen der User.
Mit SearchBase sAMAccountName kann ich Arbeiten. Ich Brauche jedoch ein if der ausgibt das der User gefunden ist oder nicht. Und auch fehlt mir das else, das mir die Nicht existierenden User in der Liste ausgibt.
Import-Module ActiveDirectory
$OU_ADUSER="OU=Benutzer,OU=X,OU=X,DC=X,DC=de"
$userCSV="U:\export3.csv"
Import-Csv $userCSV -delimiter ';' | select SAMAccountName
$csv_username = $_.SAMAccountName
$user = Get-aduser -Filter * -SearchBase $OU_ADUSER | ?{$_sAMAccountName -eq $csv_username}
if ($user){
# User wurde gefunden, info bleibt aus
$info= @{}
}else{
$csv_username| export-csv -path "U:\user.csv"
}
Hier mein nicht ganz so schlauer Ansatz - Kann gar nicht so funktionieren ich weiß, ich wollte nur darstellen was ich bereits habe.
Ich würde mich um eure Hilfe sehr freuen da es im Moment echt drängt und ich ohne dieses Script in meinem vorhaben nicht weiterkomme.
Ich brauche richtige Ansätze und Verknüpfungen.
Gruß,
Hainoon -Euer Script N00b
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 334148
Url: https://administrator.de/forum/ad-usernamen-in-csv-vergleichen-334148.html
Ausgedruckt am: 22.12.2024 um 18:12 Uhr
35 Kommentare
Neuester Kommentar
# get all user accounts from ad, include just the SamAccountName,DistinguishedName,HomeDirectory attributes
$users = Get-ADUser -filter *
$userCSV="C:\Users\user\Desktop\userlist.csv"
Import-Csv $userCSV -delimiter ';' | Foreach-Object{
$csvuser= $_;
if($users | Where-Object {$_.SamAccountName -eq $csvuser.SAMAccountName}) {echo true} else {echo false}
}
Hi
aktuell exportierst du jedes mal erneut in die CSV. ein " -Append" würde helfen, ist aber eine schlechte herangehensweise.
Anstatt jedes mal den Wert eine Variable zu schmeissen und dann einzeln in die Datei zu schreiben, solltest du alle Werte nacheinander in ein Array werfen und dieses dann, nachdem die Foreach-Schleife fertig ist, in einem Rutsch in die CSV schreiben. Effizienter, schneller, schöner
aktuell exportierst du jedes mal erneut in die CSV. ein " -Append" würde helfen, ist aber eine schlechte herangehensweise.
Anstatt jedes mal den Wert eine Variable zu schmeissen und dann einzeln in die Datei zu schreiben, solltest du alle Werte nacheinander in ein Array werfen und dieses dann, nachdem die Foreach-Schleife fertig ist, in einem Rutsch in die CSV schreiben. Effizienter, schneller, schöner
aber Google hat noch eine Ausgabe bei dir oder? ;)
https://www.windowspro.de/script/arrays-powershell-anlegen-aendern-ausle ...
https://www.windowspro.de/script/arrays-powershell-anlegen-aendern-ausle ...
$arr=@()
$arr += "hallo"
$arr += "welt"
echo $arr
Import-Module ActiveDirectory
$OU_ADUSER="OU=Benutzer,OU=X,OU=X,DC=X,DC=de"
$userCSV="U:\export3.csv"
(Import-Csv $userCSV -delimiter ';') | ?{(Get-aduser $_.SAMAccountName -SearchBase $OU_ADUSER -EA SilentlyContinue) -eq $null} | export-csv -path "U:\user.csv" -Delimiter ";" -NoType -Encoding UTF8
??? Nö.
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powe ...
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powe ...
Btw. geht das übrigens mit Compare-Object auch ...
Bulk User Import aus CSV Datei
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powe ...
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powe ...
Btw. geht das übrigens mit Compare-Object auch ...
Bulk User Import aus CSV Datei
Zitat von @Hainoon:
Ich bekomme nur Crytische zeichen und je nach dem wie ich die Codierung ändere verändern sich diese oder ich bekomme garnix
Dann musst du bei Import-CSV die korrekte Kodierung deiner CSV-Datei mit -Encoding angeben!!Ich bekomme nur Crytische zeichen und je nach dem wie ich die Codierung ändere verändern sich diese oder ich bekomme garnix
Funktioniert das Skript bei dir ?
Ja! Ich mach Powershell schon 10 Jahre.-Encoding
Au möhr, du bist mit ja ein "Spezialist", les mal die beiden Links oben dann siehst du was du falsch gemacht hast. Du musst natürlich das passende Encoding angeben wenn die PS selbst das passende Encoding nicht ermitteln kann!Geht einwandfrei, ansonsten existieren alle User der CSV im AD.
i'm out'a here...
$aUsers = Import-Csv $inFile
Tja wenn du halt nicht in der Lage bist den Delimiter für die CSV richtig (Komma statt Semikolon) anzugeben kann dir keiner mehr helfen!!!!!
Logisch weil ohne Angabe des Delimiters bei Import-CSV immer das Komma genommen wird, das hattest du uns leider verschwiegen! Hätte man aber mit etwas Grips auch selber sehen können.
Und es geht definitiv, du hast halt noch viel zu lernen mein Freund.
Und es geht definitiv, du hast halt noch viel zu lernen mein Freund.
ohje
da haste dir aber was blödes zusammenkopiert ;)
1. macht das ding für jeden Benutzer einen Aufruf gegen das AD. Sehr unschön da langsam.
2. erstellst du hier tatsächlich nur eine Textdatei, kein ordentliches CSV
3. wirft die Fehler, wenn ein User nicht existiert. Mag für deine zwecke ausreichen, ist aber eine äusserst unschöne Art.
4. zumindest bei mir erzeugt das keinen ordentlichen Inhalt in der Ausgabedatei sondern nur quark.
Abgesehen davon hast du das Wichtigste nicht erreicht: Etwas gelernt.
Du bist den weg des geringsten Widerstandes gegangen und hast irgendwas aus google zusammengewürfelt das jetzt eher schlecht als recht läuft.
Sehr schade, denn dein Bsp. davor war fast fertig. Wie ein Array funktioniert, wie eine schleife funktioniert und wie du ein Custom Objekt mit all seinen schönen Vorteilen geniessen kannst, hast du jetzt leider verpasst.
Trotzdem noch zum lernen eine kurz überflogene Version:
da haste dir aber was blödes zusammenkopiert ;)
1. macht das ding für jeden Benutzer einen Aufruf gegen das AD. Sehr unschön da langsam.
2. erstellst du hier tatsächlich nur eine Textdatei, kein ordentliches CSV
3. wirft die Fehler, wenn ein User nicht existiert. Mag für deine zwecke ausreichen, ist aber eine äusserst unschöne Art.
4. zumindest bei mir erzeugt das keinen ordentlichen Inhalt in der Ausgabedatei sondern nur quark.
Abgesehen davon hast du das Wichtigste nicht erreicht: Etwas gelernt.
Du bist den weg des geringsten Widerstandes gegangen und hast irgendwas aus google zusammengewürfelt das jetzt eher schlecht als recht läuft.
Sehr schade, denn dein Bsp. davor war fast fertig. Wie ein Array funktioniert, wie eine schleife funktioniert und wie du ein Custom Objekt mit all seinen schönen Vorteilen geniessen kannst, hast du jetzt leider verpasst.
Trotzdem noch zum lernen eine kurz überflogene Version:
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
Hallo Leute,
vielen Dank für den "Lernstoff". 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 helf mir
vielen Dank für den "Lernstoff". 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 helf mir