Kuddel071089 9 Geschrieben 17. Januar 2018 Melden Teilen Geschrieben 17. Januar 2018 (bearbeitet) Hallo zusammen, ich bin gerade dabei ein Skript zu schreiben, welches unser AD von Altlasten befreien soll. Ziel ist es, alle User zu deaktivieren, die sich länger als 180 Tage nich am System angemeldet haben. Dazu habe ich folgendes Skript geschrieben, wo ich leider am Vergleich scheitere $tage = 180 #Abfrage aller aktiven User $aktive_user = Get-ADUser -Filter {enabled -eq $true} -SearchBase "OU=****,DC=****-ad,DC=local" -Properties * | Sort #Ablaufdatum von vor X Tagen definieren $ablaufdatum = (get-date -date ((get-date).AddDays(-$tage)) -Format "dd.MM.yyyy"); "Heute vor 180 Tagen: $ablaufdatum" "" #Abfrage der letzten Anmeldung jedes Users an den drei DCs foreach($user in $aktive_user) {$letzte_anmeldung_dc1 = Get-ADUser $user.SamAccountName -Properties * -Server DC1 | Select LastLogon$letzte_anmeldung_dc2 = Get-ADUser $user.SamAccountName -Properties * -Server DC2 | Select LastLogon$letzte_anmeldung_dc3 = Get-ADUser $user.SamAccountName -Properties * -Server DC3 | Select LastLogon#Datum formatieren fü den Vergleich$letzte_anmeldung_dc1 = [dateTime]::FromFileTime($letzte_anmeldung_dc1.LastLogon).ToString('dd.MM.yyyy')$letzte_anmeldung_dc2 = [dateTime]::FromFileTime($letzte_anmeldung_dc2.LastLogon).ToString('dd.MM.yyyy')$letzte_anmeldung_dc3 = [dateTime]::FromFileTime($letzte_anmeldung_dc3.LastLogon).ToString('dd.MM.yyyy')#Check ob der User sich länger als X Tage nicht angemeldet hatif($letzte_anmeldung_dc1 -lt $ablaufdatum -and $letzte_anmeldung_dc2 -lt $ablaufdatum -lt $letzte_anmeldung_dc3 -gt $ablaufdatum)) { "Der User $($user.SamAccountName) ist abgelaufen / Letzte Anmeldungen: DC1: $letzte_anmeldung_dc1, DC2: $letzte_anmeldung_dc2; DC3: $letzte_anmeldung_dc3" } } Irgendwie wird beim Vergleich nur der erste Tag im Datum verglichen. Vielen Dank schon einmal bearbeitet 17. Januar 2018 von Kuddel071089 Zitieren Link zu diesem Kommentar
NilsK 2.937 Geschrieben 17. Januar 2018 Melden Teilen Geschrieben 17. Januar 2018 Moin, nicht selbst bauen, das Thema ist seit Jahren abschließend gelöst. [Leichenzählung in Active Directory | faq-o-matic.net]https://www.faq-o-matic.net/2011/08/29/leichenzhlung-in-active-directory/ Gruß, Nils Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 17. Januar 2018 Autor Melden Teilen Geschrieben 17. Januar 2018 Moin, nicht selbst bauen, das Thema ist seit Jahren abschließend gelöst. [Leichenzählung in Active Directory | faq-o-matic.net] https://www.faq-o-matic.net/2011/08/29/leichenzhlung-in-active-directory/ Gruß, Nils Hallo Nils, vielen Dank für die schnelle Antwort. Mit dem PS Skript wollte ich, wenn denn alles klappt, den Usern ein Ablaufdatum setzten bzw. die ganz alten direkt deaktivieren. Wenn ich jetzt eine Auswertung mit oldcmp machen, müsste ich dann also die Daten verarbeiten richtig? Zitieren Link zu diesem Kommentar
NilsK 2.937 Geschrieben 17. Januar 2018 Melden Teilen Geschrieben 17. Januar 2018 Moin, ich verstehe nicht, was du vorhast. Ablaufdatum? Deaktivieren kann OldCmp direkt. Falls du unbedingt was mit PowerShell bauen willst, dann nimm das AD-Feld lastLogonTimestamp. Das ist für Vergleiche der hier erwünschten Art gedacht und wird üer alle DCs repliziert, du musst also nicht alle DCs auslesen. Den Wert lastLogon und den Vergleich über die DCs braucht man nur, wenn man aktuelle Daten benötigt (letzte Anmeldung in den letzten wenigen Tagen), aber die brauchst du hier ja gerade nicht. Gruß, Nils Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 17. Januar 2018 Autor Melden Teilen Geschrieben 17. Januar 2018 Moin, ich verstehe nicht, was du vorhast. Ablaufdatum? Deaktivieren kann OldCmp direkt. Falls du unbedingt was mit PowerShell bauen willst, dann nimm das AD-Feld lastLogonTimestamp. Das ist für Vergleiche der hier erwünschten Art gedacht und wird üer alle DCs repliziert, du musst also nicht alle DCs auslesen. Den Wert lastLogon und den Vergleich über die DCs braucht man nur, wenn man aktuelle Daten benötigt (letzte Anmeldung in den letzten wenigen Tagen), aber die brauchst du hier ja gerade nicht. Gruß, Nils Was ich vorhabe: Wenn sich ein User länger als 180 Tage nicht angemeldet hat, wird sich User per Ablaufdatum gesperrt. Falls er jetzt nach z.B. 200 Tagen aus einer langen Krankheit zurück kommt, wird der User wieder freigeschaltet. Wenn sich ein User länger als z.B. 360 Tage nicht angemeldet hat. wird er deaktiviert und alle Gruppenmitgliedschaften entzogen... Ich werde es dann mal mit LogonTimeStamp versuchen.... Zitieren Link zu diesem Kommentar
NilsK 2.937 Geschrieben 17. Januar 2018 Melden Teilen Geschrieben 17. Januar 2018 Moin, warum so ein umständliches Verfahren? 180 Tage - deaktivieren. Geht direkt per OldCmp. 360 Tage - z.B. verschieben in eine andere OU - geht direkt per OldCmp. Gruppenmitgliedschaften entfernen - könnte ein simples Skript machen, das einfach alle User in der OU abklappert. Gruß, Nils Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.