Adam the Automator (Norsk)
En populær bruk av PowerShell er å jobbe med Active Directory Directory Services (AD). Det er så mange tidsbesparende ting PowerShell kan gjøre med AD-objekter. Ved å bruke PowerShell får du AD-gruppemedlemmer og grupper sparer massevis av tid.
Active Directory-grupper er en fin måte å segmentere brukerkontoer på. Grupper tillater administratorer å definere ressurstilgang på tvers av mange systemer.
I denne artikkelen, la oss bruke PowerShell for å få AD-gruppemedlemmer og eksportere AD-gruppemedlemmer. Du kan deretter bruke denne informasjonen til å generere mange interessante rapporter.
Innholdsfortegnelse
Forutsetninger
Hvis du vil følge med i denne artikkelen, må du være sikker på at du har følgende krav klare:
- Arbeider på en Windows 10, domenekoblet datamaskin
- Logget på med en bruker som kan lese AD-gruppe- og brukerkontoer
- Få installert PowerShell Active Directory-modulen
Lære det grunnleggende
For å søke etter AD-grupper og gruppemedlemmer har du to PowerShell-cmdlets til din disposisjon – Get-AdGroup
og Get-AdGroupMember
.
Get-ADGroup
spør en domenekontroller og returnerer AD-gruppeobjekter. Get-AdGroupMember
ser inne i hver gruppe og returnerer alle brukerkontoer, grupper, kontakter og andre objekter som finnes i den gruppen.
Få AD-grupper
For å finne AD-grupper med PowerShell, kan du bruke Get-ADGroup
cmdlet. Uten parametere vil Get-ADGroup
spørre AD og returnere alle gruppene i et domene ved hjelp av Filter
-parameteren. Filter
-parameteren er obligatorisk. Det eksisterer for å begrense gruppene som returneres basert på forskjellige kriterier.
For eksempel, for å finne alle gruppene uten hensyn til noen kriterier, bruk Get-ADGroup
og spesifiser et jokertegn ( stjerne) for Filter
-parameteren. Du kan se et eksempel nedenfor. Å bla gjennom alle disse gruppene kan ta en stund hvis du har hundrevis eller til og med tusenvis i domenet ditt.
Hvis du trenger å finne en enkelt gruppe, kan du bruk parameteren Identity
.
Identity
-parameteren er en vanlig parameter blant alle Active Directory PowerShell-cmdlets. Det lar deg begrense spørringen din til et enkelt AD-objekt. Hvis du for eksempel måtte sjekke om det eksisterte en gruppe kalt HR, kan du finne ut av det ved å kjøre kommandoen nedenfor.
Få AD-gruppemedlemmer
Bruk av PowerShell for å liste medlemmer av AD-gruppen krever Get-ADGroupMember
cmdlet. Denne cmdleten får bruker-, gruppe- og datamaskinobjekter i en bestemt gruppe. Kanskje du trenger å finne alle medlemmene i administratorgruppen. I sin enkleste form vil du bare bruke Identity
-parameteren igjen og spesifisere navnet på gruppen som nedenfor.
Merk at
Get-AdGroupMember
bare returnerer gruppemedlemskap for brukere, grupper og datamaskiner. Det returnerer ikke andre AD-objekter som kontakter.
Oppregning av gruppemedlemmer i gruppemedlemmer
Som du kanskje vet, AD-grupper kan ikke bare inneholde brukerkontoer, men andre grupper også kalt nesting. Når en gruppe er nestet i en annen gruppe, arver medlemmene av den gruppen de samme tillatelsene som er tilordnet den overordnede gruppen.
Som standard gjør PowerShell Get-AdGroupMember
cmdlet ikke returnere nestede gruppemedlemmer. For å avhjelpe det kan du bruke parameteren Recursive
. For eksempel kan du finne medlemmer av grupper som er nestet inne i HR-gruppen ved å bruke Recursive
-parameteren som vist nedenfor.
Få flere grupper / medlemmer samtidig
Hvis du trenger å spørre AD for mange forskjellige grupper eller gruppemedlemmer samtidig, kan du også gjøre det ved hjelp av en PowerShell foreach-løkke. En foreach-løkke kjører en kommando eller kode for hvert element i en samling. I dette tilfellet vil samlingen være en liste over gruppenavn.
Kanskje du trenger å finne alle gruppemedlemmene i HR-, regnskaps- og IT-gruppene. For å gjøre det, oppretter du først en samling eller en gruppe med disse gruppenavnene. Eksemplet nedenfor definerer denne samlingen som $groupNames
. Kjør deretter Get-ADGroupMember
for hvert navn i den samlingen, og oppgi navnet på hver gruppe til Identity
-parameteren.
Du kan alternativt bruke
ForEach-Object
cmdlet for å gå over grupper.
Ved hjelp av alternative legitimasjoner
Som mange andre PowerShell-cmdlets, har AD-gruppe-cmdlets en Credential
parameter.Når du kjører en AD-gruppe-cmdlet, bruker den som standard innloggede legitimasjonene dine for å spørre om Active Directory. Denne oppførselen tilsier at du må være på en domenetilkoblet datamaskin som er logget på som en Active Directory-bruker som har tillatelse.
Men hva om du er på en arbeidsgruppecomputer eller trenger å autentisere til AD som en annen bruker? I så fall kan du bruke parameteren Credential
. Denne parameteren lar deg spesifisere et brukernavn og passord som skal brukes til autentisering.
For eksempel, kanskje brukerkontoen din ikke har rett til å utføre en AD-oppgave. Du har en tjenestekonto med tilleggsrettigheter. Du kan være logget på som en standardbruker, men likevel autentisere med tjenestekontoen som vist nedenfor.
Get-Credential
cmdlet ber om et brukernavn / passord for å opprette et legitimasjon. Denne legitimasjonen sendes deretter til Get-AdGroup
cmdlet for autentisering.
Parameteren
Credential
er allestedsnærværende i PowerShell for å gi autentiseringslegitimasjon. Hvis du vil ha mer informasjon, kan du lese Bruke PowerShell Get-Credential-cmdleten og alle ting legitimasjon.
Få gruppemedlemmer med Get-ADGroup?
Det kan høres kontraintuitivt ut, men du kan også få gruppemedlemmer med Get-ADGroup
cmdleten.
Det viser seg at Get-ADGroup
returnerer en egenskap for hver gruppe kalt members
. Dette er en samling av AD-objekter som er medlemmer av en gruppe.
Hvis du for eksempel vil finne gruppemedlemmer i den HR-gruppen uten å bruke Get-ADGroupMember
, kan du gjør noe sånt som dette:
Hvorfor bruke denne metoden fremfor den andre? Hovedforskjellen er at egenskapene members
inneholder alle typer AD-objekter – ikke bare brukere, datamaskiner og andre grupper.
Kanskje du har kontakter i forskjellige grupper . Når du kjører Get-ADGroupMember
, vil ikke disse kontaktene dukke opp. Men hvis du ber Get-ADGroup
om å returnere alle medlemmene i den gruppen sammen med å utvide samlingen som vist nedenfor, ser du kontaktene.
Finne spesifikke AD-attributter
I grunnleggende delen over returnerte du ganske enkelt alle gruppene og gruppemedlemmene. Informasjonen som returneres for hver gruppe og gruppemedlem er bare en delmengde av AD-attributtene knyttet til hver type objekt.
Kanskje du vil se e-postadressen til en brukerkonto, siste påloggingsdato eller annet tilknyttet AD-attributt ? For å gjøre dette må du bli kreativ.
Kanskje du var i stand til å finne alle gruppemedlemmene i HR-gruppen, men du må også se e-postadressen til hver brukerkonto?
Filtrering av resultater
Inntil dette har du funnet alle grupper og gruppemedlemmer, men i et daglig arbeidsmiljø trenger du sjelden å gjøre dette. Sjansen er stor for at du bare trenger å finne et begrenset antall av hvert element. AD-gruppen cmdlets har noen måter du kan håndtere dette på.
Filterparameteren
Som nevnt tidligere har begge cmdlets Filter
parameter. Denne parameteren lar deg begrense det som returneres på mange forskjellige måter utenfor omfanget av denne artikkelen.
Ved å bruke Filter
-parameteren kan du begrense resultatene med hvilken som helst AD attributt som navn, gruppetype, e-postadresse, siste pålogging for brukere og så videre.
For eksempel, kanskje du bare vil finne sikkerhetsgrupper. I så fall vil du spesifisere et GroupCategory
-attributt og angi en betingelse for å sikre at bare Security
-grupper blir returnert.
Kanskje du vil finne alle sikkerhetsgrupper, men de må ikke være lokale domenegrupper. Du vil da legge til en annen betingelse (denne gangen ved hjelp av -ne
-operatøren) for å forhindre at lokale domenegrupper returneres.
Hvis du vil lære hvordan du oppretter søkefiltre, må du sjekke ut Learning Active Directory og LDAP-filtre i PowerShell.
Begrensning av grupperesultater etter organisasjonsenhet (OU)
Kanskje du har forskjellige grupper nestet i OUer. Du vil ikke nødvendigvis finne alle grupper, men bare grupper i en spesifikk enhet. I så fall kan du bruke SearchBase
-parameteren.
Parameteren SearchBase
lar deg spesifisere en OUs utmerkede navn (DN) for å begynne å søke etter grupper i. For eksempel har du kanskje en OU kalt Locations i roten til domenet ditt. I Locations OU har du hvert OU opprettet som Austin, NYC og Los Angeles. Du leter bare etter grupper i NYC OU og trenger å begrense å se de andre.
Et eksempel på AD OU-struktur er vist nedenfor.Legg merke til at andre grupper eksisterer utenfor Locations OUene.
Kanskje du trenger å finne alle AD-gruppene som bare er i NYC OU. For å begrense spørringen, bruker du SearchBase
-parameteren som gir DN som vist nedenfor. Alle gruppene i Locations OU returneres.
Men nå må du finne alle gruppene i alle OU-ene under Locations OU. Get-ADGroup
returnerer bare grupper i selve lokaliseringsenheten – ikke i underenhetsenhetene.
Hvis du vil returnere grupper inne i underordnede enheter, må du bruke SearchScope
parameter. Denne parameteren ligner Recursive
-parameteren ved at den også vil inspisere underordnede objekter.
For eksempel å finne alle gruppene i en hvilken som helst OU under Locations OU, spesifiser Subtree
eller 2
. Denne verdien for SearchScope
forteller Get-ADGroup
å se rekursivt på alle barn, barnebarn og videre ned-enheter.
For en fullstendig oversikt over SearchScope
parameteralternativer, se Get-ADGroup
dokumentasjonen.
Eksportere AD-grupper og medlemmer
Så du vet endelig hvordan du kan spørre og returnere gruppene og gruppemedlemmene du trenger. All denne informasjonen sendes til PowerShell-konsollen. Men nå må du få denne informasjonen til som CSV-fil eller Excel-regneark.
Det eneste du trenger å gjøre nå er å sende all den informasjonen til en fil.
Eksporter til en CSV
Et populært format å eksportere AD informasjon til er en CSV. PowerShell har en hendig cmdlet som lar deg enkelt lage CSV-filer fra PowerShell-utgang kalt Export-Csv
.
Du kan opprette en CSV-fil fra hvilken som helst kommando som er dekket i denne artikkelen ved å føre den til Export-Csv
. Ved å bruke eksemplet nedenfor, omdirigeres all utdata som Get-AdGroup
vil ha tilbake til konsollen, til en CSV-fil i stedet.
For mer informasjon om denne praktiske cmdleten, sjekk ut Export-Csv: The PowerShell Way to Treat CSV Files as First-Class Citizens.
Eksport til Excel
PowerShell har ikke en innfødt måte å eksportere informasjon til Excel på. Men du kan alltid laste ned den gratis fellesskapsmodulen som heter ImportExcel. Denne modulen bringer CSV-lignende eksportevner direkte til Excel-regneark. For å installere PowerShell-modulen, kjør Install-Module ImportExcel -Scope CurrentUser
.
Ved å bruke eksemplet ovenfor, i stedet for en CSV-fil, trengte du å eksportere gruppene til et Excel-regneark, du bruk Export-Excel
cmdlet som vist nedenfor.
ImportExcel-modulen har massevis av funksjonalitet som skal fungere med Excel. Hvis du trenger et mer avansert regneark, har det sannsynligvis en funksjon for deg.
Hvis du vil ha mer informasjon om hvordan du bruker ImportExcel-modulen, kan du lese denne artikkelen. Det gir en flott introduksjon til noen vanlige brukssaker den kan håndtere.
Konklusjon
Ved å bruke bare to PowerShell-cmdlets, kan du gjøre omtrent alt med AD-grupper. Denne artikkelen var bare en introduksjon til funksjonaliteten som er tilgjengelig for deg. Bruk kunnskapen som er samlet her, følg noen av lenkene til dypere dykk i artikkelen og se hva du kan bygge!