Montag, 24. November 2014

Active Directory Cleanup

Die digitale Welt stellt uns vor ganz neue Herausforderungen. Eine digitale Unordnung fällt nicht so schnell auf wie eine Digitale. Doch auch in der digitalen Welt ist Ordnung die halbe Miete. Digitale Unordnung findet man oft in der Active Directory. Server / Computer die ausser Betrieb genommen wurden oder Userobjekte von Mitarbeitern welche die Firma verlassen haben geistern oft noch lange in der AD umher und Ordnung zu schaffen ist sehr zeitraubend. Zum Glück hat uns Microsoft in den neueren OS-Versionen eine Power Shell Untersützung für die AD spendiert.

Nicht mehr verwendete Computerobjekte in der AD finden:

Eine Möglichkeit veraltete Computerobjekte in der AD zu finden ist zu schauen wann sich ein Computer zuletzt an der AD angemeldet hat. Dies kann über 2 verschiedene Parameter geschehen:

Get-ADComputer <Computer Name> -LastLogon



Das Attribut "LastLogon" gibt an wann sich ein Computer zuletzt an der AD angemeldet hat. Das Problem ist aber, dass diese Attribut nicht unter den Domänen Controllern repliziert wird. Falls man also "LastLogon" verwenden will müsste man alle DCs abfragen.

Get-ADComputer <Computer Name> -LastLogonTimeStamp

Das Attribut "LastLogonTimeStamp" wird unter den DCs repliziert, doch immer erst wenn der Wert älter als zwei Wochen (minus einem zufälligen Wert von 0-5 Tagen) ist. Somit kann dieser Wert also bis zu 14 Tage ungenau sein.

Um in der AD Ordnung zu schaffen stört mich aber die maximale Abweichung von 14 Tagen nicht besonders. Wichtig ist, dass einem dieser Umstand bekannt ist.

Folgender Script verwende ich nun also um veraltete Computerobjekte in der AD zu finden:

$time = Read-host "Enter a date in format dd/mm/yyyy"
$time = get-date ($time)
$date = get-date ($time) -UFormat %d.%m.%y

Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('dd.MM.yyyy hh:mm')}} | export-csv C:\Scripts\FindObsoleteAD-Objects\FindObsoleteComputers\all_old_computers_timestamps_older_than-$date.csv -notypeinformation

Kopiert diesen Text in ein File mit der Endung .ps1 und ruft dies über die Power Shell auf. Natürlich solltet ihr auch noch den Ausgabepfad auf eure Umgebung anpassen.
Das Resultat ist ein CSV mit den Computernamen und dem Zeitpunkt der letzten Anmeldung:

"Name","Stamp"
"WIN7-BMU","16.06.2014 10:58"
"NB-MICHIS","12.05.2014 08:09"
"NBBBR02","08.08.2014 02:47"
"MBP-SPEEDESEL","05.06.2014 08:21"
"MACBOOK","25.08.2014 07:52"

Doch wie oben erwähnt, eine Abweichung von bis zu 14 Tagen ist möglich.

Nicht mehr verwendete Userojekte in der AD finden:

Nach dem gleichen Prinzip lassen sich auch veraltete Userobjekte in der AD finden:

$time = Read-host "Enter a date in format dd/mm/yyyy"
$time = get-date ($time)
$date = get-date ($time) -UFormat %d.%m.%y

Get-ADUser -Filter {LastLogonTimeStamp -lt $time} -Properties CN,LastLogonTimeStamp -ResultPageSize 0 | select-object CN,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp).ToString('dd.MM.yyyy hh:mm')}} | export-csv C:\Scripts\FindObsoleteAD-Objects\FindObsoleteUsers\all_old_users_timestamps_older_than-$date.csv -notypeinformation

Das Resultat ergiebt auch hier ein CSV. Dies sieht in etwa so aus:

"CN","Stamp"
"Hans Muster","30.10.2012 07:38"
"Peter Mueller","22.10.2013 12:22"
"ADC Lab","26.09.2013 03:46"
"ADC Dev2","25.04.2014 01:33"
"HealthMailbox015b7616028a46908194ef14606d8b47","21.02.2013 11:20"
"MUE Support Benutzer","19.06.2014 07:29"


Keine Kommentare:

Kommentar veröffentlichen