Informationen aus Active Directory mit der PowerShell auslesen

Inhaltsverzeichnis

Post Featured Image

Die PowerShell ist eine mächtige Umgebung, wenn es darum geht in Windows Informationen auszulesen. Nicht nur bei Scripten zum Bearbeiten von Servereinstellungen oder Workloads kann die PowerShell wichtige Hilfe sein, sondern auch für das umfassende Auslesen von Informationen und für das Erstellen von Berichten. Wir zeigen in diesem Beitrag einige PowerShell-Cmdlets, die auch in Kombination miteinander umfangreiche Informationen aus Active Directory (AD) auslesen können. Diese Informationen sind auch für das Troubleshooting interessant. Noch schneller als mit diesen gescripteten PowerShell-Queries funktionieren diese AD Abfragen übrigens mit den in ScriptRunner eingebauten Queries.

Wenn das Modul zur Verwaltung von Active Directory in Windows 10/11 oder Windows Server 2019/2022 installiert ist, können Sie in der PowerShell auch auf spezifische Informationen von Active Directory (AD) zugreifen. Der Befehl "Get-Command Get-Ad*" zeigt bereits zahlreiche Cmdlets, die Informationen aus Active Directory anzeigen können.

Das funktioniert auch problemlos über das Netzwerk. Mit dem Cmdlet "Get-Command -Module ActiveDirectory" lassen sich alle Cmdlets anzeigen, mit denen Active Directory verwaltet werden kann. Der Befehl "Get-Module -ListAvailable" zeigt wiederum alle Module an. So lassen sich auch die Namen der anderen Module anzeigen, und mit "Get-Command" deren Cmdlets auslesen.

Daten von Benutzerkonten anzeigen

Die einzelnen Get-Cmdlets können mit Filtern erweitert werden. Wollen Sie zum Beispiel alle Benutzer anzeigen, die aktuell nicht deaktiviert sind, verwenden Sie:

get-aduser -ldapfilter "(&(&(objectCategory=user)(userAccountControl=512)))" | where-object -property enabled -eq true
powershell-ad-infos-01

 

Informationen von Benutzern aus AD auslesen

Informationen von Benutzern aus AD auslesen

Um die Anzahl der Active Directory-Benutzer (AD user) anzuzeigen, verwenden Sie:

 (Get-ADUser -Filter "Name -like '*'").count

Soll die letzte Anmeldung eines Benutzerkontos angezeigt werden, steht ebenfalls die PowerShell mit verschiedenen Parametern zur Verfügung:

Get-ADUser "<Name>" -Properties LastLogonDate | FT -Property Name, LastLogonDate -A

Auch das Anmeldedatum aller Benutzerkonten lässt sich in der PowerShell als Liste anzeigen:

Get-ADUser -Filter {(Enabled -eq $true)} -Properties LastLogonDate | select samaccountname, Name, LastLogonDate | Sort-Object LastLogonDate

 

Gesperrte Benutzerkonten lassen sich mit "Search-ADAccount -lockedout" anzeigen. Über die PowerShell können die Konten auch wieder entsperrt werden, zum Beispiel mit "Get-ADUser -Identity joost | Unlock-ADAccount"

 

Computerkonten in Active Directory anzeigen

Um auch die Computerkonten aus AD anzuzeigen, stehen weitere Cmdlets zur Verfügung. Mit der Pipeline kann das Ergebnis an "Select" übergeben und die Anzeige nach den gewünschten Informationen gefiltert werden:

 Get-ADComputer -filter 'name -like "*"' -Properties * | select name,OperatingSystem,IPv4Address

Wie Benutzerkonten, können Sie Computerkonten in Active Directory zählen:

(Get-ADComputer -Filter "Name -like '*'").count

 

Domänencontroller auslesen

Beim Auslesen von Informationen aus dem Active Directory spielen natürlich vor allem Domänencontroller in der Umgebung eine wichtige Rolle. Um sich die Daten zu Domänencontrollern anzuzeigen, verwenden Sie das Cmdlet "Get-Addomaincontroller" an. Wollen Sie Informationen zu allen Domänencontroller in der Umgebung anzeigen, können Sie die Daten auch filtern, zum Beispiel mit:

(Get-ADForest).Domains | %{ Get-ADDomainController -Filter * -Server $_ }

 

 Informationen zu Domänencontrollern in der PowerShell anzeigen

Informationen zu Domänencontrollern in der PowerShell anzeigen

Wir kommen später in diesem Beitrag noch zu weiteren Möglichkeiten für dieses Cmdlet.

Mit dem kostenlosen Microsoft Active Directory Documentation Script  können Sie sich einen Überblick verschaffen, welche Möglichkeiten PowerShell-Scripte zum Auslesen von Informationen bieten. Sie müssen nach dem Extrahieren das Script nur starten. Das Script kann auch Berichte erstellen.

Mit einem PowerShell-Skript können Sie auch umfangreiche Informationen aus dem Active Directory auslesen

Mit einem PowerShell-Script können Sie auch umfangreiche Informationen aus AD auslesen

Ein weiteres Script in diesem Bereich ist "ADinfo.ps1".

Nach dem Starten zeigt das Script ebenfalls Informationen aus dem Active Directory an.

Auch das Ausgeben von Informationen aus der PowerShell in HTML-Dateien ist kein Problem für die PowerShell

Auch das Ausgeben von Informationen aus der PowerShell in HTML-Dateien ist kein Problem für die PowerShell

Die PowerShell bietet aber noch mehr Möglichkeiten. Auch das Auslesen von Gruppenrichtlinien ist möglich, inklusive dem Erstellen von Berichten. Der Befehl dazu sieht folgendermaßen aus:

Get-GPOReport -All -Domain "joos.int" -ReportType HTML -Path "C:\temp\report.html"

In der PowerShell können Sie auch mit "Get-ADDefaultDomainPasswordPolicy" die Einstellungen der Kennwortrichtlinie in der Domäne anzeigen. Die Einstellungen werden in der Gruppenrichtlinienverwaltungskonsole (gpmc.msc) für die entsprechende Richtlinie gesteuert. Der Pfad für die Konfiguration der Kennwortrichtlinie ist "Computerkonfiguration/Richtlinien/Windows-Einstellungen/Sicherheitseinstellungen/Kontorichtlinien/Kennwortrichtlinien".

DNS-Daten und Informationen zu Domänen und Gesamtstrukturen auslesen

Active Directory und DNS arbeiten eng zusammen. Kommt es zu Problemen in Active Directory, oder ist eine Dokumentation der DNS-Zonen notwendig, kann das sehr leicht mit "Get-DnsServerZone -ComputerName <DNS-Server>" erfolgen.

Die DNS-Einträge in Active Directory spielen eine wichtige Rolle, damit die Domänencontroller sich untereinander verbinden können. Die Überprüfung kann auch in der Befehlszeile mit "nslookup" durchgeführt werden:

  1. Starten Sie "nslookup".
  2. Geben Sie "set type=all" ein.
  3. Geben Sie "_ldap._tcp.dc._msdcs.<Name der Domäne>" ein, zum Beispiel "_ldap._tcp.dc._msdcs.joos.int".

In der PowerShell können Sie über die verschiedenen Cmdlets auch Daten einzelner Domänen abfragen. Die Cmdlets "Get-ADDomain" und "Get-ADForest" zeigen Informationen zu Gesamtstrukturen und den Domänen an. Mit Pipes lassen sich Ergebnisse von Cmdlets an weitere Cmdlets weitergeben, zum Beispiel bei "Get-ADDomainController". Sinnvoll ist das zum Beispiel, wenn Sie die FSMO-Rollen pro Domäne anzeigen wollen. In jeder Domäne gibt es die drei FSMO-Rollen, die Sie mit dem folgenden Befehl anzeigen:

Get-ADDomain | Select InfrastructureMaster, RID-Master, PDCEmulator

Schemamaster und Domänennamenmaster gibt es nur einmal pro Gesamtstruktur. Diese Informationen lassen sich wiederum mit dem CMDlet "Get-ADForest" anzeigen:

Get-ADForest | Select-Object DomainNamingMaster, SchemaMaster

Mit "Get-ADDomain" lassen sich zunächst die Betriebsmaster der Domäne (Infrastruktur, RID und PDC) anzeigen, der DNS-Name, die Domänencontroller, der Betriebsmodus, die wichtigsten Organisationseinheiten und weitere Informationen.

Das Cmdlet "Get-ADForest" zeigt zusätzlich noch den Domänennamenmaster, den Schemamaster, die Standorte, UPN-Suffixe und die Domänen an. Die beiden Cmdlets liefern in wenigen Sekunden alle relevanten Informationen zu Domänen, Strukturen und Gesamtstrukturen. Wollen Sie die FSMO-Rollen eines einzelnen Domänencontrollers anzeigen verwenden Sie:

(Get-ADDomainController).OperationMasterRoles

Anzeigen von Informationen der Gesamtstruktur und Domänen

Anzeigen von Informationen der Gesamtstruktur und Domänen

In der PowerShell können Sie auch die Domänencontroller anzeigen, die eine bestimmte Rolle haben, zum Beispiel "PDC-Master":

Get-ADDomainController -Filter {OperationMasterRoles -like "PDC*"} | Select Name

Wer einen tiefergehenden Blick zu Domänencontrollern erhalten will, verwendet das Cmdlet "Get-ADDomaincontroller" für Domänencontroller. Hier sehen Sie auch die IP-Adresse und die FSMO-Rollen, die auf dem Domänencontroller aktiv sind. Zusätzlich sehen Sie hier auch, welche Domänencontroller als globaler Katalog konfiguriert sind und welches Betriebssystem in welcher Edition auf dem Server installiert ist. Auch der Standort, zu dem der Domänencontroller zugewiesen ist, und auf welche Ports der Server im Netzwerk hört sind hier zu finden.

Informationen zu Domänencontrollern aus dem Active Directory auslesen

Informationen zu Domänencontrollern aus dem Active Directory auslesen

Löschschutz in der PowerShell abfragen und setzen

Der Löschschutz in Active Directory verhindert, dass Objekte versehentlich gelöscht werden. Ob der Schutz aktiv ist, lässt sich in der PowerShell überprüfen. Es ist über diesem Weg aber auch möglich den Schutz auch gleich für ein Objekt zu aktivieren:

Get-ADObject ‹DN des Objekts› -Properties ProtectedFromAccidentalDeletion

Aktivieren lässt sich der Löschschutz mit:

Set-ADObject ‹DN des Objekts› -ProtectedFromAccidentalDeletion $true

 

Good2know

 

Passend zum Thema gib es dieses ScriptRunner Webinar:

Active Directory Management – Mit PowerShell ein Kinderspiel

Die Verwaltung von Active Directory Benutzern und Gruppen gehört zu den zentralen, wiederkehrenden Aufgaben der IT-Administration. In diesem Webinar zeigen wir Ihnen, wie diese Aufgaben zeitsparend mit PowerShell standardisiert, automatisiert und delegiert werden können.

So geht das Auslesen von Informationen mit ScriptRunner

 

Query Screenshot ScriptRunner

Schon bei der Installation von ScriptRunner werden verschiedenste Queries mit ausgeliefert. Häufige Use Cases sind AD-Queries, welche direkt innerhalb der Windows Domäne ausgeführten werden können.

Auch für Azure stehen die passenden Queries schon bei Auslieferung bereit. Es ist ebenfalls möglich, selbst geschriebene Scripte als Queries auszuführen, hierbei wird die Option „…with a script“ ausgewählt.

Mit der Auswahl von "List of Entries" können vorgefertigte Listen als Auswahl hinterlegt werden, die letzte Option "File of Entries" kann verwendet werden, um Optionen in einer Datei z.B. *.CSV abzurufen.


 

Weiterführende Links

Zusammenhängende Posts

4 min read

So nutzen Sie Azure Templates zur Automatisierung

10 min read

Exchange Online Quarantäne-Richtlinien

Über den Autor: