Hoe krijg ik een lijst met geselecteerde AD-groepen waarvan een grote lijst met gebruikers lid is? Inactieve gebruikers zoeken in Active Directory

Scripts voor het uitladen van alle gebruikers uit MS Active Directory (ITGC)

Ivan Piskunov

Een van de standaard controleprocedures ITGC voor catalogus Active Directory is om een ​​download van alle domeingebruikers te krijgen. Op basis van de verkregen gegevens worden verder testprocedures gevormd, bijvoorbeeld het bestuderen van de lijst met beheerders of het identificeren van gebruikers met een verlopen wachtwoord. De meest efficiënte manier om een ​​dergelijke ontlading te genereren, is door gebruik te maken van de standaardinterface PowerShell , voorbeelden waarvan we in dit artikel zullen ingaan.

1. Express uploaden via PowerShell-script

Hieronder staat een PowerShell-script, als een van de gemakkelijkste en snelste manieren om een ​​lijst te krijgen van alle gebruikers van een AD-domein in CSV-formaat, dat zonder problemen door dezelfde Excel kan worden geopend.

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru" $objSearcher.Filter = "(&(objectCategory=person) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Aantal accounts $users.Count $users | ForEach-Object ($user = $_.Properties New-Object PsObject -Property @( Titel = $user.description Afdeling = $user.department Login = $user.userprincipalname Phone = $user.telephonenumber Room = $user.physicaldeliveryofficename Naam = $gebruiker.cn ) ) | Export-Csv -NoClobber -Encoding utf8 -Pad C: lijst_domein_gebruikers.csv

Om het script op uw systeem te laten werken, moet u het enigszins corrigeren, namelijk de nodige parameters invoeren, d.w.z. zoals in dit voorbeeld zijn dit de parameters Gebruikers in de divisie afdelingen in het domein Test.ru. En specificeer ook het pad naar de locatie waar het bestand is opgeslagen. lijst_domein_gebruikers.csv

Na het lossen, indien direct geopend lijst_domein_gebruikers.csv , zal er in een onleesbare vorm uitzien, maar met behulp van standaardtools kunnen we het gemakkelijk in het formaat brengen dat we nodig hebben. Openen in Excel lijst_domein_gebruikers.csv , selecteer de eerste kolom, ga dan naar het tabblad "Gegevens" en klik op "Tekst op kolommen". Selecteer Gescheiden en klik op Volgende. Klaar!

!Opmerking dat dit script niet meer dan 1000 gebruikers zal weergeven. Het is redelijk geschikt voor een klein bedrijf, maar degenen die een groot aantal gebruikers in het domein hebben, moeten hun toevlucht nemen tot de hieronder beschreven methoden.

2. Geavanceerde PowerShell-cmdlet om Active Directory-gebruikersdownloads te krijgen

Met de Active Directory-module voor Windows PowerShell-tool (geïntroduceerd in Windows Server 2008 R2 en hoger) kunt u cmdlets maken die verschillende bewerkingen uitvoeren met AD-directoryobjecten. Gebruik de cmdlet . voor informatie over gebruikers en hun eigenschappen Get-ADUser.

Beginnen start een Powershell-venster met beheerdersrechten en importeer de Active Directory-module voor verdere actie:
Import-Module active directory

Naar lijst alle domeinaccounts en voer het commando uit:

Get-ADUser -filter *

Naar volledige informatie weergeven over alle beschikbare attributen gebruiker tuser, voer de opdracht uit:

Get-ADUSer -identity tuser -properties *


We zijn bijvoorbeeld geïnteresseerd in informatie over: wachtwoord wijzigen datum en tijd wanneer het verloopt . Het resultaat van de uitvoering van de opdracht kan worden geëxporteerd naar een tekstbestand:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:tempusers.txt

Of onmiddellijk uploaden naar CSV , die later gemakkelijk naar Excel zal worden geëxporteerd (bovendien zullen we, met behulp van sort-object, de tabel sorteren op de PasswordLastSet-kolom en ook een waar-voorwaarde toevoegen - de gebruikersnaam moet de tekenreeks "Dmitry" bevatten)

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | waar ($_.naam –zoals “*Dmitry*”) | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -pad c:tempuser-password-expires-2015.csv

Goedemiddag, beste lezers en abonnees, we blijven samen met u de mogelijkheden van Powershell en Active Directory verkennen. Zoals je je herinnert, heeft ze alle gebruikers- en computeraccounts in de NTDS.dit-database, alles is geweldig en gecentraliseerd. Wanneer een bedrijf meer dan één systeembeheerder heeft, kan het blijken dat het afval en extra inloggegevens verzamelt. We zijn allemaal mensen en we kunnen sommige dingen vergeten, en op sommige momenten kunnen we worden afgeleid, wat ook zal leiden tot het vergeten van belangrijke informatie. En we komen tot de conclusie dat inactieve gebruikers (ontslagen of vergeten) zich ophopen in de Actvie Directory, in ieder geval moet een goede systeembeheerder ze identificeren, uitschakelen en ze vervolgens naar believen verwijderen, wat we zullen doen.

Via ADUC snap

De vorige keer gaf ik je al een voorbeeld van het gebruik van de Active Directory: gebruikers en computers module, waarmee we zochten naar ontbrekende computers op het lokale netwerk die al een maand niet waren verschenen. Laten we nu hetzelfde doen met gebruikersaccounts. Ik heb AD op Windows Server 2012 R2, open ADUC, druk hiervoor op WIN + R en voer dsa.msc in.

Voer in het aanvraagformulier dat wordt geopend het volgende in:

  • Querynaam > de mijne is verloren gebruikers
  • Beschrijving indien nodig
  • Root aanvragen > hier kunt u het hele domein verlaten, of specificeren op de gewenste OU

Klik dan op de aanvraagknop.

Op het tabblad gebruikers zien we het item "Aantal dagen sinds de laatste keer inloggen", ik heb bijvoorbeeld 60 dagen ingesteld.

Als gevolg hiervan krijgt u de lijst met inactieve werknemersaccounts die u nodig hebt.

Via powershell-snap

Hetzelfde kan worden gedaan via Powershell. Ik zal meteen de code geven, met als taak het zoeken naar inactieve gebruikers, hiervoor heb ik een periode van 45 dagen gekozen, gebruikersgegevens uitgeschakeld en hiervoor naar een speciaal daarvoor bestemde OU verhuisd.

$date_with_offset=(Get-Date).AddDays(-45)
$users = Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | SortLastLogonDate
foreach ($user in $users) (set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Afgewezen,ou=Msk L.Users,ou=Locatie,dc=msk,dc= contoso,dc=com")
Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | SortLastLogonDatum | FT-naam, LastLogonDate -AutoSize | Uit-bestand c:\Script\users.txt

  • In de eerste regel declareer je een variabele waarin je de zoekperiode instelt
  • Maak een variabele aan en maak een selectie op basis van de laatste inlogtijd
  • Gebruikers verplaatsen

  • Een rapport maken naar een bestand

Meer nuttige dingen om met de gebruiker te werken. Voordat u onderstaande opdrachten gebruikt, moet u de Active Directory-module laden via de opdracht

Get-Help Get-ADUser

Vandaag zullen we proberen een lijst van alle gebruikers te uploaden naar een apart bestand van Active Directory. PowerShell zal hierbij onze belangrijkste assistent zijn. Het punt is dat Microsoft oorspronkelijk de PowerShell-opdrachtconsole had gepland als het belangrijkste hulpmiddel voor het beheren van Windows-servercomponenten. En vandaag, nu we al versie 2.0 hebben, is dit over het algemeen waar.

Zelfs in het recente verleden moesten beheerders, om op de een of andere manier met AD te kunnen communiceren, over het hulpprogramma dsquery of over verschillende scripts of hulpprogramma's beschikken. Vandaag kunnen we, te beginnen met Windows Server 2008 R2, met AD werken via PowerShell. Met de komst van PowerShell 2.0 wordt een speciale module gebruikt om te communiceren met Active Directory Active Directory-module voor Windows PowerShell, die de vereiste lijst met cmdlets bevat. Voor onze taken gebruiken we het commando Get-ADUser.

Dus, afhankelijk van het besturingssysteem waarop we de PowerShell-console zullen gebruiken, moeten we "voorbereidende stappen" uitvoeren.

1) Als we werken onder Windows Server tot versie 2012, dan moeten we het commando uitvoeren:

  • Import-Module active directory – opdracht om de module in AD te importeren

Voor besturingssysteemversies vanaf 2012 en hoger is deze module al standaard ingeschakeld.

2) Als we werken onder een client Windows, dan moet het RSAT-pakket voor extern beheer erop worden geïnstalleerd, met de Active Directory-module voor Windows PowerShell-component geïnstalleerd.

Het is vermeldenswaard dat de Get-ADUser-cmdlet wordt aanbevolen om te worden uitgevoerd wanneer de hoeveelheid geüploade gegevens maximaal 1000 gebruikers is.

AD-gebruikers exporteren met PowerShell naar een apart bestand

Laten we eerst de hulp bellen voor de opdracht Get-ADUser. Hierdoor krijgt u alle benodigde commando's voor verdere administratie.

  • help Get-ADUser - opdracht om hulp te bellen

Om een ​​lijst van alle gebruikers met alle eigenschappen in een PowerShell-venster te krijgen, moet u de volgende opdracht uitvoeren:

  • Get-ADUser -filter * – exportlijst van AD-gebruikers

Deze download is niet geheel informatief en past niet alle benodigde informatie in het venster. Laten we daarom proberen de zoekopdracht te verfijnen en de eigenschappen van een specifieke gebruiker met de naam user1 weer te geven:

  • Get-ADUSer -identiteit gebruiker1 -eigenschappen * – eigenschappen van een specifieke gebruiker exporteren

En laten we nu proberen een lijst van alle gebruikers met hun eigenschappen naar een externe te exporteren txt of csv het dossier:

  • Get-ADUser -filter * -properties * | Export-csv -pad c:\users.csv -encoding Unicode – gebruikers exporteren naar een apart bestand

Ik wil speciale aandacht besteden aan de sleutel -codering Unicode. Het dient om ervoor te zorgen dat het Russische Cyrillische alfabet, na export vanuit AD, correct kan worden weergegeven in het geüploade bestand. Via Microsoft Excel zullen we bijvoorbeeld vraagtekens zien in plaats van Russische letters.

Bij het bekijken van een bestand worden de gegevens geëxporteerd naar een enkele regel en zijn daarom onleesbaar. Om dit te veranderen, moeten we het volgende doen:

In dit artikel bekijken we de mogelijkheid van PowerShell om Active Directory-domeingroepen te beheren. We zullen bekijken hoe u een nieuwe groep in AD kunt maken, gebruikers eraan kunt toevoegen (of verwijderen), de gebruikers van de groep kunt weergeven en een paar andere nuttige domeingroepacties kunt uitvoeren die zeer nuttig zijn in het dagelijkse beheer. De volgende kern-cmdlets zijn beschikbaar voor het beheren van AD-groepen in de Active Directory PowerShell-module:

Om deze cmdlets in uw PowerShell-sessie te gebruiken, moet een speciale module voor interactie met AD worden geladen - Active Directory-module voor Windows PowerShell. Deze module werd voor het eerst geïntroduceerd in Windows Server 208 R2. In Windows Server 2012 en hoger is deze module standaard ingeschakeld. Op clientcomputers kan het worden geïnstalleerd en ingeschakeld als een van de RSAT-componenten. U kunt als volgt controleren of de module is geladen:

Get-Module -Lijst beschikbaar

Zoals u kunt zien, is de ActiveDirectory-module geladen. Zo niet, importeer het dan met het commando:

Import-Module active directory

Een volledige lijst van modulecommando's kan als volgt worden verkregen:

Get-Command -Module ActiveDirectory

Er zijn in totaal 147 cmdlets beschikbaar in de module, waarvan 11 met groepen kunnen werken.

Get-Command -Module ActiveDirectory -Naam "*Groep*"

Hier is hun lijst:

  • Add-ADPrincipalGroupLidmaatschap
  • Get-ADAccountAuthorizationGroup
  • Get-ADGroup
  • Get-ADGroup Member
  • Get-ADPrincipalGroupLidmaatschap
  • Nieuw-ADGroup
  • Verwijder-ADGroup
  • Verwijder-ADPrincipalGroupMembership
  • Set-ADGroup

Laten we een nieuwe groep maken in de opgegeven Active Directory-container (OU) met behulp van de opdracht Nieuw-ADGroup:

Nieuw-ADGroup "TestADGroup" -pad "OU=Groups,OU=Moskou,DC=corp,dc=winitpro,DC=ru" -GroupScope Global -PassThru –Uitgebreid

Met een attribuut Beschrijving je kunt een beschrijving voor de groep instellen, en met Weergavenaam de weergavenaam wijzigen.

Parameter Groepsbereik U kunt een van de volgende typen groepen opgeven:

  • 0 = DomainLocal
  • 1=Globaal
  • 2=Universeel

U kunt een distributiegroep als volgt maken:

Nieuwe ADGroup "TestADGroup-Distr" -pad "OU=Groups,OU=Moskou,DC=corp,dc=winitpro,DC=ru" -GroupCategory Distribution -GroupScope Global -PassThru –Uitgebreide

Add-AdGroupMember - gebruikers toevoegen aan een AD-groep

U kunt gebruikers toevoegen aan een Active Directory-groep met behulp van de Add- Advertentiegroeplid. Laten we twee gebruikers toevoegen aan de nieuwe groep:

Add-AdGroupMember -IdentiteitstestADGroup -Leden gebruiker1, gebruiker2

Als de lijst met gebruikers die aan de groep moeten worden toegevoegd vrij groot is, kunt u de lijst met accounts opslaan in een CSV-bestand, vervolgens het bestand importeren en elke gebruiker aan de groep toevoegen.

Het CSV-bestandsformaat is als volgt (lijst met gebruikers, één per regel, kolomnaam is gebruikers)

Import-CSV .\users.csv -Header gebruikers | ForEach-Object (Add-AdGroupMember -Identity 'TestADGroup' -leden $_.users)

Gebruik de volgende opdracht om alle leden van een groep (groepA) te krijgen en toe te voegen aan een andere groep (groepB):

Get-ADGroupLid "GroepA" | Get-ADUgebruiker | ForEach-Object (Add-ADGroupMember -Identity "Group-B" -Leden $_)

In het geval dat u de leden van alle geneste groepen (recursief) naar een nieuwe groep moet kopiëren, moet u de volgende opdracht gebruiken:

Get-ADGroupMember -Identiteit "GroupA" -Recursief | Get-ADUgebruiker | ForEach-Object (Add-ADGroupMember -Identity "GroupB" -Members $_)

Remove-ADGroupMember - Verwijder gebruikers uit een groep

Gebruik de opdracht Remove-ADGroupMember om gebruikers uit een AD-groep te verwijderen. Laten we twee gebruikers uit de groep verwijderen:

Remove-ADGroupMember -Identity TestADGroup -Leden gebruiker1, gebruiker2

Verwijdering van gebruikers uit de groep bevestigen:

Als u gebruikers uit een groep per lijst uit een CSV-bestand moet verwijderen, gebruikt u de volgende opdracht:

Import-CSV .\users.csv -Header gebruikers | ForEach-Object(Remove-ADGroupMember -Identity 'TestADGroup' -members $_.users)

Get-ADGroup - krijg informatie over een AD-groep

De cmdlet helpt u informatie over een groep op te halen. Get-ADGroup:

Get-ADGroup "TestADGroup"

Deze opdracht geeft informatie weer over de belangrijkste groepsattributen (DN, groepstype, naam, SID). Voer de volgende opdracht uit om de waarde van alle kenmerken van een AD-domeingroep weer te geven:

Get-ADGroup "TestADGroup" -eigenschappen *

Zoals u kunt zien, worden nu attributen zoals het aanmaken en wijzigen van een groep, beschrijving, enz. weergegeven.

U kunt de Get-ADGroup-cmdlet gebruiken om alle interessante groepen te vinden op basis van een specifiek patroon. U wilt bijvoorbeeld alle AD-groepen zoeken die de zin . bevatten beheerders :

Get-ADGroup -LDAPFilter “(name=*admins*)” | Tabel opmaken

Get-ADGroupMember - lijst AD-groepsleden

Geef een lijst met groepsgebruikers weer:

Get-ADGroupMember "TestADGroup"

Voer het volgende uit om alleen gebruikersnamen in de resultaten te laten staan:

Get-ADGroupMember "TestADGroup"| ft naam

Als andere domeingroepen in deze groep zijn opgenomen, gebruikt u de optie om een ​​volledige lijst met leden weer te geven, inclusief alle geneste groepen recursief.

Get-ADGroupMember ‘server-admins' -recursive| ft name

Voer de volgende opdracht uit om een ​​lijst met accounts die tot een specifieke groep behoren te exporteren naar een CSV-bestand (voor verder gebruik in Excel):

Get-ADGroupMember ‘server-admins' -recursive| ft samaccountname| Out-File c:\ps\admins.csv

Om gebruikersaccountgegevens in AD aan een tekstbestand toe te voegen, gebruiken we de cmdlet. Naast het account moet u bijvoorbeeld de positie en het telefoonnummer van de gebruiker van de groep weergeven:

Get-ADGroupMember -Identiteit 'server-admins' -recursive| foreach ( Get-ADUser $_ -properties titel, OfficePhone|Select-Object titel, OfficePhone)

(Get-ADGroupMember -Identiteit "domeinbeheerders").Aantal

Het bleek dat we in de groep "domeinbeheerders" 7 beheerdersaccounts hebben.

Gebruik de volgende opdracht om een ​​lijst met lege groepen in een specifieke OE te vinden:

Get-ADGroup -Filter * -Eigenschappen Leden -searchbase “OU=Moskou,DC=corp,dc=winitpro,DC=ru” | waar (-niet $_.leden) | selecteer Naam