Adam the Automator (Svenska)
En populär användning av PowerShell är att arbeta med Active Directory Directory Services (AD). Det finns så många tidsbesparande saker som PowerShell kan göra med AD-objekt. Med PowerShell får du AD-gruppmedlemmar och grupper sparar massor av tid.
Active Directory-grupper är ett utmärkt sätt att segmentera användarkonton. Grupper tillåter administratörer att definiera resursåtkomst i många system.
I den här artikeln ska vi använda PowerShell för att få AD-gruppmedlemmar och exportera AD-gruppmedlemmar. Du kan sedan använda den här informationen för att generera massor av intressanta rapporter.
Innehållsförteckning
Förutsättningar
Om du vill följa med i den här artikeln, se till att du har följande krav redo att gå:
- Arbetar på en Windows 10-domänansluten dator
- Inloggad med en användare som kan läsa AD-grupp- och användarkonton
- Installera PowerShell Active Directory-modulen
Lär dig grunderna
För att fråga AD-grupper och gruppmedlemmar har du två PowerShell-cmdlets till ditt förfogande – Get-AdGroup
och Get-AdGroupMember
.
Get-ADGroup
frågar efter en domänkontrollant och returnerar AD-gruppobjekt. Get-AdGroupMember
tittar inuti varje grupp och returnerar alla användarkonton, grupper, kontakter och andra objekt som finns i den gruppen.
Få AD-grupper
För att hitta AD-grupper med PowerShell kan du använda Get-ADGroup
cmdlet. Utan parametrar kommer Get-ADGroup
att fråga AD och returnera alla grupper i en domän med parametern Filter
. Parametern Filter
krävs. Det finns att begränsa de returnerade grupperna baserat på olika kriterier.
Till exempel, för att hitta alla grupper utan hänsyn till några kriterier, använd Get-ADGroup
och ange ett jokertecken ( asterisk) för Filter
-parametern. Du kan se ett exempel nedan. Att bläddra igenom alla dessa grupper kan ta ett tag om du har hundratals eller till och med tusentals i din domän.
Om du behöver hitta en enda grupp kan du använd parametern Identity
.
Identity
-parametern är en vanlig parameter bland alla Active Directory PowerShell-cmdletar. Det låter dig begränsa din fråga till ett enda AD-objekt. Om du till exempel behövde kontrollera om det fanns en grupp som heter HR, kan du ta reda på det genom att köra kommandot nedan.
Få AD-gruppmedlemmar
Användning av PowerShell för att lista medlemmar i AD-gruppen kräver Get-ADGroupMember
cmdlet. Denna cmdlet hämtar användare-, grupp- och datorobjekt i en viss grupp. Du kanske måste hitta alla medlemmar i gruppen Administratörer. I sin enklaste form använder du helt enkelt parametern Identity
igen och anger namnet på gruppen enligt nedan.
Observera att
Get-AdGroupMember
endast returnerar gruppmedlemskap för användare, grupper och datorer. Det returnerar inte andra AD-objekt som kontakter.
Uppräkning av gruppmedlemmar i gruppmedlemmar
Som du kanske vet, AD-grupper kan inte bara innehålla användarkonton utan även andra grupper som även kallas häckande. När en grupp är kapslad i en annan grupp ärver medlemmarna i gruppen samma behörigheter som tilldelats den överordnade gruppen.
Som standard gör PowerShell Get-AdGroupMember
cmdlet inte returnera kapslade gruppmedlemmar. För att avhjälpa detta kan du använda parametern Recursive
. Du kan till exempel hitta medlemmar i grupper kapslade inuti HR-gruppen med parametern Recursive
som visas nedan.
Få flera grupper / medlemmar samtidigt
Om du behöver fråga AD för många olika grupper eller gruppmedlemmar samtidigt kan du också göra det med en PowerShell foreach-loop. En foreach-loop kör ett kommando eller kod för varje objekt i en samling. I det här fallet kommer samlingen att vara en lista med gruppnamn.
Kanske måste du hitta alla gruppmedlemmar i HR-, redovisnings- och IT-grupperna. För att göra det, skulle du först skapa en samling eller matris med dessa gruppnamn. I exemplet nedan definieras denna samling som $groupNames
. Kör sedan Get-ADGroupMember
för varje namn i den samlingen och ge namnet på varje grupp till parametern Identity
.
Du kan alternativt använda
ForEach-Object
cmdlet för att slinga över grupper.
Använda alternativa referenser
Liksom många andra PowerShell-cmdlets har AD-grupp-cmdlets en Credential
parameter.När du kör en AD-grupp-cmdlet använder den som standard dina inloggade referenser för att fråga Active Directory. Detta beteende dikterar att du måste vara på en domänansluten dator som är inloggad som en Active Directory-användare som har behörighet.
Men tänk om du är på en arbetsgruppsdator eller behöver autentisera till AD som en annan användare? I så fall kan du använda parametern Credential
. Med den här parametern kan du ange ett användarnamn och lösenord som ska användas för autentisering.
Till exempel kanske ditt användarkonto inte har rätt att utföra en AD-uppgift. Du har ett servicekonto med ytterligare rättigheter. Du kan vara inloggad som standardanvändare men ändå autentisera med servicekontot enligt nedan.
Get-Credential
cmdlet uppmanar ett användarnamn / lösenord för att skapa en referens. Denna referens skickas sedan till Get-AdGroup
cmdlet för autentisering.
Parametern
Credential
finns i PowerShell för att tillhandahålla autentiseringsuppgifter. Mer information finns i Använda PowerShell Get-Credential-cmdlet och allt annat.
Få gruppmedlemmar med Get-ADGroup?
Det låter kanske kontraintuitivt men du kan också få gruppmedlemmar med Get-ADGroup
cmdlet också.
Det visar sig att Get-ADGroup
returnerar en egenskap för varje grupp som heter members
. Det här är en samling AD-objekt som är medlemmar i en grupp.
Till exempel, för att hitta gruppmedlemmar i den HR-gruppen igen utan att använda Get-ADGroupMember
kan du gör något så här:
Varför använda den här metoden framför den andra? Huvudskillnaden är att egenskaperna members
innehåller alla typer av AD-objekt – inte bara användare, datorer och andra grupper.
Kanske har du kontakter i olika grupper . När du kör Get-ADGroupMember
visas inte dessa kontakter. Men om du säger till Get-ADGroup
att returnera alla medlemmar i den gruppen tillsammans med att utöka den samlingen som visas nedan ser du kontakterna.
Hitta specifika AD-attribut
I grunderna ovan returnerade du helt enkelt alla grupper och gruppmedlemmar. Informationen som returneras för varje grupp och gruppmedlem är endast en delmängd av AD-attributen som är associerade med varje typ av objekt.
Kanske vill du se ett användarkontos e-postadress, senaste inloggningsdatum eller annat associerat AD-attribut ? För att göra detta måste du bli kreativ.
Kanske kunde du hitta alla gruppmedlemmarna i HR-gruppen men måste också se varje användarkontos e-postadress?
Filtrera resultat
Fram till denna tid har du hittat alla grupper och gruppmedlemmar, men i en daglig arbetsmiljö behöver du sällan göra det. Chansen är stor att du bara behöver hitta ett begränsat antal av varje objekt. AD-grupp-cmdletarna har några sätt att hantera detta på.
Filterparametern
Som nämnts tidigare har båda cmdletarna Filter
parameter. Med den här parametern kan du begränsa vad som returneras på många olika sätt utanför den här artikelns räckvidd.
Med parametern Filter
kan du begränsa resultaten med valfri AD attribut som namn, grupptyp, e-postadress, senaste inloggning för användare och så vidare.
Du kanske till exempel bara vill hitta säkerhetsgrupper. I så fall skulle du ange ett GroupCategory
-attribut och ange ett villkor för att endast Security
-grupper ska returneras.
Du kanske vill hitta alla säkerhetsgrupper men de får inte vara lokala domängrupper. Du skulle sedan lägga till ett annat villkor (den här gången med operatören -ne
) för att förhindra att lokala domängrupper returneras.
Om du vill lära dig hur du skapar frågefilter, se till att kolla in Learning Active Directory och LDAP-filter i PowerShell.
Begränsa gruppresultat efter organisationsenhet (OU)
Du kanske har olika grupper kapslade i OU: er. Du vill inte nödvändigtvis hitta alla grupper utan bara grupper i en specifik OU. I så fall kan du använda parametern SearchBase
.
Med parametern SearchBase
kan du ange en OU: s särskiljande namn (DN) för att börja söka efter grupper i. Till exempel kanske du har en OU som heter Locations i roten till din domän. I Locations OU har du varje OU-plats som Austin, NYC och Los Angeles. Du letar bara efter grupper i NYC OU och behöver begränsa att se de andra.
Ett exempel på AD OU-struktur visas nedan.Observera att andra grupper finns utanför platsen OU: er.
Du kanske måste hitta alla AD-grupper som bara finns i NYC OU. För att begränsa frågan använder du parametern SearchBase
som tillhandahåller DN enligt nedan. Alla grupper inuti Locations OU returneras.
Men nu måste du hitta alla grupper i alla OU under Locations OU. Get-ADGroup
returnerar bara grupper i själva platsen OU – inte i underordnade enheter.
Om du vill returnera grupper inuti underordnade enheter, måste du använda SearchScope
parameter. Denna parameter liknar Recursive
-parametern eftersom den också kommer att inspektera underordnade objekt.
Till exempel för att hitta alla grupper i vilken OU som helst under Locations OU, ange Subtree
eller 2
. Det här värdet för SearchScope
säger till Get-ADGroup
att rekursivt titta på alla barn, barnbarn och nedåt OU: er.
För en fullständig uppdelning av SearchScope
parameteralternativ, se dokumentationen Get-ADGroup
.
Exportera AD-grupper och medlemmar
Så du vet äntligen hur du ska fråga och returnera de grupper och gruppmedlemmar du behöver. All denna information skickas till PowerShell-konsolen. Men nu måste du få den här informationen som CSV-fil eller Excel-kalkylblad.
Det enda du behöver göra nu är att skicka all den informationen till en fil.
Exportera till en CSV
Ett populärt format att exportera AD-information till är en CSV. PowerShell har en praktisk cmdlet som gör att du enkelt kan skapa CSV-filer från PowerShell-utdata som heter Export-Csv
.
Du kan skapa en CSV-fil från vilket kommando som helst som omfattas av den här artikeln genom att leda den till Export-Csv
. Genom att använda exemplet nedan omdirigeras all utdata som Get-AdGroup
skulle återgå till konsolen, till en CSV-fil istället.
Mer information om denna praktiska cmdlet finns i Export-Csv: PowerShell-sättet att behandla CSV-filer som förstklassiga medborgare.
Exportera till Excel
PowerShell har inte ett eget sätt att exportera information till Excel. Men du kan alltid ladda ner den kostnadsfria community-modulen som heter ImportExcel. Denna modul tar CSV-liknande exportförmågor direkt till Excel-kalkylblad. För att installera PowerShell-modulen kör du Install-Module ImportExcel -Scope CurrentUser
.
Med hjälp av exemplet ovan, i stället för en CSV-fil, behövde du exportera grupperna till ett Excel-kalkylblad, du skulle använda Export-Excel
cmdlet som visas nedan.
ImportExcel-modulen har massor av funktioner att fungera med Excel. Om du behöver ett snyggare kalkylblad har det förmodligen en funktion åt dig.
Mer information om hur du använder ImportExcel-modulen finns i den här artikeln. Det ger en bra introduktion till några vanliga användningsfall som den kan hantera.
Slutsats
Med bara två PowerShell-cmdletar kan du göra nästan vad som helst med AD-grupper. Den här artikeln var bara ett introduktion till den funktionalitet som finns tillgänglig för dig. Använd kunskapen som samlas här, följ några av länkarna till djupare ämnesdyk i artikeln och se vad du kan bygga!