Gegevens uploaden vanuit ad powershell. Hoe u een lijst met gebruikers kunt downloaden uit Active Directory

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

Ivan Piskunov

Eén van de standaard auditprocedures ITGC voor de catalogus Actieve map is om een ​​download van alle domeingebruikers te krijgen. Op basis van de verkregen gegevens worden vervolgens testprocedures gevormd, bijvoorbeeld door de lijst met beheerders te bestuderen of gebruikers te identificeren met een verlopen wachtwoord. De meest effectieve manier om zo’n upload te maken is door gebruik te maken van standaardinterface PowerShell , waarvan we voorbeelden in dit artikel zullen bekijken

1. Express-upload met behulp van een PowerShell-script

Hieronder staat PowerShell-script, als een van de eenvoudigste en snelle manieren krijg een lijst van alle AD-domeingebruikers in CSV-formaat, die zonder problemen in Excel kan worden geopend.

$objSearcher = Nieuw object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Gebruikers,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 @( Positie = $user.description Afdeling = $user.department Login = $user.userprincipalname Telefoon = $user.telephonenumber Kamer = $user.physicaldeliveryofficename Volledig 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 noodzakelijke parameters invoeren, d.w.z. zoals in in dit voorbeeld dit zijn de parameters Gebruikers op de afdeling Afdelingen in het domein Test.ru. En geef ook het pad aan waar het bestand is opgeslagen lijst_domein_gebruikers.csv

Na het lossen, als je hem meteen opent lijst_domein_gebruikers.csv , ziet er onleesbaar uit, maar met standaardmiddelen kunnen we het gemakkelijk in het formaat brengen dat we nodig hebben. Openen in Excel lijst_domein_gebruikers.csv , selecteer de eerste kolom, ga vervolgens naar het tabblad "Gegevens" en klik op "Tekst per kolommen". Selecteer "gescheiden" en klik op "Volgende". Klaar!

!Het is noodzakelijk om op te merken, Wat dit script zal niet meer dan 1000 gebruikers weergeven. Voor klein bedrijf Het is redelijk geschikt, maar voor degenen die een groot aantal gebruikers in hun domein hebben, moeten ze hun toevlucht nemen tot de hieronder beschreven methoden.

2. Geavanceerde PowerShell-cmdlet voor het ontvangen van uploads Actieve gebruikers Directory

Active Directory Module voor Windows PowerShell-tool (geïntroduceerd in Windows-server 2008 R2 en hoger), kunt u cmdlets maken die verschillende manipulaties uitvoeren met AD-mapobjecten. De cmdlet wordt gebruikt om informatie over gebruikers en hun eigenschappen te verkrijgen Get-ADUser.

Om te beginnen start een Powershell-venster met beheerdersrechten en import Actieve module Directory voor verdere actie:
Importmodule activedirectory

Naar geef alle domeinaccounts weer en laten we de opdracht uitvoeren:

Get-ADUser-filter *

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

Get-ADUser -identiteit tuuser -eigenschappen *


Wij zijn bijvoorbeeld geïnteresseerd in informatie over datum waarop het wachtwoord is gewijzigd en het tijdstip waarop het verloopt . Het resultaat van de opdracht kan worden geëxporteerd naar een tekstbestand:

Get-ADUser -filter * -eigenschappen WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires | ft Naam, WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires > C:tempusers.txt

Of meteen uploaden naar CSV , wat in de toekomst handig zal zijn om naar Excel te exporteren (daarnaast zullen we met behulp van sort-object de tabel sorteren op de kolom PasswordLastSet, en ook een waar-voorwaarde toevoegen - de gebruikersnaam moet de string "Dmitry" bevatten)

Get-ADUser -filter * -eigenschappen WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires | waar ($_.name –zoals “*Dmitry*”) | sorteerobject WachtwoordLastSet | select-object Naam, WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires | Export-csv-pad c:tempuser-wachtwoord-verloopt-2015.csv

In de opmerkingen bij het vorige artikel herinnerden we ons over boekhouding in Excel in plaats van 1C. Laten we eens kijken hoeveel u Excel kent. Vandaag laat ik je zien hoe je gegevens uit Active Directory kunt halen en ermee kunt werken zonder macro's en PowerShell - alleen met standaard Office-mechanismen. U kunt bijvoorbeeld eenvoudig analyses krijgen over het gebruik van besturingssystemen in uw organisatie als u nog niet over zoiets als Microsoft SCOM beschikt. Nou ja, of gewoon opwarmen en je gedachten afleiden van de scripts.


Uiteraard kunt u de gegevens zoals in de onderstaande voorbeelden letterlijk met één regel in PowerShell verkrijgen. Maar ten eerste is PowerShell te saai, en ten tweede kan Excel gegevens dynamisch bijwerken - de resulterende documenten kunnen online worden gepubliceerd en vergeten dat ze moeten worden bijgewerkt.

Om met gegevens te werken, zal ik het Power Query-mechanisme gebruiken. Voor Office 2010 en 2013 moet u de plug-in installeren in Microsoft Office 2016 is deze module al ingebouwd. Helaas is de standaardeditie niet genoeg voor ons; we hebben Professional nodig.


Het mechanisme zelf is ontworpen om gegevens van de meesten te ontvangen en te verwerken verschillende bronnen- van oude ODBC- en tekstbestanden, tot Exchange, Oracle en Facebook. Meer details over het mechanisme en de ingebouwde scripttaal “M” zijn al geschreven op Habré, maar ik zal een paar voorbeelden bekijken met behulp van kracht Query om gegevens uit Active Directory op te halen.

Opwarming: laten we eens kijken wanneer onze gebruikers zijn ingelogd

Het verzoek aan de domeindatabase zelf wordt aangemaakt op de “Data - Nieuw verzoek― Uit andere bronnen ― Uit Active Directory.”



Geef de gegevensbron op.


U moet een domeinnaam selecteren en de benodigde verbindingsgegevens opgeven. Selecteer vervolgens het type objecten, in dit voorbeeld: gebruiker. Rechts in het voorbeeldvenster is de query al actief en wordt een voorbeeld van de gegevens weergegeven.



Wij bereiden een aanvraag voor en bewonderen de preview.


U dient uw verzoek eerst voor te bereiden door op de knop “Bewerken” te klikken en te selecteren vereiste kolommen. In wezen zijn deze kolommen klassen. Elk van hen bevat een reeks specifieke kenmerken van een Active Directory-object, behalve de hoofdkolom weergavenaam, wat zelf een attribuut is. Ik zal me concentreren op de lessen gebruiker, persoon, bovenkant En beveiligingPrincipaal. Nu moet je selecteren vereiste attributen van elke klasse met behulp van de “extensie” - een pictogram met twee pijlen bij de kolomkop:

  • Klas gebruiker uitbreiden door te kiezen lastLogonTijdstempel En userAccountControl;
  • V persoon laten we kiezen Telefoonnummer;
  • V bovenkantwanneeraangemaakt;
  • en binnen beveiligingPrincipaalSamAccountnaam.


Wij breiden het verzoek uit.


Laten we nu het filter instellen: om te voorkomen dat accounts worden geblokkeerd, moet het attribuut userAccountControl de waarde 512 of 66048 hebben. Het filter kan in uw omgeving anders zijn. U kunt meer lezen over het kenmerk in de Microsoft-documentatie.



Een filter toepassen.


Soms detecteert Excel de gegevensindeling onjuist, vooral de waarde van het kenmerk lastLogonTimestamp. Als een dergelijk ongeluk u plotseling overkomt, kunt u het juiste formaat instellen op het tabblad “Converteren”.

Nu moet de userAccountControl-kolom worden verwijderd - deze is helemaal niet nodig in het display. En klik op “Downloaden en sluiten”.


Het resultaat is een bord dat nog een kleine finishing touch nodig heeft. Hernoem de kolommen bijvoorbeeld naar iets dat beter leesbaar is. En aanpassen automatische update gegevens.


Automatische updates bij het openen van een tabel of bij time-out worden geconfigureerd op het tabblad “Gegevens” in “Eigenschappen”.



Gegevensupdate instellen.


Nadat het instellen van de update is voltooid, kunt u de tafel veilig aan de personeelsafdeling of de beveiligingsdienst geven - laat hen weten wie zich wanneer op het systeem heeft aangemeld.


De aanvraagcode in de “M”-taal staat onder de spoiler.

let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Objectcategorieën"], user1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(user1,( "organizationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchCustomAttributes", "mailRecipient", "distinguishedName")), #"Uitgebreid element securityPrincipal" = Table.ExpandRecordColumn(#"Verwijderde kolommen", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"Uitgebreid element top" = Table.ExpandRecordColumn(#"Uitgebreid element securityPrincipal ", "top", ("whenCreated"), ("whenCreated")), #"Uitgebreid element person" = Table.ExpandRecordColumn(#"Uitgebreid element top", "person", ("telephoneNumber"), ("telephoneNumber ")), #"Expanded element user" = Table.ExpandRecordColumn(#"Expanded element person", "user", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Rows met filter toegepast" = Table.SelectRows(#"Uitgebreid gebruikerselement", elk ( = 512 of = 66048)), #"Gewijzigd type" = Table.TransformColumnTypes(#"Rijen met filter toegepast",(("lastLogonTimestamp", type datetime))), #"Remoted columns1" = Table.RemoveColumns(#"Changed type",("userAccountControl")) in #"Remoted columns1"

Wij creëren adresboek, of wat u wanneer moet doen bedrijfsportaal niet bevriend met AD

Een andere optie voor het gebruik van Excel in combinatie met Active Directory is het maken van een adresboek op basis van AD-gegevens. Het is duidelijk dat het adresboek alleen actueel is als het domein in orde is.


Laten we een aanvraag voor een object maken gebruiker, breid de klas uit gebruiker V mail, en klasse persoon V Telefoonnummer. Laten we alle kolommen verwijderen, behalve onderscheidenNaam– de domeinstructuur herhaalt de structuur van de onderneming, dus de namen Organisatorische eenheden overeenkomen met de namen van de afdelingen. Op dezelfde manier kunnen beveiligingsgroepen worden gebruikt als basis voor afdelingsnamen.


Nu vanaf de lijn CN=Gebruikersnaam, OU=Boekhoudingsafdeling, OU=Divisies, DC=domein, DC=ru u moet de afdelingsnaam rechtstreeks extraheren. De eenvoudigste manier om dit te doen is door de scheidingstekens op het tabblad Transformeren te gebruiken.



Het extraheren van de tekst.


Als scheidingstekens gebruik ik OU= En ,OU=. In principe is een komma voldoende, maar ik speel op safe.



Voer scheidingstekens in.


Nu u het filter gebruikt, kunt u onnodig afsnijden OU, zoals geblokkeerde gebruikers en ingebouwd, configureer het sorteren en laad gegevens in de tabel.



Weergave van de overzichtstabel.

Snel rapporteren over de samenstelling van werkplekken, zonder tussenkomst van middelen of andere voorbereidingen

Laten we nu proberen een bruikbare tabel te maken door gegevens op computers te verkrijgen. Laten we een rapport maken over de besturingssystemen die door het bedrijf worden gebruikt: hiervoor zullen we een verzoek aanmaken, maar deze keer zullen we in de navigator selecteren computer.



Wij doen een aanvraag voor het computerobject.


Laten we de kolomklassen verlaten computer En bovenkant en breid ze uit:

  • Klas computer uitbreiden door te kiezen cn, besturingssysteem, besturingssysteemServicePack En besturingssysteemversie;
  • in de klas bovenkant laten we kiezen wanneeraangemaakt.


Geavanceerd verzoek.


Indien gewenst kunt u alleen een rapport maken over serverbesturingssystemen. Filter bijvoorbeeld op het kenmerk operatingSystem of operatingSystemVersion. Ik zal dit niet doen, maar ik zal de weergave van de aanmaaktijd corrigeren - ik ben alleen geïnteresseerd in het jaartal. Om dit te doen, selecteert u op het tabblad “Conversie” de kolom die we nodig hebben en selecteert u “Jaar” in het menu “Datum”.



We halen het jaar uit het tijdstip waarop de computer het domein binnenkwam.


Het enige dat nu overblijft is het verwijderen van de kolom weergavenaam als onnodig en het laden van het resultaat. De gegevens zijn klaar. Nu kunt u ermee werken zoals met een gewone tafel. Laten we eerst een draaitabel maken op het tabblad "Invoegen" - " Draaitabel" Laten we akkoord gaan met de keuze van de gegevensbron en de velden configureren.



Veldinstellingen voor draaitabel.


Nu hoeft u alleen nog maar het ontwerp naar uw smaak aan te passen en het resultaat te bewonderen:



Overzichtstabel voor computers in AD.


Indien gewenst kunt u toevoegen samenvattend schema, ook op het tabblad Invoegen. Voeg toe in de "Categorie" (of in de "Rijen", naar smaak). besturingssysteem, naar gegevens ― cn. Op het tabblad “Ontwerp” kun je het type diagram kiezen dat je leuk vindt; Ik gaf de voorkeur aan het cirkeldiagram.



Cirkeldiagram.


Nu is duidelijk zichtbaar dat, ondanks de voortdurende update, het totaal aantal werkstations met Windows XP en servers met Windows 2003 behoorlijk groot is. En er is iets om naar te streven.


De aanvraagcode staat onder de spoiler.

let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Objectcategorieën"], computer1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(computer1,( "user", "organizationalPerson", "person")), #"Andere verwijderde kolommen" = Table.SelectColumns(#"Remoted columns",("displayName", "computer", "top")), #"Expanded item computer" = Table.ExpandRecordColumn(#"Andere externe kolommen", "computer", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " operatingSystemVersion")), #"Extended top element" = Table.ExpandRecordColumn(#"Uitgebreid computerelement", "top", ("whenCreated"), ("whenCreated")), #"Extracted year" = Table.TransformColumns( #"Uitgevouwen element top",(("whenCreated", Date.Year))), #"Remoted columns1" = Table.RemoveColumns(#"Extracted year",("displayName")) in #"Remoted columns1"

Tags toevoegen

0

Ik heb het volgende werkscript dat controleert of grote lijst gebruikers in het CSV-bestand als lid van de AD-groep en schrijft de resultaten naar results.csv.

Ik weet niet zeker hoe ik het script moet converteren, zodat ik $group = "InfraLite" kan veranderen in $group = DC .\List_Of_AD_Groups.CSV .

Het script retourneert dus niet alleen overeenkomsten voor één AD-groep, maar ook overeenkomsten voor de 80 AD-groepen in Lijst_van_AD_groepen.csv. Het schrijven van JA/NEE voor elke AD-groep in een nieuwe CSV-kolom (of als dit niet mogelijk is, zal het maken van een afzonderlijk CSV-bestand voor elke groep met de resultaten hetzelfde doen.

Ik zou dit handmatig kunnen doen door de waarde van $group en de naam van het exportbestand te wijzigen en het script 80 keer opnieuw uit te voeren, maar daarvoor zou ik snel moeten zijn met PS

bijvoorbeeld resultaten.csv?:

NAAM AD_GROUP1 AD_GROUP2 AD_GROUP80 enz. user1 ja nee ja user2 nee nee ja user3 nee ja nee echo "UserName`InfraLite" >> results.csv $users = GC .\user_list.csv $group = "InfraLite" $members = Get-ADGroupMember -Identity $group -Recursive |

  • Selecteer -ExpandProperty SAMAccountName foreach ($user in $users) ( if ($members -contains $user) ( echo "$user $group`tYes" >> resultaten.csv ) else ( echo "$user`tNo" >> resultaten .csv) )
  • 2 antwoorden

    Sorteren:

0

Activiteit

Een triviale oplossing voor uw probleem zou zijn om uw bestaande code in een andere lus te plaatsen en voor elke groep een uitvoerbestand te maken:

Een elegantere aanpak zou zijn om een ​​groepstoewijzingssjabloon te maken, deze voor elke gebruiker te klonen en een kopie te vullen met de groepslidmaatschappen van de gebruiker. Zoiets zou moeten werken:

$template = @() Get-Content "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $groups = @() Get-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name ) Get-ADUser -Filter * -Eigenschappen MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | Where-Object ( $groupmap.ContainsKey($_) ) | ForEach-Object ( $groupmap [$_] = $true ) Nieuw-Object -Type PSObject -Eigenschap $groupmap ) | Export-Csv "C:\user_group_mapping.csv" -NoType

0

Ik speel hier al een tijdje mee en ik denk dat ik een manier heb gevonden om je precies te geven wat je zocht.

Ik denk dat Ansgar op de goede weg was, maar ik kon het niet laten doen wat daarna kwam. Hij geeft aan dat hij op het moment van schrijven geen toegang heeft tot de AD-omgeving.

Dit is wat ik bedacht heb:

$UserArray = Get-Content "C:\Temp\Users.txt" $GroupArray = Get-Content "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # Een hashtabel instellen voor later gebruik $UserHash = New-Object -TypeName System.Collections.Hashtable # Buitenste lus om gebruikers en lidmaatschap toe te voegen aan UserHash $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # Stript de LPAP-syntaxis tot alleen de SAMAccountName van de groep $Memberships = $UserInfo.MemberOf | ForEach-Object( ($_.Split(",")) .replace("CN=","") ) #Het User=Membership-paar toevoegen aan de Hash $UserHash.Add($_,$Memberships) ) #Buitenste lus om een ​​object per gebruiker te maken $Results = $UserArray | ForEach-Object( # Maak eerst een eenvoudig voorwerp$User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # Voeg dynamisch leden toe aan het object, gebaseerd op de $GroupArray $GroupArray | ForEach-Object ( #Checking $UserHash om te zien of de groep verschijnt in de ledenlijst van de gebruiker $UserIsMember = $UserHash.($User.Name) -bevat $_#Eigenschap toevoegen aan object en waarde $User | Add-Member -MemberType NoteProperty -Name $_ -Value $UserIsMember ) #Retourneert het object naar de variabele Return $User ) #Converteer de objecten naar een CSV en voer ze vervolgens uit $Results |

Laten we hopen dat alles logisch is. Ik heb zoveel mogelijk commentaar gegeven. Het zou heel gemakkelijk zijn om naar ADSI te converteren als RSAT niet is geïnstalleerd op de computer waarop u dit gebruikt. Als je het nodig hebt, laat het me weten, dan breng ik snel wat wijzigingen aan.

Goedemiddag lieve lezers en abonnees blijven we de mogelijkheden van Powershell en Active Directory verkennen. Zoals je je herinnert, bevinden al haar gebruikers- en computeraccounts zich in de NTDS.dit-database, alles is geweldig en gecentraliseerd. Wanneer een bedrijf meer dan één systeembeheerder heeft, kan er een situatie ontstaan ​​waarin rommel en onnodige inloggegevens zich ophopen. We zijn allemaal mensen en we kunnen sommige dingen vergeten, en op sommige momenten kunnen we afgeleid zijn, wat ook tot vergeten zal leiden belangrijke informatie. En we komen tot de conclusie dat de Actvie Directory zich niet ophoopt actieve gebruikers(ontslagen of vergeten), in ieder geval moet een goede systeembeheerder ze identificeren, uitschakelen en vervolgens indien gewenst verwijderen, en dat is wat we zullen doen.

Via ADUC-module

De vorige keer gaf ik je al een gebruiksvoorbeeld Actieve snap-in Directory-gebruikers en computers, waarmee we zochten naar ontbrekende computers op het lokale netwerk die al een maand niet waren verschenen. Nu zullen we 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 geopende aanvraagformulier het volgende in:

  • Naam opvragen > voor mij zijn dit verloren gebruikers
  • Beschrijving indien nodig
  • Root aanvragen > hier kunt u het gehele domein laten staan, of opgeven op de gewenste OU

Klik dan op de aanvraagknop.

Op het tabblad gebruikers zien we het item “Aantal dagen sinds laatste login”; ik heb dit bijvoorbeeld ingesteld op 60 dagen.

Als gevolg hiervan ontvangt u de lijst die u nodig heeft met inactieve werknemersaccounts.

Via powershell-snap-in

Hetzelfde kan worden gedaan via Powershell. Ik geef je meteen de code waarvan de taak is er wordt gezocht inactieve gebruikers, hiervoor heb ik een periode van 45 dagen gekozen, gebruikersgegevens uitgeschakeld en verhuisd naar een speciaal aangewezen OU.

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

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

  • Een rapport maken in een bestand

Nog meer nuttige dingen over het werken met de gebruiker. Voordat u onderstaande opdrachten gebruikt, moet u de Active Directory-module via de opdracht laden

Get-Help Get-ADUser

Het is geen geheim dat Microsoft sinds de eerste versie van PowerShell probeert om er het belangrijkste Windows-beheerprogramma van te maken. En in veel opzichten werkt het! Vandaag verder eenvoudige voorbeelden, laten we u PowerShell-functies zien die u kunt gebruiken om te krijgen diverse informatie over Active Directory-gebruikers en hun kenmerken.

Opmerking. Voorheen moest u, om informatie te verkrijgen over de kenmerken van AD-gebruikersaccounts, verschillende hulpmiddelen gebruiken: de ADUC-console (inclusief), een hulpprogramma, enz. De keuze voor het hulpmiddel was meestal gebaseerd op de taak die moest worden uitgevoerd en de programmeervaardigheden van de beheerder.

PowerShell 2.0 introduceerde een speciale module voor het werken met Active Directory - (geïntroduceerd in Windows Server 2008 R2), waarvan de cmdlets u in staat stellen verschillende manipulaties uit te voeren met AD-directoryobjecten. De cmdlet wordt gebruikt om informatie te verkrijgen over Active Directory-domeingebruikers en hun eigenschappen Get-ADUser. U kunt de cmdlet Get-ADUser gebruiken om de waarde van elk kenmerk van een bestaand gebruikersaccount in AD op te halen. Bovendien kunt u opgeven verschillende criteria voorbeelden en genereer lijsten van domeingebruikers en hun attributen.

In dit voorbeeld laten we zien hoe u de PowerShell Get-ADUser-cmdlet kunt gebruiken om informatie op te halen over wanneer laatste keer het wachtwoord van de gebruiker is gewijzigd en wanneer het verloopt.

Start het Powershll-venster met beheerdersrechten en importeer de Active Directory-module met de opdracht:

Importmodule activedirectory

Advies. In Windows Server 2012 en hoger kunt u dit item overslaan, omdat de PowerShell Active Directory-module standaard is ingeschakeld.

In clientbesturingssystemen (bijvoorbeeld Windows 10) moet u, om de Get-AdUser-commandant te laten werken, de juiste versie van RSAT installeren en de component in het configuratiescherm inschakelen Active Directory-module voor Windows PowerShell(Hulpprogramma's voor extern serverbeheer -> Hulpprogramma's voor rolbeheer -> AD DS en AD LDS-hulpprogramma's -> AD DS-hulpprogramma's).

Een volledige lijst met alle Get-ADUser-cmdlet-argumenten kan als volgt worden verkregen:

Help Get-ADUser

Om een ​​lijst met alle domeinaccounts weer te geven, voert u de opdracht uit:

Get-ADUser-filter *

Het formaat van de geretourneerde lijst is niet erg handig in gebruik, slechts enkele fundamentele 10 van de meer dan 120 attributen en eigenschappen van gebruikersaccounts worden weergegeven (DN, SamAccountName, Naam, UPN, enz.). Daarnaast zien we dat er geen informatie over het tijdstip waarop het wachtwoord voor het laatst is gewijzigd.

Om volledige informatie over alle beschikbare attributen van de gebruiker-tuser weer te geven, voert u de opdracht uit:

Get-ADUser -identiteit tuuser -eigenschappen *

We zien dus een volledige lijst met AD-gebruikerskenmerken en hun waarden die aan het gebruikersaccount zijn gekoppeld. Vervolgens gaan we verder met het formatteren van de uitvoer van de Get-ADUser-cmdlet, zodat de velden die we nodig hebben worden weergegeven. Wij zijn geïnteresseerd in de kenmerken:

  • Wachtwoord verlopen
  • WachtwoordLaatsteSet
  • WachtwoordNeverExpires

Laten we de opdracht uitvoeren:

Get-ADUser tuuser -eigenschappen WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires

Nu bevatten de gebruikersgegevens informatie over de datum van wachtwoordwijziging en het tijdstip waarop deze verloopt. Laten we de informatie in een handiger tabelvorm presenteren:

Get-ADUser -filter * -eigenschappen WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires | ft Naam, WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires

Gebruik de parameter om gebruikersgegevens van een specifieke OE weer te geven Zoekbasis:

Get-ADUser -SearchBase ‘OU=Moskou,DC=winitpro,DC=loc’ -filter * -eigenschappen WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires | ft Naam, WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires

Het resultaat van de opdracht kan worden geëxporteerd naar een tekstbestand:

Get-ADUser -filter * -eigenschappen WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires | ft Naam, WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires > C:\temp\users.txt

Of in CSV, dat in de toekomst gemakkelijk naar Excel zal worden geëxporteerd (aanvullend met behulp van sorteerobject Laten we de tabel sorteren op de kolom PasswordLastSet en ook een voorwaarde toevoegen waar– de gebruikersnaam moet de string “Dmitry” bevatten:

Get-ADUser -filter * -eigenschappen WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires | waar ($_.name –zoals “*Dmitry*”) | sorteerobject WachtwoordLastSet | select-object Naam, WachtwoordExpired, WachtwoordLastSet, WachtwoordNeverExpires | Export-csv -pad c:\temp\user-password-expires-2015.csv

U kunt dus een tabel samenstellen met alle benodigde Active Directory-gebruikerskenmerken.

Om een ​​lijst met AD-gebruikersaccounts te verkrijgen op basis van een specifiek kenmerk, gebruikt u de parameter –Filter. Als argumenten voor deze parameter kunt u de waarde van bepaalde Active Directory-gebruikerskenmerken opgeven, waardoor de cmdlet Get-ADUser wordt toegepast op gebruikers die aan de filtercriteria voldoen.

Uitvoer van AD-gebruikers waarvan de naam begint met Roman:

Get-ADUser -filter (naam -zoals "Roman*")

Get-ADUser -Filter (SamAccountName -achtige "*") | Meetobject

Lijst met alle actieve (niet geblokkeerde) accounts in AD:

Get-ADUser -Filter (ingeschakeld -eq "True") | Selecteer-Object SamAccountName,Naam,Achternaam,Voornaam | Formaattabel

Lijst met accounts met verlopen wachtwoord:

Get-ADUser -filter (ingeschakeld -eq $True) -eigenschappen wachtwoordverlopen | waar($_.Wachtwoordverlopen)

Lijst met actieve accounts met e-mailadressen:

Get-ADUser -Filter ((mail -ne "null") -en (Ingeschakeld -eq "true")) -Eigenschappen Achternaam,Voornaam,mail | Selecteer-Objectnaam, Achternaam, Voornaam, E-mail | Formaattabel

Taak: Voor een lijst met accounts die zijn opgeslagen in tekstbestand(één account per regel) moet u het telefoonnummer van de gebruiker in AD ophalen en de informatie uploaden naar een tekst-csv-bestand (kan eenvoudig worden geïmporteerd in Esxel).

Import-Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -Eigenschappennaam, telefoonnummer | Selecteer naam, telefoonnummer | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8 )

Met het volgende voorbeeld kunt u een zakelijk adresboek in het formulier downloaden csv-bestand, dat later kan worden geïmporteerd in Outlook of Mozilla Thunderbird:

Get-ADUser -Filter ((mail -ne "null") -en (Ingeschakeld -eq "true")) -Eigenschappen Achternaam,Voornaam,mail | Selecteer-Objectnaam, Achternaam, Voornaam, E-mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\mail_list.csv

Gebruikers die hun wachtwoord de afgelopen 90 dagen niet hebben gewijzigd:

$90_Days = (Get-Date).adddays(-90) Get-ADUser -filter ((wachtwoordlastset -le $90_days))

$user = Get-ADUser winadmin -Eigenschappen thumbnailPhoto $user.thumbnailPhoto | Set-Content winadmin.jpg -Coderbyte

Lijst met groepen waartoe hij behoort rekening gebruiker

Get-AdUser winadmin -Eigenschappenlidvan | Selecteer lidvan -eigenschaplidvan uitvouwen