Genereer rapporten met Get-AdGroupMember in PowerShell

A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using the PowerShell Get-ADGroupMember cmdlet and other cmdlets can save you a ton of time.

Active Directory-groepen zijn een uitstekende manier om gebruikersaccounts op te delen. Groepen stellen beheerders in staat om de toegang tot resources over veel systemen te definiëren.

In dit artikel gaan we PowerShell gebruiken om AD-groepleden op te halen en AD-groepleden te exporteren. U kunt deze informatie vervolgens gebruiken om allerlei interessante rapporten te genereren.

Active Directory group

Beheer en rapporteer over Active Directory, Exchange en Microsoft 365 met ManageEngine ADManager Plus. Download gratis proefversie!

Vereisten

Als u dit artikel wilt volgen, zorg er dan voor dat u aan de volgende vereisten voldoet:

  • Werken op een Windows 10, domein-gekoppelde computer
  • Aangemeld met een gebruiker die AD-groepen en gebruikersaccounts kan lezen
  • Heb de PowerShell Active Directory-module geïnstalleerd

De basisprincipes leren

Om AD-groepen en groepsleden te bevragen, hebt u twee PowerShell-cmdlets tot uw beschikking – Get-AdGroup en Get-AdGroupMember.

Get-ADGroup vraagt een domeincontroller aan en retourneert AD-groepsobjecten. Get-AdGroupMember kijkt binnenin elke groep en retourneert alle gebruikersaccounts, groepen, contacten en andere objecten die in die groep bestaan.

AD-groepen ophalen

Om AD-groepen met PowerShell te vinden, kunt u de Get-ADGroup cmdlet gebruiken. Zonder parameters zal Get-ADGroup AD bevragen en alle groepen in een domein retourneren met behulp van de Filter-parameter. De Filter-parameter is vereist. Deze dient om de geretourneerde groepen te beperken op basis van verschillende criteria.

Bijvoorbeeld, om alle groepen te vinden zonder rekening te houden met enig criterium, gebruik Get-ADGroup en specificeer een wildcard (asterisk) voor de Filter-parameter. U kunt hieronder een voorbeeld zien. Het doorlopen van al deze groepen kan even duren als u honderden of zelfs duizenden in uw domein heeft.

Get-ADGroup -Filter *

Als u een enkele groep moet vinden, kunt u de Identity-parameter gebruiken.

De Identity-parameter is een veelvoorkomende parameter bij alle Active Directory PowerShell-cmdlets. Hiermee kunt u uw zoekopdracht beperken tot een enkel AD-object. Als u bijvoorbeeld moest controleren of een groep met de naam HR bestond, kunt u dit te weten komen door de onderstaande opdracht uit te voeren.

Get-ADGroup -Identity 'HR'

AD-groepleden ophalen met Get-AdGroupMember

Gebruik PowerShell om leden van AD-groepen weer te geven, vereist het cmdlet Get-ADGroupMember. Dit cmdlet haalt gebruikers, groepen en computerobjecten op in een bepaalde groep. Misschien moet je alle leden van de Beheerders-groep vinden. In de eenvoudigste vorm zou je gewoon de Identity-parameter opnieuw gebruiken en de naam van de groep specificeren zoals hieronder.

Get-ADGroupMember -Identity 'Administrators'

Merk op dat Get-AdGroupMember alleen groepslidmaatschap retourneert voor gebruikers, groepen en computers. Het zal geen andere AD-objecten zoals contacten retourneren.

Leden van Groepen Opsommen binnen Groepen

Zoals je misschien weet, kunnen AD-groepen niet alleen gebruikersaccounts bevatten, maar ook andere groepen, ook wel nesting genoemd. Wanneer een groep genest is in een andere groep, erven de leden van die groep dezelfde machtigingen die aan de oudergroep zijn toegekend.

Standaard retourneert het PowerShell-cmdlet Get-AdGroupMember geen geneste groepsleden. Om dat te verhelpen, kun je de parameter Recursive gebruiken. Je zou bijvoorbeeld leden van groepen kunnen vinden die genest zijn binnen de HR-groep door de parameter Recursive te gebruiken zoals hieronder wordt getoond.

Get-ADGroupMember -Identity 'HR' -Recursive

Meerdere Groepen/Leden Tegelijkertijd Ophalen

Als je AD wilt raadplegen voor veel verschillende groepen of groepsleden tegelijk, kun je dat ook doen met behulp van een PowerShell foreach-lus. Een foreach-lus voert een opdracht of code uit voor elk item in een verzameling. In dit geval zal die verzameling een lijst van groepsnamen zijn.

Misschien moet je alle groepsleden vinden in de HR, Accounting en IT groepen. Om dat te doen, maak je eerst een verzameling of array van deze groepsnamen. Het onderstaande voorbeeld definieert deze verzameling als $groupNames. Vervolgens voer je voor elke naam in die verzameling de opdracht Get-ADGroupMember uit en geef je de naam van elke groep op aan de parameter Identity.

$groupNames = 'HR','Accounting','IT'
foreach ($group in $groupNames) {
    Get-ADGroupMember -Identity $group
}

Je kunt ook de ForEach-Object cmdlet gebruiken om over groepen te lussen.

Het gebruik van alternatieve referenties

Net als veel andere PowerShell-cmdlets hebben de AD-groepscmdlets een Credential-parameter. Standaard gebruikt elke AD-groepscmdlet bij het uitvoeren je ingelogde referenties om Active Directory te raadplegen. Dit betekent dat je op een domein-gekoppelde computer moet zijn ingelogd als een Active Directory-gebruiker met de juiste machtigingen.

Maar wat als je op een computer in een werkgroep werkt of moet authenticeren bij AD als een andere gebruiker? In dat geval kun je de parameter Credential gebruiken. Deze parameter stelt je in staat om een gebruikersnaam en wachtwoord op te geven voor authenticatie.

Bijvoorbeeld, misschien heeft jouw gebruikersaccount niet de rechten om een AD-taak uit te voeren. Je hebt een serviceaccount met aanvullende rechten. Je kunt ingelogd zijn als een standaardgebruiker en toch authenticeren met het serviceaccount zoals hieronder weergegeven.

De cmdlet Get-Credential vraagt om een gebruikersnaam/wachtwoord om referenties te maken. Deze referenties worden vervolgens doorgegeven aan de cmdlet Get-AdGroup voor authenticatie.

Get-ADGroup -Identity 'HR' -Credential (Get-Credential)

De parameter Credential is alomtegenwoordig in PowerShell voor het verstrekken van authenticatiereferenties. Voor meer informatie, lees Het gebruik van de PowerShell Get-Credential cmdlet en alles over referenties.

Group-leden ophalen met Get-ADGroup?

Het klinkt misschien tegenstrijdig, maar je kunt ook group-leden ophalen met de cmdlet Get-ADGroup.

Het blijkt dat Get-ADGroup een eigenschap retourneert voor elke groep genaamd members. Dit is een verzameling AD-objecten die lid zijn van een groep.

Bijvoorbeeld, om groepsleden te vinden in die HR-groep zonder Get-ADGroupMember te gebruiken, zou je iets als dit kunnen doen:

Get-ADGroup -Identity 'HR' -Properties members

Waarom deze methode gebruiken in plaats van de andere? Het belangrijkste verschil is dat de eigenschappen members alle soorten AD-objecten bevatten – niet alleen gebruikers, computers en andere groepen.

Misschien heb je contacten binnen verschillende groepen. Wanneer je Get-ADGroupMember uitvoert, zouden die contacten niet verschijnen. Maar als je Get-ADGroup vertelt om alle leden in die groep terug te geven en die verzameling uit te breiden zoals hieronder wordt weergegeven, zul je de contacten zien.

Get-ADGroup -Identity 'HR' -Properties members | Select-Object -ExpandProperty members

Het vinden van specifieke AD-attributen

In de bovenstaande basissectie gaf je eenvoudigweg alle groepen en groepsleden terug. De informatie die wordt teruggegeven voor elke groep en groepslid is slechts een subset van de AD-attributen die zijn geassocieerd met elk type object.

Misschien wil je het e-mailadres van een gebruikersaccount zien, de laatste aanmeldingsdatum of een ander bijbehorend AD-attribuut? Hiervoor moet je creatief worden.

Misschien was je in staat om alle groepsleden in de HR groep te vinden maar moet je ook het e-mailadres van elk gebruikersaccount zien?

$groupMembers = (Get-ADGroup -Identity 'HR' -Properties members).members
$groupMembers | Select-Object -Property Name, @{Name='Member';exp={Get-AdUser -Identity $_.Name -Properties emailAddress,lastlogonDate}}

Resultaten filteren

Tot nu toe heb je alle groepen en groepsleden gevonden, maar in een dagelijkse werkomgeving hoef je dit zelden te doen. Waarschijnlijk moet je slechts een beperkt aantal van elk item vinden. De AD-groepscmdlets bieden een paar manieren om dit aan te pakken.

De Filter-parameter

Zoals eerder vermeld, hebben beide cmdlets de Filter-parameter. Met deze parameter kun je beperken wat op vele verschillende manieren wordt teruggegeven buiten de scope van dit artikel.

Gebruikmakend van de Filter-parameter kunt u resultaten beperken op basis van een willekeurige AD-attribuut zoals naam, groepstype, e-mailadres, laatste aanmelding voor gebruikers, enzovoort.

Bijvoorbeeld, misschien wilt u alleen beveiligingsgroepen vinden. In dat geval zou u een GroupCategory-attribuut specificeren en een voorwaarde instellen om ervoor te zorgen dat alleen Security-groepen worden teruggegeven.

Get-ADGroup -Filter 'GroupCategory -eq "Security"'

Misschien wilt u alle beveiligingsgroepen vinden, maar ze mogen niet domeinlokale groepen zijn. U voegt dan een andere voorwaarde toe (deze keer met behulp van de -ne-operator) om te voorkomen dat domeinlokale groepen worden teruggegeven.

Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'

Als u wilt leren hoe u queryfilters maakt, moet u zeker Learning Active Directory and LDAP Filters in PowerShell bekijken.

Beperking van groepsresultaten op organisatorische eenheid (OU)

Misschien hebt u verschillende groepen genest in OUs. U wilt niet per se alle groepen vinden, maar alleen groepen in een specifieke OU. In dat geval kunt u de SearchBase-parameter gebruiken.

De SearchBase-parameter stelt u in staat om de Distinguished Name (DN) van een OU op te geven om te beginnen met zoeken naar groepen. Bijvoorbeeld, misschien hebt u een OU genaamd Locations aan de root van uw domein. In de Locations OU hebt u elke locatie-OU gemaakt, zoals Austin, NYC, en Los Angeles. U bent alleen op zoek naar groepen in de NYC OU en wilt de anderen niet zien.

Een voorbeeld van de AD OU-structuur wordt hieronder getoond. Merk op dat andere groepen buiten de Locations OUs bestaan.

company.local
- Locations
  - Austin
  - NYC
    - Group 1
    - Group 2
  - Los Angeles
- Computers
  - Group 3
  - Group 4
- Service Accounts

Misschien moet je alle AD-groepen vinden die alleen in de OU NYC staan. Om de query te beperken, zou je de SearchBase-parameter gebruiken en de DN opgeven zoals hieronder getoond. Alle groepen binnen de OU Locations worden teruggegeven.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,OU=NYC,DC=company,DC=pri'

Maar nu moet je alle groepen vinden in alle OUs onder de OU Locations. Get-ADGroup geeft alleen groepen terug in de OU Locations zelf – niet in de onderliggende OUs.

Om groepen binnen onderliggende OUs terug te geven, moet je de SearchScope-parameter gebruiken. Deze parameter is vergelijkbaar met de Recursive-parameter in die zin dat het ook kindobjecten zal inspecteren.

Bijvoorbeeld, om alle groepen te vinden in elke OU onder de OU Locations, specificeer Subtree of 2. Deze waarde voor SearchScope vertelt Get-ADGroup om recursief naar alle kinderen, kleinkinderen en verdere OUs te kijken.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2

Voor een volledige uitleg van de opties van de SearchScope-parameter, raadpleeg de documentatie van Get-ADGroup.

AD Groepen en Leden Exporteren

Dus je weet eindelijk hoe je de groepen en groepsleden die je nodig hebt kunt opvragen en teruggeven. Al deze informatie wordt naar de PowerShell-console gestuurd. Maar nu moet je deze informatie in een CSV-bestand of Excel-werkblad krijgen.

Het enige wat je nu hoeft te doen is al die informatie naar een bestand sturen.

Exporteren naar een CSV

Een populair formaat om AD-informatie naar te exporteren is een CSV. PowerShell heeft een handige cmdlet waarmee je eenvoudig CSV-bestanden kunt maken van PowerShell-uitvoer genaamd Export-Csv.

U kunt een CSV-bestand maken vanaf elke opdracht die in dit artikel wordt behandeld door het te leiden naar Export-Csv. Door het onderstaande voorbeeld te gebruiken, wordt alle uitvoer die Get-AdGroup zou retourneren naar de console omgeleid naar een CSV-bestand.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Csv -Path 'departmental_groups.csv' -NoTypeInformation

Voor meer informatie over deze handige cmdlet, bekijk Export-Csv: De PowerShell-manier om CSV-bestanden als eersteklas burgers te behandelen.

U kunt ook eenvoudig resultaten exporteren naar CSV via de Get-AdGroupMember-cmdlet.

Exporteren naar Excel

PowerShell heeft geen native manier om informatie naar Excel te exporteren. Maar u kunt altijd de gratis community-module genaamd ImportExcel downloaden. Deze module brengt CSV-achtige exportmogelijkheden rechtstreeks naar Excel-werkbladen. Om de PowerShell-module te installeren, voert u Install-Module ImportExcel -Scope CurrentUser uit.

Als u in het bovenstaande voorbeeld in plaats van een CSV-bestand de groepen naar een Excel-werkblad moest exporteren, zou u de Export-Excel-cmdlet gebruiken zoals hieronder wordt getoond.

Vind gelekte & onveilige wachtwoorden in uw Active Directory door te controleren tegen de NCSC-wachtwoordlijst.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Excel -Path 'departmental_groups.csv'

De ImportExcel-module heeft veel functionaliteiten om met Excel te werken. Als je een geavanceerder werkblad nodig hebt, heeft het waarschijnlijk een functie voor je.

Voor meer informatie over het gebruik van de ImportExcel-module, lees dit artikel. Het biedt een uitstekende introductie tot enkele veelvoorkomende gebruiksscenario’s die het kan verwerken.

Beheer en rapporteer over Active Directory, Exchange en Microsoft 365 met ManageEngine ADManager Plus. Download de gratis proefversie!

Conclusie

Met slechts twee PowerShell-cmdlets kun je vrijwel alles doen met AD-groepen. Dit artikel was slechts een inleiding tot de beschikbare functionaliteiten. Gebruik de hier verzamelde kennis, volg enkele links naar diepere onderwerpen in het artikel en ontdek wat je kunt bouwen!

Source:
https://adamtheautomator.com/get-adgroupmember/