Bulk User Import aus CSV Datei
Hallo an die Community,
ich habe ein Script geschrieben um anhand einer CSV Datei Bulk User in die AD zu Importieren. Die CSV Datei erfrage ich alle 15 min von einer SQL Datenbank und muss jetzt mein Script so erweitern das User die nicht mehr in der CSV sind auch in der AD gelöscht werden.
Die CSV sieht so aus.................
"ID","Anrede","nachname","vorname","benutzername","gruppe","von","bis","Dom"
"26","herr","Werner","Timo","Werner.Timo","Schüler","2001-11-11","2017-05-17","WI-IT"
Mein Code für die löschung sieht so aus............
$us = Get-ADUser -Filter * -Properties Description | foreach {$_.Description}
if ($us -ne $id)
{
Set-ADUser -Identity $SamAccName -Enabled:$false
}
Der Wert ID wird in AD unter Description gespeichert. CSV ID = PS $id. Habe auch (-eq) Versucht, doch da setzt er gar keinen auf INAKTIV.
Mein Problem ist jetzt, wenn ich den Code durchlaufen lasse setzt er jeden User auf INAKTIV, nur den User den es nicht mehr gibt bleibt AKTIV!
Hätte jemand einen Vorschlag für mich wie ich dieses Problem beheben kann?
ich habe ein Script geschrieben um anhand einer CSV Datei Bulk User in die AD zu Importieren. Die CSV Datei erfrage ich alle 15 min von einer SQL Datenbank und muss jetzt mein Script so erweitern das User die nicht mehr in der CSV sind auch in der AD gelöscht werden.
Die CSV sieht so aus.................
"ID","Anrede","nachname","vorname","benutzername","gruppe","von","bis","Dom"
"26","herr","Werner","Timo","Werner.Timo","Schüler","2001-11-11","2017-05-17","WI-IT"
Mein Code für die löschung sieht so aus............
$us = Get-ADUser -Filter * -Properties Description | foreach {$_.Description}
if ($us -ne $id)
{
Set-ADUser -Identity $SamAccName -Enabled:$false
}
Der Wert ID wird in AD unter Description gespeichert. CSV ID = PS $id. Habe auch (-eq) Versucht, doch da setzt er gar keinen auf INAKTIV.
Mein Problem ist jetzt, wenn ich den Code durchlaufen lasse setzt er jeden User auf INAKTIV, nur den User den es nicht mehr gibt bleibt AKTIV!
Hätte jemand einen Vorschlag für mich wie ich dieses Problem beheben kann?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 234757
Url: https://administrator.de/contentid/234757
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo ivaylo53, Willkommen im Forum!
Ich würde das in deinem Fall so lösen, dass ich mir erst zwei Objekte erstelle. Das eine enthält alle aktuellen User im AD und das andere enthält alle User deiner CSV-Datei. Diese zwei Objekte werden dann mit Compare-Object miteinander verglichen und nur die User welche sich nur im AD befinden und nicht in der CSV-Datei, gelöscht. Das sieht dann grob so aus:
Grüße Uwe
Ich würde das in deinem Fall so lösen, dass ich mir erst zwei Objekte erstelle. Das eine enthält alle aktuellen User im AD und das andere enthält alle User deiner CSV-Datei. Diese zwei Objekte werden dann mit Compare-Object miteinander verglichen und nur die User welche sich nur im AD befinden und nicht in der CSV-Datei, gelöscht. Das sieht dann grob so aus:
# Alle SamAccountNamen der AD User holen
$allADUsers = Get-ADUser -Filter * | %{$_.SamAccountName}
# Alle SamAccountNamen der CSV-User holen
$allCSVUsers = import-csv "C:\bulkUsers.csv" -delimiter "," | %{$_.benutzername}
# Beide Objekte vergleichen und entsprechende User löschen
Compare $allADUsers $allCSVUsers -PassThru | ?{$_.SideIndicator -eq "<="} | %{Remove-ADUser -Identity $_ -Confirm:$false}
habe ich doch eigentlich schon ziemlich genau erläutert ...
?{} entspricht dem where-object
$_ ist das Objekt in der Pipeline, das nutzt du doch oben bei dir auch ... Powershell-Grundlagen
Grüße Uwe
zb. für was die %, ? und das $_
%{} entspricht dem Foreach-Object?{} entspricht dem where-object
$_ ist das Objekt in der Pipeline, das nutzt du doch oben bei dir auch ... Powershell-Grundlagen
am ende stehen. -eq "<=", womit vergleichst du das?
compare vergleicht den Inhalt beider Objekte, also jeweils alle Usernamen(SamAccountName), es gibt dabei nur die Unterschiede aus d.h. ob ein Usernamen nur auf der einen oder anderen Seite existiert. Hierbei filtere ich nur die User raus die nur auf AD-Seite existieren, welche dann gelöscht werden sollten.Das ist die fehler Meldung, die beim ausführen erscheint.........
Da stimmt dann vermutlich noch ein Spaltenname bei dir nicht, oder du hast es falsch angepasst..kann aber nix Wildes sein. Mache das hier nach der Methode des Öfteren.Grüße Uwe