kabuntel
Goto Top

Skript für Aktualisierung der User im Active Directory

Hallo,

ich habe die Aufgabe unser Active Directory aufzuräumen. Dazu habe ich aus der Personalabteilung vier Listen (eine Liste pro Firma) bekommen mit den Arbeitnehmern, die bei dieser Firma beschäftigt sind. Für diese gibt es schon Benutzerkonten im Active Directory, dafür aber auch viele Benutzerkonten, die gelöscht werden sollen, da die dazugehörigen Personen nicht mehr für eine der vier Firmen arbeiten. Ich soll diese Benutzerkonten herausfinden und in einer OU verschieben und als inaktiv markieren.
Jetzt meine Frage an die Community:
Wie kann ich mit Hilfe von PowerShell herausfinden, welche Benutzerkonten nicht gebraucht werden mit Hilfe der Listen, die ich bekommen habe.
Also ich brauche ein Skript, das für mich anhand der Einträge in der Liste überprüft, ob ein Benutzerkonto existiert und für die Benutzerkonten zu denen kein Eintrag in der Liste ist, diese Konten in eine OU verschoben werden sollen.
Gruß.
Kabuntel

Content-Key: 384336

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

Printed on: April 24, 2024 at 09:04 o'clock

Member: colinardo
Solution colinardo Aug 24, 2018 updated at 08:27:18 (UTC)
Goto Top
Servus @ Kabuntel ,
das ist schnell gemacht. Beispiel:
CSV mit folgendem Inhalt, die SamAccountNames:
Username
mmuster
kmeier
smusterfrau
Dann folgendes Powershell Skript abgefeuert (Quell OU, Ziel OU und Dateipfad und wenn andere CSV Überschriften auch die jeweilige in Zeile 1 natürlich anpassen, aber das solltest du ja hoffentlich selbst sehen können!):
$list = Import-CSV 'D:\mitarbeiter.csv' -Delimiter ";" | select -Expand Username  
Get-AdUser -Filter * -SearchBase 'OU=MeineFirma,dc=domain,dc=tld' | ?{$_.SamAccountName -notin $list} | Set-AdUser  -Enabled $false -PassThru | Move-ADObject -TargetPath 'OU=DisabledUsers,dc=domain,dc=tld' -Verbose  
Feddich.

Alternativ kannst du den Abgleich auch mit Compare-Object machen, aber da du in dem Bereich offensichtlich noch wenig Erfahrung hast wollte ich dich nicht gleich damit überfordern. Falls es dich trotzdem interessiert hier auch noch diese Variante:
$list = Import-CSV 'D:\mitarbeiter.csv' -Delimiter ";" | select @{n='SamAccountName';e={$_.Username}}  
Compare (Get-AdUser -Filter * -SearchBase 'OU=MeineFirma,dc=domain,dc=tld') $list -Property SamAccountName -PassThru | ?{$_.SideIndicator -eq '<='} | Set-AdUser  -Enabled $false -PassThru | Move-ADObject -TargetPath 'OU=DisabledUsers,dc=domain,dc=tld' -Verbose  

Grüße Uwe
Member: Kabuntel
Kabuntel Aug 24, 2018 at 17:12:37 (UTC)
Goto Top
Vielen Dank für Deine Antwort! Und für den Lösungsvorschlag. Und ja mich interessiert sehr PowerShell, nur leider stehe ich ganz am Anfang und viel Zeit zum Lernen bleibt grad auch nicht
Ich verstehe soweit, was das Skript macht und an welcher Stelle ich was anzupassen habe.
Was ich aber nicht erwähnt habe, ist, dass ich die SamAccountNames nicht habe, sondern nur Vorname, Nachname und Eintrittsdatum aus der Personalabteilung.
Ich müsste also vorher ein Skript erstellen, dass mir bei Übereinstimmung mit Vorname und Nachname den SamAccountName wiederum in einer Liste exportiert.
Hast Du dafür eventuell auch einen Lösungsvorschlag???
Member: colinardo
Solution colinardo Aug 24, 2018 updated at 18:07:02 (UTC)
Goto Top
Zitat von @Kabuntel:
nur leider stehe ich ganz am Anfang und viel Zeit zum Lernen bleibt grad auch nicht
Sehr schlechte Voraussetzungen für einen nachhaltigen PS Einstieg. Dir werden immer irgendwelche Dinge fehlen, da bei der PS die Grundlagen für ein gutes Verständnis essenziell sind.
Was ich aber nicht erwähnt habe, ist, dass ich die SamAccountNames nicht habe, sondern nur Vorname, Nachname und Eintrittsdatum aus der Personalabteilung.
Auch kein Beinbruch, denn Get-Aduser liefert dir diese Infos ebenfalls gleich mit.

Bei einer CSV in folgendem Format
Vorname;Nachname;Eintrittsdatum
Max;Muster;10.05.2010
Helene;Musterfrau;04.06.2002
Reihenfolge der Spalten ist egal, es ist nur wichtig das die Namen der Spaltenüberschriften übereinstimmen und der Delimiter passt.

Folgender Code:
$list = Import-CSV 'D:\mitarbeiter.csv' -Delimiter ";" | %{"$($_.Vorname) $($_.Nachname)"}  
Get-AdUser -Filter * -SearchBase 'OU=MeineFirma,dc=domain,dc=tld' -Properties Surname,Givenname | ?{"$($_.Givenname) $($_.Surname)" -notin $list} | Set-AdUser  -Enabled $false -PassThru | Move-ADObject -TargetPath 'OU=DisabledUsers,dc=domain,dc=tld' -Verbose  
Ich müsste also vorher ein Skript erstellen, dass mir bei Übereinstimmung mit Vorname und Nachname den SamAccountName wiederum in einer Liste exportiert.
Das musst du nicht erst umständlich exportieren der Abgleich geht direkt face-smile.
Hast Du dafür eventuell auch einen Lösungsvorschlag???
S.o.
Member: Kabuntel
Kabuntel Aug 27, 2018 at 09:57:24 (UTC)
Goto Top
Servus Uwe,

jetzt habe ich alles was ich brauche Danke dafür und ein fettes Merci face-smile
Falls ich irgendwo hängen bleibe, werde ich mich einfach rühren :D
Und noch eine Frage an Dich, Experten:
Kannst Du mir irgendeine Seite, Buch oder Video empfehlen um einen guten Einstieg in PS zu bekommen???
Gruß,
Kabuntel
Member: colinardo
Solution colinardo Aug 27, 2018 updated at 17:12:42 (UTC)
Goto Top