Get-AdUser: Hoe Active Directory Gebruikers te Auditen met PowerShell

PowerShell is een essentieel hulpmiddel voor IT-beheerders, en het maakt het gemakkelijk om Active Directory gebruikersaccounts te controleren met het Get-AdUser commando. In deze handleiding gaan we in op hoe je aan de slag kunt met het populaire Active Directory-cmdlet.

Introductie tot het Get-AdUser PowerShell cmdlet

Het Get-AdUser cmdlet is een van de meest populaire Active Directory PowerShell-cmdlets. Hiermee kun je een specifiek gebruikersobject ophalen of aangepaste zoekopdrachten uitvoeren om meerdere gebruikersobjecten te verkrijgen.

Advertentie

De Identity parameter wordt gebruikt om aan te geven welke Active Directory-gebruiker moet worden opgehaald. Je hebt verschillende opties om de gebruiker te identificeren:

  • Je kunt hun onderscheidende naam (DN), GUID, beveiligings-ID (SID) of Security Account Manager (SAM)-accountnaam gebruiken.
  • Je kunt ook de parameter instellen op een gebruikersobjectvariabele zoals $UserA of een gebruikersobject doorgeven aan de Identity parameter via de pipeline.

Je kunt de Filter of LDAPFilter parameters gebruiken om te zoeken naar en meer dan één gebruiker te krijgen. De Filter parameter gebruikt de PowerShell Expression Language (PSL) om Active Directory te bevragen.

PowerShell Expression Language-syntax biedt beheerders een rijke ondersteuning voor typeconversie voor de waardetypes die worden geaccepteerd door de Filter-parameter. Als je al Lightweight Directory Access Protocol (LDAP)-queryreeksen hebt, gebruik dan in plaats daarvan de LDAPFilter-parameter.

Als er geen parameters expliciet zijn ingesteld, geeft Get-AdUser een standaardset van gebruikersobjecteigenschappen weer. Om extra eigenschappen op te halen, gebruik je de Eigenschappen-parameter. We zullen later in dit artikel ingaan op enkele van de parameters die je kunt gebruiken.

Advertentie

Hoe Get-AdUser te gebruiken en vereisten

Voordat je Get-AdUser en andere op Active Directory gerelateerde PowerShell-commando’s kunt gebruiken, moet je ervoor zorgen dat de Active Directory-module is geïnstalleerd en geladen op je werkstation. Afhankelijk van de versie van Windows die je gebruikt, zijn er verschillende methoden die je kunt volgen om de cmdlet te installeren.

Voor de bondigheid zal ik de twee meest voorkomende methoden doornemen die je waarschijnlijk zult volgen als beheerder of IT-professional die je on-premises Active Directory beheert.

Ten eerste kun je de volgende PowerShell-opdracht gebruiken om de tool Remote Server Administration Tools (RSAT) rechtstreeks van Windows Update te installeren.

Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"

De tweede methode is om de RSAT-tool rechtstreeks te installeren via de Instellingen-applicatie. Klik Start -> Instellingen -> Apps -> Optionele functies -> Een functie toevoegen -> en vink het selectievakje aan bij de RSAT: Active Directory Domain Services en Lightweight Directory Services Tools optie.

Advertentie

Klik op de Installeren knop.

Hoe u een AD-gebruikersaccount kunt vinden met behulp van de -Identity-parameter

Oké, laten we beginnen met het gebruiken van de cmdlet en u laten zien hoe ik u kan helpen om efficiënter (en sneller!) de benodigde informatie te verkrijgen. Ik werk in mijn (Windows Server 2022 Active Directory) Hyper-V labomgeving en ik ben ingelogd op een Windows 10 21H1 client virtuele machine (VM). Ik heb gezocht in het Startmenu naar ‘Active Directory Module for Windows PowerShell’ en het geopend via ‘Uitvoeren als administrator.’

Active Directory Module for Windows PowerShell

Eerst, laten we een domeingebruiker vinden op basis van het sAMAccountName attribuut

Get-ADUser breinders
Finding a user account via their sAMAccountName

Daar gaan we. We kunnen nu het objectGUID (of GUID) attribuut gebruiken om een gebruiker te vinden. Laten we proberen:

Get-ADUser bdcaaf45-e993-4be7-83d2-c1d280edc250
Finding an account via their objectGUID (GUID)

Ah, hetzelfde gebruikersaccount. Uitstekend. We kunnen ook zoeken naar een gebruiker op basis van hun Security Identifier, of SID.

Get-ADUser S-1-5-21-3437955921-3370966048-1812589592-1107
Finding an account via their Security IDentifier (SID)

Ja, een beetje repetitief, maar je snapt het idee. Je kunt ook de achternaam, voornaam, UserPrincipalName en andere gebruiken.

Het gebruik van de Get-AdUser-filter

In grotere omgevingen raad ik niet aan om ‘Get-AdUser’ op zichzelf te typen, want het zal ALLE gebruikersobjecten in je gekoppelde AD-domein beginnen op te halen. Dit zal niet alleen je console overspoelen met gegevens, maar kan ook een merkbare druk leggen op welke domeincontroller je werkstation gebruikt.

Als we alleen maar de hele gebruikersbasis konden filteren en op zoek gaan naar specifieke gebruikers op basis van bepaalde eigenschappen. Wel, daar is de ‘-filter’-parameter precies voor bedoeld!

De ‘-filter’-parameter geeft een queryreeks aan die AD-objecten ophaalt. Deze reeks maakt gebruik van de PowerShell Expression Language (PEL)-syntax. De PEL-syntaxis biedt rijke ondersteuning voor typeconversie voor waarde typen die zijn ontvangen door de Filter-parameter. De syntaxis gebruikt een in-line weergave, wat betekent dat de operator tussen de operand en de waarde wordt geplaatst. Laten we door een paar voorbeelden gaan om je een beter idee te geven.

Laten we eerst alle accounts ontdekken die ‘Ingeschakeld’ zijn.

Get-ADUser -filter {Enabled -eq "true"} | ft
Locating all the enabled accounts

We gebruiken die mooie PEL-syntax om alle accounts te vinden waarbij het veld ‘Enabled’ gelijk is aan True. We leiden de output ook om via de Format-Table PowerShell cmdlet voor een makkelijker leesbare weergave-indeling.

Vervolgens laten we alle gebruikers met een e-mailadres zien.

Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail
Finding all the user accounts with an email address

Ten eerste, let op dat we de ‘-filter’ parameter gebruiken om alleen gebruikersaccounts op te nemen die geen ‘nul’ e-mailadres hebben. Of, simpeler gezegd, alle accounts met een e-mailadres. Ik weet het, soms is het moeilijk om te proberen als een computer te denken.

Ten tweede richten we ons op de drie eigenschappen Naam, Voornaam en mail (e-mailadres). We gebruiken Format-Table en tonen die eigenschappen op. Appeltje eitje!

Je wilt misschien ook je accounts controleren vanuit een beveiligingsperspectief. Je kunt ook de ‘-filter’ parameter gebruiken om alle accounts te vinden met de ‘wachtwoordverlooptnooit’ attribuut. Dat wordt over het algemeen niet aangeraden.

Get-AdUser waar naam zoals?

Nog een handige functie is het gebruik van verschillende parameters met -filter om alleen specifieke gebruikers te vinden die overeenkomen met de verschillende eigenschappen van een AD-gebruikersobject. Hoewel mijn laboratoriumomgeving zeer klein is en slechts ongeveer tien gebruikersaccounts heeft, kan het nog steeds de kracht en flexibiliteit aantonen van het snel kunnen vinden van de accounts waarnaar je op zoek bent. Hier, laten we alle gebruikers vinden met ‘Reinders’ in hun namen.

Get-ADUser -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

We gebruiken de ‘Naam’-parameter en zoeken alle accounts die ‘Reinders’ ergens in de naam hebben. Het kan hun voornaam zijn, hun achternaam en zelfs een tussenvoegsel als het is ingevoerd. Als je ALLEEN gebruikers met Reinders als achter naam wilt vinden, wijzig dan het -like veld naar “*Reinders”. (Let op, er staat geen asterisk (*) aan het einde van het veld).

Beperken van de zoekscope van Get-AdUser per Organizational Unit

Als je een relatief groot domein/bedrijf hebt, loop je mogelijk tegen langere querytijden aan bij het uitvoeren van deze commando’s, of onnodige prestatie-impact op je domeincontrollers. Laten we eens kijken naar het beperken van de omvang van deze zoekopdrachten tot een specifieke Organizational Unit (OU).

We kunnen de ‘-SearchBase’-parameter gebruiken en een OU (of meerdere OUs) specificeren met de volgende syntaxis.

Get-ADUser -SearchBase 'OU="Test Users",DC=reinders,DC=local' -filter * -Properties Name,EmailAddress | ft Name,EmailAddress
Here, we’re limiting the search scope to the ‘Test Users’ Organization Unit (OU)

Hier beperken we onze zoekopdracht tot alle gebruikers in de OU “Testgebruikers”, en geven dan hun naam en e-mailadres weer in tabelindeling.

Het gebruik van Get-AdUser met alternatieve referenties

Standaard wordt de Get-AdUser-cmdlet uitgevoerd in de context van de momenteel aangemelde gebruiker. Als je de opdracht wilt uitvoeren met alternatieve referenties, kun je een variabele gebruiken, de alternatieve referenties in die variabele opslaan en vervolgens de opdracht uitvoeren met de ‘-Credential’-schakelaar.

$cred = Get-Credential Get-ADUser -Credential $cred -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

Nogmaals, mooi en eenvoudig!

Werken met de parameter Eigenschappen van Get-AdUser

I’ve shown a few examples of the ‘-Properties’ parameter, but let’s take a step back and explain it a bit.

De ‘-Eigenschappen’ parameter specificeert de eigenschappen van het uitvoerobject die van de server moeten worden opgehaald. Standaard worden er tien eigenschappen geretourneerd en weergegeven als je deze niet gebruikt. Dingen zoals DistinguishedName, of het account ‘Ingeschakeld’ of ‘Uitgeschakeld’ is, de voornaam van de gebruiker, naam, GUID, en andere meer systeemachtige attributen. Maar er zijn er nogal wat beschikbaar. Gebruik deze parameter om eigenschappen op te halen die niet zijn opgenomen in de standaardset.

Specificeer eigenschappen voor deze parameter als een kommagescheiden lijst van namen. Om alle eigenschappen die zijn ingesteld op het object weer te geven, specificeer * (asterisk).

Om toegang te krijgen tot deze andere eigenschappen, geef je deze eenvoudigweg op; gebruik de naam van de eigenschap. Voor eigenschappen die geen standaard- of uitgebreide eigenschappen zijn, moet je de weergavenaam van het Lightweight Directory Access Protocol (LDAP) attribuut specificeren.

Laten we een paar voorbeelden doornemen.

Get-ADUser -filter * -Properties Name,PasswordLastSet | ft Name,PasswordLastSet
Displaying all users with the date and time their password was last set/reset

Het bovenstaande voorbeeld toont alle gebruikers in het domein met hun Naam en de datum/tijd waarop hun wachtwoord voor het laatst is ingesteld/hersteld.

Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated
Another nice feature is listing every user’s Creation Date in Active Directory

Dit toont wanneer het account is aangemaakt in Active Directory. Laten we dit afronden met een query om de Naam, Afdeling en Manager voor elk account op te halen.

Get-ADUser -filter * -Properties Name,Department,Manager | ft Name,Department,Manager
Listing the Department and the Manager of each user, if they’re populated in Active Directory

Een laatste voorbeeld en geweldig gebruik van de Export-Csv commando. Als je een lijst van alle gebruikers in een domein nodig hebt, inclusief alle eigenschappen, voer dan dit commando uit om alles te exporteren naar een handig CSV-bestand.

Get-ADUser -filter * -properties * | Export-CSV c:\temp\Users.csv

Samenvatting

I hope you gained some knowledge about how to use the Get-AdUser PowerShell command. This really scratches the surface, however, this is one aspect I like about the power of PowerShell: Learning about the core properties of a cmdlet and extrapolating it out to your organization.

Vaak is het verbazingwekkend eenvoudig om aan vele gebruiksgevallen te denken waarvoor je dit commando kunt gebruiken om een probleem op te lossen, documentatie te maken voor andere ingenieurs en te helpen bij algemene probleemoplossingsprocessen. Het kan zeer nuttig zijn. En natuurlijk kan het gebruik van enkele van deze commando’s om een PowerShell-script te genereren de efficiëntie altijd verhogen!

Voel je vrij om vragen of opmerkingen achter te laten hieronder.

Gerelateerd artikel:

Source:
https://petri.com/get-aduser-how-to-audit-active-directory-users-with-powershell/