logo

PowerShell: Suchen von deaktivierten oder inaktiven Benutzern und Computern in Active Directory

PowerShell erfreut sich zunehmender Beliebtheit und ist für Systemadministratoren das Tool der Wahl, wenn es um die Erfassung von Informationen von Zielsystemen geht. Für jede Windows-Rolle gibt es eigene PowerShell-Module. In Active Directory sind über 450 PowerShell-Cmdlets enthalten, mit denen Sie Informationen zu allen Objekten in Active Directory (z. B. zu deaktivierten Computer- und Benutzerkonten) abrufen, durch Interaktion mit der ADSI-Engine bestimmte Vorgänge ausführen, den Zustand von Domänen-Controllern überprüfen, Informationen zu Gruppenrichtlinien erfassen und viele weitere Aufgaben durchführen können.

Im ersten Teil des Artikels erläutern wir, wie Sie mit einfachen PowerShell-Befehlen nach deaktivierten Benutzer- und Computerkonten sowie nach inaktiven Benutzerkonten in einer einzelnen Active Directory-Domäne suchen können. Im zweiten Teil stellen wir ein praktisches PowerShell-Skript vor, mit der Sie diese Informationen auch für mehrere Active Directory-Domänen erfassen können.

So suchen Sie nach deaktivierten Konten in einer einzelnen Domäne

Abrufen von Informationen zu deaktivierten Computerkonten

Zwar gibt es von Microsoft kein spezielles PowerShell-Cmdlet zur Erfassung von deaktivierten Computerkonten, doch Sie können hierfür das Cmdlet „Get-ADComputer“ verwenden. Um Informationen zu deaktivierten Benutzerkonten zu erfassen, können Sie das PowerShell-Cmdlet „Search-ADAccount“ verwenden, das wir unten näher erläutern.

Get-ADComputer -Filter {(Enabled -eq $False)} -ResultPageSize 2000 -ResultSetSize $null -Server <AnyDomainController> -Properties Name, OperatingSystem

Wie der Befehl oben erkennen lässt, wird das Cmdlet „Get-ADComputer“ angewiesen, nach Computerkonten mit dem Wert „$False“ für die Eigenschaft „Enabled“ zu suchen, der auf eine Deaktivierung des Kontos hinweist.

Wenn Sie das Suchergebnis in eine CSV-Datei exportieren möchten, verwenden Sie das Cmdlet „Export-CSV“ wie in dem PowerShell-Befehl unten gezeigt:

Get-ADComputer -Filter {(Enabled -eq $False)} -ResultPageSize 2000 -ResultSetSize $null -Server <AnyDomainController> -Properties Name, OperatingSystem | Export-CSV “C:\Temp\DisabledComps.CSV” -NoTypeInformation

Abrufen von Informationen zu deaktivierten Benutzerkonten

Für die Suche nach deaktivierten Benutzerkonten in Active Directory benötigen Sie das Cmdlet „Search-ADAccount“, mit dem Sie beliebige Konten in Active Directory abfragen können. Es unterstützt verschiedene Eigenschaften. Die wichtigsten Parameter, die Sie in Search-ADAccount festlegen können, sind „–UsersOnly“ und „–ComputersOnly“. Wenn Sie den Parameter „–UsersOnly“ festlegen, sucht das Cmdlet „Search-ADAccount“ ausschließlich nach Benutzerobjekten, mit dem Parameter „–ComputersOnly“ nur nach Computerkonten. Um deaktivierte Benutzerkonten in Active Directory abzufragen, können Sie den folgenden Befehl ausführen:

Search-ADAccount –AccountDisabled –UsersOnly –ResultPageSize 2000 –ResultSetSize $null | Select-Object SamAccountName, DistinguishedName

Das Cmdlet „Search-ADAccount“ unterstützt außerdem den Parameter „-AccountDisabled“. Damit weisen Sie das Cmdlet „Search-ADAccount“ an, ausschließlich nach deaktivierten Benutzer- oder Computerkonten zu suchen. Zum Export der Suchergebnisse in eine Datei verwenden Sie das Cmdlet „Export-CSV“ wie in dem PowerShell-Befehl unten gezeigt:

Search-ADAccount –AccountDisabled –UsersOnly –ResultPageSize 2000 –ResultSetSize $null | Select-Object SamAccountName, DistinguishedName | Export-CSV “C:\Temp\DisabledUsers.CSV” -NoTypeInformation

Erfassen von inaktiven Benutzerkonten

Für die Suche nach inaktiven Benutzerkonten in Active Directory können Sie ebenfalls das Cmdlet „Search-ADAccount“ verwenden. Sie müssen lediglich wie in dem folgenden PowerShell-Befehl gezeigt den Parameter „-AccountInActive“ verwenden:

Search-ADAccount –AccountInActive –TimeSpan 90:00:00:00 –ResultPageSize 2000 –ResultSetSize $null | ?{$_.Enabled –eq $True} | Select-Object Name, SamAccountName, DistinguishedName | Export-CSV “C:\Temp\InActiveUsers.CSV” –NoTypeInformation

Der Befehl oben sucht mithilfe des Parameters „–TimeSpan“ nach Benutzerkonten, die in den letzten 90 Tagen nicht aktiv genutzt wurden. Die Suchergebnisse werden in die Datei „C:\Temp\InActiveUsers.CSV“ exportiert.

Suchen von deaktivierten Konten in mehreren Domänen

Wenn Sie Informationen aus mehreren Active Directory-Domänen abrufen, müssen Sie sicherstellen, dass das PowerShell-Skript in der Lage ist, alle in einer Active Directory-Struktur gefundenen Domänen nacheinander zu durchsuchen und durch Ausführung der PowerShell-Befehle die benötigten Informationen abzurufen. Mit dem PowerShell-Cmdlet „ForEach“ können Sie PowerShell-Befehle für die einzelnen Active Directory-Domänen ausführen, sollten jedoch sicherstellen, dass die Daten für jede Domäne jeweils in einer separaten CSV-Datei erfasst werden. Kurzum: Für den Abruf von Informationen zu deaktivierten Benutzer- und Computerkonten sowie inaktiven Benutzerkonten in Active Directory-Domänen müssen Sie ein PowerShell-Skript erstellen, das folgende Anforderungen erfüllen kann:

  • Für jede Active Directory-Domäne muss ein separates IT-Team zuständig sein.
  • Informationen aus allen Active Directory-Domänen können mit einem einzigen Skript erfasst werden. Mit anderen Worten: Sie müssen ein Skript erstellen, das bei einmaliger Ausführung die erforderlichen Informationen aus allen Active Directory-Domänen abruft.
  • Die Informationen zu deaktivierten Benutzer- und Computerkonten sowie inaktiven Benutzerkonten können für jede Domäne in einer separaten CSV-Datei gespeichert werden. Wenn Sie über separate CSV-Dateien für jede Domäne verfügen, können Sie diese CSV-Dateien den für die jeweiligen Domänen zuständigen IT-Teams bereitstellen, die dann die erforderlichen Maßnahmen ergreifen.

Unter Berücksichtigung dieser Anforderungen können Sie das unten gezeigte PowerShell-Skript ausführen. Zuvor sollten Sie jedoch sicherstellen, dass die folgenden Voraussetzungen erfüllt sind:

  • Sie müssen das Skript mit Windows Server 2012 oder einer höheren Version ausführen.
  • Das Skript verwendet eine Active Directory-Struktur mit dem Namen „NetWrix.Com“. Sie müssen den Namen der Active Directory-Struktur in der Variablen „$CurForestName“ ändern und anschließend das Skript ausführen.
  • Installieren Sie die Active Directory PowerShell-Module auf dem Computer, auf dem Sie das Skript ausführen möchten.
  • Erstellen Sie ein Verzeichnis mit dem Namen „C:\Temp“ auf dem lokalen Computer.
  • Öffnen Sie das PowerShell-Fenster im Modus mit erhöhten Rechten.
  • Sie benötigen Berechtigungen für den Zugriff auf alle Active Directory-Domänen.

Wenn Sie die oben aufgeführten Voraussetzungen erfüllen, können Sie das folgende PowerShell-Skript ausführen:

$DomList = "C:\Temp\DomList.TXT"
remove-item $DomList -ErrorAction SilentlyContinue
$CurForestName="NWBlog.Com"
$GetForest=Get-ADForest $CurForestName
$Items = $R.Domains
ForEach ($Domains in $Items)
{
    Add-Content $DomList $Domain.Name
}
Write-Host "Starting Script..."
ForEach ($DomInFile in $DomList)
{
    $DisabledCompsCSV = "C:\Temp\DisabledAccounts_Computers_"+$DomInFile+".CSV"
    Remove-item $DisabledCompsCSV -ErrorAction SilentlyContinue
    $DisabledUsersCSV = "C:\Temp\DisabledAccounts_Users_"+$DomInFile+".CSV"
    Remove-item $DisabledUsersCSV -ErrorAction SilentlyContinue
    $InActiveUsersReport = "C:\Temp\InactiveUsers_"+$DomInFile+".CSV"
    Remove-item $InActiveUsersReport -ErrorAction SilentlyContinue


    Get-ADComputer -Server $DomInFile –Filter {(Enabled –eq $False)} –ResultPageSize 2000 –ResultSetSize $null -Properties Name, OperatingSystem | Export-CSV $DisabledCompsCSV -NoTypeInformation   
    Search-ADAccount -Server $DomInFile –AccountDisabled –UsersOnly –ResultPageSize 2000 –ResultSetSize $null | Select-Object SamAccountName, DistinguishedName | Export-CSV $DisabledUsersCSV –NoTypeInformation   
    Search-ADAccount -Server $DomInFile –AccountInActive –TimeSpan 90:00:00:00 –ResultPageSize 2000 –ResultSetSize $null | ?{$_.Enabled –eq $True} | Select-Object Name, SamAccountName, DistinguishedName | Export-CSV $InActiveUsersReport –NoTypeInformation

}
Write-Host "Script Finished collecting required information. Please check report files under C:\Temp folder"

Das Skript ist relativ einfach zu verstehen. Es werden die folgenden Funktionen ausgeführt:

  • Das Skript erfasst Informationen aus allen Active Directory-Domänen in der Active Directory-Struktur, die mit der Variablen „$CurForestName“ festgelegt wurde, und speichert die Namen der Domänen unter „C:\Temp\DomList.CSV“.
  • Die Datei unter „C:\Temp\DomList.CSV“ wird von der zweiten „ForEach“-Schleife des Skripts verwendet.
  • Das Skript ruft Informationen zu deaktivierten Benutzer- und Computerkonten sowie inaktiven Benutzerkonten in den einzelnen Domänen ab, indem es die PowerShell-Befehle „Get-ADComputer“ und „Search-ADAccount“ ausführt.
  • Für jede Domäne wird ein Bericht erstellt, der als CSV-Datei gespeichert wird. Diese CSV-Berichte werden im Verzeichnis „C:\Temp“ des Computers erstellt, auf dem Sie das Skript ausführen.

Die erstellten CSV-Berichte können Sie per E-Mail an die einzelnen IT-Teams senden. Alternativ können Sie auch das Cmdlet „Send-MailMessage“ in das Skript einbinden, damit automatisch eine E-Mail mit einem CSV-Bericht an das zuständige IT-Team gesendet wird. Auf das Cmdlet „Send-MailMessage“ gehen wir in einem weiteren Artikel dieser Reihe näher ein.

Wenn Sie viel zu tun haben, sollten Sie auch einige kostenlose Tools ausprobieren, mit denen Sie Aufgaben automatisieren und so Ihren Zeitaufwand verringern können. Mit dem Tool Inactive User Tracker können Sie beispielsweise schnell alle veralteten Benutzerkonten bereinigen oder sperren.  Über das Kommentarfeld unten können Sie von Ihren Erfahrungen berichten oder uns mitteilen, welche Tools Sie zur Erkennung veralteter Benutzerkonten verwenden.

Free tools