Adam de Automator
Een populair gebruik van PowerShell is het werken met Active Directory Directory Services (AD). Er zijn zoveel tijdbesparende dingen die PowerShell kan doen met AD-objecten. Het gebruik van PowerShell om AD-groepsleden en -groepen te krijgen, bespaart een hoop tijd.
Active Directory-groepen zijn een geweldige manier om gebruikersaccounts te segmenteren. Met groepen kunnen beheerders de toegang tot bronnen op veel systemen definiëren.
Laten we in dit artikel PowerShell gebruiken om AD-groepsleden op te halen en AD-groepsleden te exporteren. U kunt deze informatie vervolgens gebruiken om tonnen interessante rapporten te genereren.
Inhoudsopgave
Vereisten
Als je dit artikel wilt volgen, zorg er dan voor dat je de volgende vereisten bij de hand hebt:
- Werken op een computer met Windows 10, een domein dat lid is
- Aangemeld met een gebruiker die AD-groeps- en gebruikersaccounts kan lezen
- De PowerShell Active Directory-module hebben geïnstalleerd
De basisprincipes leren
Om AD-groepen en groepsleden te bevragen, heb je twee PowerShell-cmdlets tot je beschikking – Get-AdGroup
en Get-AdGroupMember
.
Get-ADGroup
vraagt een domeincontroller en retourneert AD-groepsobjecten. Get-AdGroupMember
kijkt in 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 cmdlet Get-ADGroup
gebruiken. Zonder parameters zal Get-ADGroup
AD opvragen en alle groepen in een domein retourneren met de parameter Filter
. De parameter Filter
is vereist. Het bestaat om het aantal geretourneerde groepen te beperken op basis van verschillende criteria.
Om bijvoorbeeld alle groepen te vinden zonder rekening te houden met criteria, gebruikt u Get-ADGroup
en specificeert u een jokerteken ( asterisk) voor de parameter Filter
. Hieronder ziet u een voorbeeld. Het bladeren door al deze groepen kan even duren als u honderden of zelfs duizenden in uw domein heeft.
Als u een enkele groep moet vinden, kunt u gebruik de parameter Identity
.
De parameter Identity
is een algemene parameter onder alle Active Directory PowerShell-cmdlets. Hiermee kunt u uw vraag beperken tot een enkel AD-object. Als je bijvoorbeeld moest controleren of een groep met de naam HR bestond, zou je dat kunnen achterhalen door de onderstaande opdracht uit te voeren.
AD-groepsleden ophalen
Voor het gebruik van PowerShell om leden van de AD-groep weer te geven, is de cmdlet Get-ADGroupMember
vereist. Met deze cmdlet worden gebruikers-, groeps- en computerobjecten in een bepaalde groep opgehaald. Misschien moet u alle leden van de groep Administrators vinden. In de eenvoudigste vorm zou u gewoon de parameter Identity
gebruiken en opnieuw de naam van de groep specificeren zoals hieronder.
Merk op dat
Get-AdGroupMember
alleen groepslidmaatschap retourneert voor gebruikers, groepen en computers. Het zal geen andere AD-objecten zoals contacten retourneren.
Opsomming van groepsleden binnen groepsleden
Zoals je wellicht weet, AD-groepen kan niet alleen gebruikersaccounts bevatten, maar ook andere groepen die nesting worden genoemd. Wanneer een groep in een andere groep is genest, nemen de leden van die groep dezelfde machtigingen over die zijn toegewezen aan de bovenliggende groep.
Standaard doet PowerShell Get-AdGroupMember
cmdlet geen geneste groepsleden teruggeven. Om dat te verhelpen, kunt u de parameter Recursive
gebruiken. U kunt bijvoorbeeld leden van groepen vinden die zijn genest in de HR-groep met behulp van de parameter Recursive
, zoals hieronder weergegeven.
Meerdere groepen / leden tegelijk krijgen
Als u AD voor veel verschillende groepen of groepsleden tegelijk wilt opvragen, kunt u dat ook doen met een PowerShell foreach-lus. Een foreach-lus voert een commando of code uit voor elk item in een verzameling. In dit geval is die verzameling een lijst met groepsnamen.
Misschien moet u alle groepsleden vinden in de groepen HR, Boekhouding en IT. Om dat te doen, moet u eerst een verzameling of array van deze groepsnamen maken. In het onderstaande voorbeeld wordt deze verzameling gedefinieerd als $groupNames
. Voer vervolgens voor elke naam in die verzameling Get-ADGroupMember
uit en geef de naam van elke groep op aan de parameter Identity
.
Je kunt ook de
ForEach-Object
cmdlet gebruiken om groepen te doorlopen.
Alternatieve referenties gebruiken
Net als veel andere PowerShell-cmdlets hebben de AD-groep-cmdlets een Credential
parameter.Wanneer u een AD-groep-cmdlet uitvoert, gebruikt deze standaard uw aangemelde referenties om Active Directory te doorzoeken. Dit gedrag schrijft voor dat u op een computer die lid is van een domein moet zijn aangemeld als een Active Directory-gebruiker met toestemming.
Maar wat als u zich op een werkgroepcomputer bevindt of u bij AD moet verifiëren als een andere gebruiker? In dat geval kunt u de parameter Credential
gebruiken. Met deze parameter kunt u een gebruikersnaam en wachtwoord specificeren om te gebruiken voor authenticatie.
Misschien heeft uw gebruikersaccount bijvoorbeeld niet het recht om een AD-taak uit te voeren. U heeft een serviceaccount met aanvullende rechten. U kunt zijn aangemeld als een standaardgebruiker, maar u kunt zich toch authenticeren met het serviceaccount zoals hieronder weergegeven.
De Get-Credential
cmdlet vraagt om een gebruikersnaam / wachtwoord om een referentie. Deze referentie wordt vervolgens doorgegeven aan de Get-AdGroup
cmdlet voor authenticatie.
De parameter
Credential
is alomtegenwoordig in PowerShell voor het verstrekken van authenticatiegegevens. Lees voor meer informatie De PowerShell Get-Credential-cmdlet en alle inloggegevens gebruiken.
Groepsleden ophalen met Get-ADGroup?
Het klinkt misschien contra-intuïtief, maar je kunt ook groepsleden krijgen met de Get-ADGroup
cmdlet.
Het blijkt dat Get-ADGroup
retourneert een eigenschap voor elke groep genaamd members
. Dit is een verzameling AD-objecten die lid zijn van een groep.
Als u bijvoorbeeld groepsleden in die HR-groep opnieuw wilt vinden zonder Get-ADGroupMember
te gebruiken, kunt u doe zoiets als dit:
Waarom zou je 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 . Als je Get-ADGroupMember
uitvoert, zouden die contacten niet verschijnen. Maar als je Get-ADGroup
vertelt om alle leden in die groep terug te sturen en die verzameling uit te breiden zoals hieronder getoond, zie je de contacten.
Specifieke AD-kenmerken zoeken
In het basisgedeelte hierboven stuurde je eenvoudig alle groepen en groepsleden terug. De informatie die voor elke groep en elk groepslid wordt geretourneerd, is slechts een subset van de AD-kenmerken die aan elk type object zijn gekoppeld.
Misschien wilt u het e-mailadres van een gebruikersaccount, de laatste aanmeldingsdatum of een ander gekoppeld AD-kenmerk zien ? Om dit te doen, moet je creatief zijn.
Misschien heb je alle groepsleden in de HR-groep kunnen vinden, maar moet je ook het e-mailadres van elk gebruikersaccount zien?
Resultaten filteren
Tot nu toe heb je alle groepen en groepsleden gevonden, maar in een dagelijkse werkomgeving hoef je dit zelden te doen. De kans is groot dat u van elk item maar een beperkt aantal hoeft te vinden. De cmdlets van de AD-groep hebben een paar manieren waarop u dit kunt afhandelen.
De filterparameter
Zoals eerder vermeld, hebben beide cmdlets de Filter
parameter. Met deze parameter kunt u beperken wat op veel verschillende manieren wordt geretourneerd buiten het bereik van dit artikel.
Met de parameter Filter
kunt u de resultaten beperken tot elke advertentie attribuut zoals naam, groepstype, e-mailadres, laatste aanmelding voor gebruikers, enzovoort.
Misschien wilt u bijvoorbeeld alleen beveiligingsgroepen vinden. In dat geval specificeert u een GroupCategory
-attribuut en stelt u een voorwaarde in om ervoor te zorgen dat alleen Security
groepen worden geretourneerd.
Misschien wilt u alle beveiligingsgroepen vinden, maar het mogen geen domeingebonden groepen zijn. Je zou dan een andere voorwaarde toevoegen (dit keer met de -ne
operator) om te voorkomen dat lokale domeingroepen worden geretourneerd.
Als je wilt leren hoe je queryfilters maakt, kijk dan eens naar Learning Active Directory en LDAP-filters in PowerShell.
Groepsresultaten beperken per organisatie-eenheid (OU)
Misschien heb je verschillende groepen genest in OEs. U wilt niet per se alle groepen zoeken, maar alleen groepen in een specifieke OE. In dat geval kunt u de SearchBase
parameter gebruiken.
Met de SearchBase
parameter kunt u de onderscheiden name (DN) om te beginnen met zoeken naar groepen in. Misschien heeft u bijvoorbeeld een OE genaamd Locations in de root van uw domein. In de locatie-organisatie-eenheid heeft u elke locatie-organisatie-eenheid gemaakt, zoals Austin, NYC en Los Angeles. U bent alleen op zoek naar groepen in de NYC OE en u moet het zien van anderen beperken.
Een voorbeeld van een AD OE-structuur wordt hieronder weergegeven.Merk op dat er andere groepen bestaan buiten de Locations OUs.
Misschien moet u alle AD-groepen vinden die alleen in de NYC OE zijn. Om de zoekopdracht te beperken, gebruikt u de parameter SearchBase
en geeft u de DN op, zoals hieronder wordt weergegeven. Alle groepen binnen de Locations OU worden geretourneerd.
Maar nu moet je alle groepen in alle OEs vinden onder de Locations OU. Get-ADGroup
retourneert alleen groepen in de Locations OU zelf – niet in de onderliggende OEs.
Om groepen binnen onderliggende OEs te retourneren, moet je de SearchScope
parameter. Deze parameter is vergelijkbaar met de Recursive
-parameter in die zin dat het ook onderliggende objecten zal inspecteren.
Om bijvoorbeeld alle groepen in een OE onder de Locations OU te vinden, specificeer Subtree
of 2
. Deze waarde voor SearchScope
vertelt Get-ADGroup
om recursief te kijken naar alle kinderen, kleinkinderen en lagere OEs.
Voor een volledig overzicht van SearchScope
parameteropties, raadpleeg de Get-ADGroup
documentatie.
AD-groepen en leden exporteren
Zodat je eindelijk weet hoe je de groepen en groepsleden die je nodig hebt kunt opvragen en retourneren. Al deze informatie wordt naar de PowerShell-console verzonden. Maar nu moet u deze informatie als CSV-bestand of Excel-werkblad invoeren.
Het enige dat u 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 u eenvoudig CSV-bestanden kunt maken van PowerShell-uitvoer met de naam Export-Csv
.
U kunt een CSV-bestand maken met elke opdracht die in dit artikel wordt behandeld door het door te sturen naar Export-Csv
. Als u het onderstaande voorbeeld gebruikt, wordt alle uitvoer die Get-AdGroup
zou hebben, omgeleid naar de console, naar een CSV-bestand.
Voor meer informatie over deze handige cmdlet, ga naar Export-Csv: The PowerShell Way to Treat CSV Files as First Class Citizens.
Exporteren naar Excel
PowerShell heeft geen eigen manier om informatie naar Excel te exporteren. Maar u kunt altijd de gratis communitymodule 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.
Door het bovenstaande voorbeeld te gebruiken, in plaats van een CSV-bestand, moest u de groepen exporteren naar een Excel-werkblad. gebruik de Export-Excel
cmdlet zoals hieronder getoond.
De ImportExcel-module heeft een heleboel functionaliteit om te werken met Excel. Als je een mooier werkblad nodig hebt, heeft het waarschijnlijk een functie voor je.
Lees dit artikel voor meer informatie over het gebruik van de ImportExcel-module. Het biedt een geweldige introductie tot enkele veelvoorkomende gebruikssituaties die het aankan.
Conclusie
Met slechts twee PowerShell-cmdlets kunt u doen zo ongeveer alles met AD-groepen. Dit artikel was slechts een inleiding tot de functionaliteit die voor u beschikbaar is. Gebruik de hier opgedane kennis, volg enkele links naar diepere onderwerpduiken in het artikel en kijk wat je kunt bouwen!