Abrufen aller Gruppenmitgliedschaften eines Benutzers mithilfe von PowerShell

Marion Paul Kenneth Mendoza 21 Dezember 2022
  1. Holen Sie sich die Gruppenmitgliedschaft eines Benutzers mit net Legacy-Befehlen
  2. Holen Sie sich die Gruppenmitgliedschaft eines Benutzers mit ADSI
  3. Abfrage der Gruppenmitgliedschaft eines Benutzers mit einem neuen Objekt
  4. Abfrage der Gruppenmitgliedschaft eines Benutzers mit dem Active Directory-Modul
Abrufen aller Gruppenmitgliedschaften eines Benutzers mithilfe von PowerShell

In Windows PowerShell gibt es viele Möglichkeiten, die Liste der Gruppenmitgliedschaft eines bestimmten Benutzers abzurufen. Wir können Legacy-Befehle, native Befehle oder Erweiterungen verwenden, um sie in der Skriptumgebung von PowerShell auszuführen.

In diesem Artikel werden alle diese Methoden einzeln besprochen, ihre Vor- und Nachteile und wie sie richtig ausgeführt werden.

Die folgenden Befehle werden nur ordnungsgemäß ausgeführt, wenn Ihr Computer oder Server der Domäne beigetreten ist. Die Verwendung der Standarddomäne WORKGROUP führt zu einem Ausnahmefehler.

Holen Sie sich die Gruppenmitgliedschaft eines Benutzers mit net Legacy-Befehlen

Wir können mit einem Legacy-Befehl beginnen, den es schon in den frühen Stadien des Betriebssystems gab, den wir die net-Befehle nennen. Die net-Befehle werden normalerweise in der Eingabeaufforderung ausgeführt und arbeiten mit Windows PowerShell über Aliase zusammen.

Die net-Befehle werden typischerweise verwendet, um den lokalen Computer zu verwalten. Dennoch können wir den Befehl verwenden, um die Mitgliedschaft eines bestimmten Benutzers für diesen speziellen Zweck zu erhalten, indem wir die folgende Syntax verwenden.

net user /domain username

Bei dieser Methode werden nicht nur globale Domänengruppen zurückgegeben, sondern auch die lokalen Gruppen des Benutzers.

Einer der Nachteile dieses Befehls besteht darin, dass er weniger flexibel ist als die neueren Windows PowerShell-Cmdlets. Außerdem werden lange Gruppennamen (ca. 21 Zeichen) beim Export nicht korrekt angezeigt, da sie in der Befehlszeile abgeschnitten werden.

Holen Sie sich die Gruppenmitgliedschaft eines Benutzers mit ADSI

Laut Microsoft sind ADSI oder Active Directory Service Interfaces eingebaute COM-Schnittstellen, die für den Zugriff auf Verzeichnisdienste verwendet werden. Innerhalb der ADSI-Bibliothek befindet sich die Klasse [ADSISearcher], die wir in Windows PowerShell ausführen können, um eine Gruppenmitgliedschaft eines aktuellen Benutzers abzufragen.

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof

Wir können dies verbessern, indem wir Regex hinzufügen, um die nicht benötigten LDAP-Zeichen CN="groupname" zu entfernen, die nur die Gruppennamen des Benutzers zurückgeben.

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof -replace '^CN=([^,]+).+$','$1'

Diese Methode erfordert keine Modulinstallationen, um ausgeführt zu werden, da sie in die Maschine integriert ist. Die einzige Voraussetzung, die benötigt wird, ist ein Computer, der einer Domäne angehört. Wenn Sie die obige Syntax ausführen, wird eine Fehlerausnahme ausgelöst.

Der einzige Nachteil dieser Syntax ist, dass die Abfrage nur mit einem aktuell angemeldeten Benutzer funktioniert. Dies bedeutet, dass Sie keinen anderen Benutzer ansprechen können, während Sie die Syntax ausführen, wenn Sie angemeldet sind.

Abfrage der Gruppenmitgliedschaft eines Benutzers mit einem neuen Objekt

Eine andere Methode, um die Gruppenmitgliedschaft eines Benutzers zu erhalten, besteht darin, die Verzeichnisdienste zu verwenden und ein neues Objekt zu erstellen. Bei dieser Methode müssen wir auch kein separates Modul installieren, damit dies funktioniert.

Diese Methode kann auch auf einen bestimmten Benutzer innerhalb Ihrer Domäne abzielen, da sie den Domänencontroller abfragt, mit dem Sie derzeit im Netzwerk verbunden sind.

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:USERNAME)))")).FindOne().GetDirectoryEntry().memberOf

Wenn Sie den angemeldeten Benutzer nicht abfragen möchten, können Sie $env:USERNAME durch den genauen Benutzernamen des Zielbenutzers ersetzen.

$username = "user01"
(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($username)))")).FindOne().GetDirectoryEntry().memberOf

Diese Methode gibt nicht benötigte LDAP-Zeichen und die gesamte Suchbasis der Organisationseinheit (OU) wie die vorherige Methode aus.

Abfrage der Gruppenmitgliedschaft eines Benutzers mit dem Active Directory-Modul

Wir können dies als eine der einfachsten und kürzesten Methoden betrachten, um die Gruppenmitgliedschaft eines Benutzers für diese letzte Methode zu erhalten. Die einzige Bedingung für diese Methode ist die Installation des Active Directory-Moduls, um die AD-Cmdlets in unsere Skriptumgebung zu importieren.

Installieren des Active Directory-Moduls

Normalerweise sollte beim Ausführen des Cmdlets Install-Module das Paket von einem Remote-CDN abgerufen und auf Ihrem Computer installiert werden. Dennoch müssen Sie mit dem Active Directory-Modul ein erforderliches Paket installieren, um erfolgreich zu sein. Dieses vorausgesetzte Paket nennen wir Remote Server Administration Tools oder RSAT.

Um RSAT auf Ihrem Computer oder dem Server zu installieren, können Sie die folgenden PowerShell-Skripts ausführen.

Installieren von RSAT für Windows 10:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online

Installieren von RSAT für Windows Server (mehrere Versionen von 2008 bis 2016):

Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature

Durch die Installation der RSAT-Funktion auf Ihrem Computer wird auch das Active Directory-Modul für Windows PowerShell installiert.

Verwenden des Cmdlet Get-ADPrincipalGroupMembership

Sobald das Active Directory-Modul installiert ist, können Sie nun das Active Directory-Modul mit der folgenden Syntax importieren.

Import-Module -Name ActiveDirectory

Nachdem das Active Directory-Modul importiert wurde, können Sie jetzt AD-Cmdlets ausführen, und wir verwenden diese spezifischen erweiterten Cmdlets, um die Liste der Gruppenmitgliedschaft eines Benutzers abzurufen.

Um die Gruppenmitgliedschaft eines Benutzers zu erhalten, verwenden wir das Cmdlet Get-ADPrincipalGroupMembership. Dieses Cmdlet gibt alle AD-Gruppen des Benutzers, Computers, der Gruppe oder des Dienstkontos zurück. Da wir außerdem auf Benutzer und Gruppenobjekte abzielen können, gibt dieses Cmdlet auch verschachtelte Gruppenmitgliedschaften zurück.

Führen Sie die folgende Syntax aus, um die Gruppenmitgliedschaft des Benutzers abzurufen. Stellen Sie sicher, dass das Active Directory-Modul importiert wird.

Get-ADPrincipalGroupMembership username | select name

Durch Weiterleiten der Eigenschaft name werden alle Benutzergruppenmitgliedschaften ausgegeben.

Ausgabe:

name
----
Domain Users
Domain Computers
Workstation Admins
Company Users
Company Developers
AutomatedProcessingTeam
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn