Verwijderen van geblokkeerde gebruikers uit ad powershell. Vind inactieve gebruikers in Active Directory

In de reacties op het vorige artikel herinnerden ze zich over boekhouden 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 beschikt over iets als Microsoft SCOM. Of gewoon opwarmen en afleiden van scripts.


Natuurlijk kunt u de gegevens zoals in de onderstaande voorbeelden in slechts één regel in PowerShell krijgen. Maar ten eerste is PowerShell te saai en ten tweede kan Excel gegevens dynamisch bijwerken - de resulterende documenten kunnen op het netwerk worden gepubliceerd en vergeten ze bij te werken.

Om met gegevens te werken, zal ik de Power Query-engine gebruiken. Voor office 2010 en 2013 zal je een plug-in moeten installeren, in Microsoft Office 2016 is deze module al ingebouwd. Helaas is de standaard editie voor ons niet genoeg, we hebben Professional nodig.


Het mechanisme zelf is ontworpen om gegevens van verschillende bronnen te ontvangen en te verwerken - 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 analyseren van het gebruik van Power Query om gegevens uit Active Directory op te halen.

Opwarming: zie wanneer onze gebruikers zijn ingelogd

De query naar de domeindatabase zelf wordt gemaakt op het tabblad "Gegevens - Nieuwe query - Van andere bronnen - Van Active Directory".



We geven de gegevensbron aan.


U moet een domeinnaam selecteren, de benodigde gegevens opgeven voor de verbinding. Selecteer vervolgens het type objecten, in dit voorbeeld - gebruiker... Aan de rechterkant van het voorbeeldvenster wordt de query al uitgevoerd en wordt een voorbeeld van de gegevens weergegeven.



De aanvraag voorbereiden, de preview bewonderen.


De query moet van tevoren worden voorbereid door op de knop "wijzigen" te klikken en de vereiste kolommen te selecteren. In feite zijn deze kolommen klassen. Elk van hen bevat een set specifieke kenmerken van het Active Directory-object, naast de hoofdkolom Weergavenaam wat zelf een attribuut is. Ik zal me concentreren op de lessen gebruiker, persoon, bovenkant en veiligheidPrincipal... Nu moet je de vereiste attributen van elke klasse selecteren met behulp van de "extensie" - het pictogram met twee pijlen bij de kolomkop:

  • Klas gebruiker uitbreiden door te kiezen laatsteLogonTijdstempel en gebruikersaccount controle;
  • v persoon Kiezen telefoon nummer;
  • v bovenkantwanneer gemaakt;
  • en in veiligheidPrincipalSamAccountNaam.


Het verzoek uitbreiden.


Laten we nu het filter configureren: om geen geblokkeerde accounts te krijgen, moet u het userAccountControl-attribuut een waarde van 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 bepaalt Excel ten onrechte de indeling van de gegevens, met name de waarde van het kenmerk lastLogonTimestamp. Als er plotseling zo'n ongeluk overkomt, kunt u op het tabblad "Converteren" het juiste formaat instellen.

Nu moet de kolom userAccountControl worden verwijderd - deze is helemaal niet nodig op het scherm. En klik op "Laden en sluiten".


Het resultaat is een bord, waar je nog wel eens aan moet denken. Hernoem de kolommen bijvoorbeeld naar iets leesbaars. En stel automatische gegevensupdates in.


Automatische update bij het openen van een tafel of door time-out is geconfigureerd op het tabblad "Gegevens" in de "Eigenschappen".



Gegevensvernieuwing configureren.


Nadat het configureren van de update is voltooid, kunt u de tafel veilig aan de personeelsafdeling of de beveiligingsdienst geven - laat hen weten wie wanneer heeft ingelogd.


Verzoek code in de "M" taal onder de spoiler.

let Source = ActiveDirectory.Domains ("domain.ru"), domain.ru = Source () [# "Object Categories"], user1 = domain.ru (), # "Remote Columns" = Table.RemoveColumns (user1, ( "organizationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchBaseClass", "msExchCustomAttributes") # "Deleted Columns", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), # "Top Expanded" = Table.ExpandRecordColumn (# "SecurityPrincipal Expanded "," top ", (" whenCreated "), ( " whenCreated ")), #" Expanded person "= Table.ExpandRecordColumn (#" Expanded top "," person ", (" phoneNumber "), (" phoneNumber ")), #" Expand user "= Table.ExpandRecordColumn (# " Uitgebreide persoon "," gebruiker ", (" lastLogonTimestamp "," userAccountControl " ), ("lastLogonTimestamp", "userAccountControl")), # "Filtered Rows" = Table.SelectRows (# "Expanded user", elk (= 512 of = 66048)), # "Modified Type" = Table. TransformColumnTypes (# "Gefilterde rijen", ("lastLogonTimestamp", typ datetime))), # "Deleted Columns1" = Table.RemoveColumns (# "Type gewijzigd", ("userAccountControl")) in # "Deleted Columns1"

Maak een adresboek, of wat te doen als de bedrijfsportal niet vriendelijk is voor AD

Een andere mogelijkheid om Excel te gebruiken in combinatie met Active Directory is het maken van een adresboek op basis van AD-gegevens. Het is duidelijk dat het adresboek alleen up-to-date is als er orde is in het domein.


Laten we een aanvraag voor een object maken gebruiker, breid de klas uit gebruiker v mail en de klas persoon v telefoon nummer... Verwijder alle kolommen behalve uitgesproken naam- de structuur van het domein herhaalt de structuur van de onderneming, dus de namen Organisatie-eenheden corresponderen met de namen van afdelingen. Op dezelfde manier kunnen beveiligingsgroepen worden gebruikt als basis voor namen van organisatie-eenheden.


Nu van de lijn CN = Gebruikersnaam, OU = Boekhoudafdeling, OU = Afdeling, DC = domein, DC = ru u moet de naam van de afdeling direct extraheren. De eenvoudigste manier om dit te doen, is door scheidingstekens op het tabblad Transformeren te gebruiken.



We halen de tekst eruit.


Als scheidingstekens gebruik ik OE = en , OE =... In principe is een komma voldoende, maar ik ben herverzekerd.



Voer scheidingstekens in.


Nu u het filter gebruikt, kunt u onnodig afsnijden OU zoals geblokkeerde gebruikers en Ingebouwd, sortering instellen en gegevens in de tabel laden.



Overzichtstabelweergave.

Snel rapporteren over de samenstelling van werkplekken, zonder tussenkomst van agenten en andere voorbereiding

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 maken, maar deze keer zullen we in de navigator selecteren computer.



We doen een aanvraag voor de computer.


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 Kiezen wanneer gemaakt.


Uitgebreide vraag.


Indien gewenst kunt u alleen over serverbesturingssystemen rapporteren. Filter bijvoorbeeld op operatingSystem of operatingSystemVersion. Ik zal dit niet doen, maar ik zal de weergave van de aanmaaktijd corrigeren - ik ben alleen geïnteresseerd in het jaar. Om dit te doen, selecteert u op het tabblad "Conversie" de gewenste kolom en selecteert u "Jaar" in het menu "Datum".



We extraheren het jaar vanaf het moment dat de computer het domein binnenkwam.


Nu hoeft u alleen nog de kolom met weergavenaam als onnodig te verwijderen en het resultaat te laden. De gegevens zijn klaar. Nu kunt u ermee werken zoals met een gewone tafel. Laten we eerst een draaitabel maken op het tabblad "Invoegen" - "Pivot Table". Laten we akkoord gaan met de keuze van de gegevensbron en de velden configureren.



Veldinstellingen voor draaitabel.


Nu blijft het om het ontwerp aan te passen en het resultaat te bewonderen:



Overzichtstabel voor computers in AD.


Indien gewenst kunt u een draaigrafiek toevoegen, ook op het tabblad "Invoegen". Voeg in de "Categorieën" (of "Rijen", naar smaak) toe besturingssysteem, in de gegevens - cn... Op het tabblad "Ontwerp" kunt u het type diagram naar wens kiezen, ik gaf de voorkeur aan het ronde diagram.



Cirkeldiagram.


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


Vraag code aan onder de spoiler.

let Source = ActiveDirectory.Domains ("domain.ru"), domain.ru = Source () [# "Object Categories"], computer1 = domain.ru (), # "Remote Columns" = Table.RemoveColumns (computer1, ( "gebruiker", "organizationalPerson", "persoon")), # "Andere verwijderde kolommen" = Table.SelectColumns (# "Verwijderde kolommen", ("displayName", "computer", "top")), # "Uitgevouwen item computer "= Table.ExpandRecordColumn (#" Other remote columns "," computer ", (" cn "," operatingSystem "," operatingSystemServicePack "," operatingSystemVersion "), ("cn "," operatingSystem "," operatingSystemServicePack "," operatingSystemVersion ")), #" Expanded top "= Table.ExpandRecordColumn (#" Expanded computer "," top ", (" whenCreated "), (" whenCreated ")), #" Opgehaald jaar "= Table.TransformColumns ( # " Uitgevouwen top", ("whenCreated", Date.Year))), # "Deleted Columns1" = Table.RemoveColumns (# "Retrieved Year", ("displayName")) in # "Deleted Columns1"

Tags toevoegen

0

Ik heb het volgende werkende script dat controleert of een grote lijst met gebruikers in een CSV-bestand lid is van een AD-groep en de resultaten naar results.csv schrijft.

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 retourneert overeenkomsten voor 80 AD-groepen in List_of_AD_groups.csv. JA / NEE schrijven voor elke AD-groep in een nieuwe CSV-kolom (of, als dit niet mogelijk is, een apart CSV-bestand maken voor elke groep met resultaten ook.

Ik kon het handmatig doen door de waarde van $ group en de naam van het exportbestand te wijzigen en het script 80 keer opnieuw uit te voeren, maar moest snel zijn met PS om dit te doen

bijv. resultaten.csv?:

NAAM AD_GROUP1 AD_GROUP2 AD_GROUP80 enz 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 ($ gebruiker in $ gebruikers) (als ($ leden -bevat $ gebruiker) (echo "$ gebruiker $ group`tYes" >> results.csv) else (echo "$ user`tNo" >> resultaten .csv))

  • 2 antwoorden
  • Sorteren:

    Activiteit

0

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

$ groepen = Get-Content "C: \ groups.txt" foreach ($ groep in $ groepen) ($ leden = Get-ADGroupMember ... ...)

Een schonere benadering zou zijn om een ​​sjabloon voor groepstoewijzing 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 ($ sjabloon [$ _] = $ false) $ groups = @ () Get-ADGroup -Filter * | ForEach-Object ($ groepen [$ _. DistinguishedName] = $ _. Name) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ($ groupmap = $ template.Clone () $ _. MemberOf | ForEach-Object ($ groups [$ _]) | Where-Object ($ groupmap.ContainsKey ($ _)) | ForEach-Object ($ groupmap [$ _] = $ true) Nieuw object -Type PSObject -Property $ 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 krijgen wat je zocht.

Ik denk dat Ansgar op de goede weg was, maar ik kon hem niet zover krijgen om te doen wat hij daarna deed. Hij gaf aan dat hij op het moment van schrijven geen toegang had tot de AD-omgeving.

Dit is wat ik bedacht:

$ 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 # Outer loop om gebruikers en lidmaatschap toe te voegen aan UserHash $ UserArray | ForEach-Object ($ UserInfo = Get-ADUser $ _ -Properties MemberOf # Stript de LPAP-syntaxis naar alleen de SAMAccountName van de groep $ Memberships = $ UserInfo.MemberOf | ForEach-Object (($ _. Split (",")) .replace ("CN =", "")) #Toevoegen van het User = Membership-paar aan de Hash $ UserHash.Add ($ _, $ Memberships)) # Outer loop om een ​​object per gebruiker te creëren $ Results = $ UserArray | ForEach-Object (# Maak eerst een eenvoudig object $ User = New-Object -TypeName PSCustomObject -Property @ (Name = $ _) # Dynamisch leden toevoegen aan het object, gebaseerd op de $ GroupArray $ GroupArray | ForEach-Object (#Checking $ UserHash om te zien of de groep wordt weergegeven 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) #Het object retourneren naar de variabele Return $ User) #Converteer de objecten naar een CSV en voer ze vervolgens uit $ Results | ConvertTo-CSV -NoTypeInformation | Out-File $ OutputFile

Laten we hopen dat het allemaal 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 het uitvoert. Als je het nodig hebt, laat het me weten en ik zal wat snelle wijzigingen aanbrengen.

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 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 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 zou een goede systeembeheerder ze moeten identificeren, uitschakelen en vervolgens naar believen verwijderen, wat we zullen doen.

Via de ADUC-module

De vorige keer gaf ik je al een voorbeeld van het gebruik van de Active Directory Users and 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.

Specificeer in het aanvraagformulier dat wordt geopend:

  • Naam aanvragen> Ik ben gebruikers kwijt
  • Beschrijving indien nodig
  • Vraag root aan> hier kun je het hele domein laten staan, of specificeren op de gewenste OU

Dan drukken we op de knop aanvraag.

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

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

Via de powershell snap-in

Hetzelfde kan worden gedaan via Powershell. Ik zal onmiddellijk een code geven wiens taak het is om naar inactieve gebruikers te zoeken, hiervoor heb ik een periode van 45 dagen gekozen, gebruikersgegevens losgekoppeld en naar een speciaal aangewezen OU verplaatst.

$ date_with_offset = (Get-Date) .AddDays (-45)
$ gebruikers = Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $ date_with_offset) | Sorteer LaatsteLogonDatum
foreach ($ gebruiker in $ gebruikers) (set-aduser $ gebruiker -enabled $ false; move-adobject -identity $ gebruiker -targetpath "ou = Ontslagen, ou = Msk L. gebruikers, ou = Locatie, dc = msk, dc = contoso, dc = com ")
Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $ date_with_offset) | Sorteer LaatsteLogonDatum | FT-naam, LastLogonDate -AutoSize | Out-File c: \ Script \ users.txt

  • In de eerste regel declareer je een variabele waarin je de zoekterm instelt
  • Maak een variabele en een steekproef op de laatste inlogtijd
  • Gebruikers verplaatsen

  • Een rapport maken naar een bestand

Meer handige dingen voor het werken met de gebruiker. Voordat u de onderstaande opdrachten gebruikt, moet u de Active Directory-module laden via de opdracht

Get-Help Get-ADUser

Het is geen geheim dat Microsoft sinds de eerste versie van PowerShell heeft geprobeerd er de belangrijkste Windows-beheertool van te maken. En in veel opzichten werkt het! Vandaag laten we u met eenvoudige voorbeelden de PowerShell-mogelijkheden zien die u kunt gebruiken om verschillende informatie over Active Directory-gebruikers en hun kenmerken te krijgen.

Opmerking... Voorheen moest u, om informatie te verkrijgen over de kenmerken van AD-gebruikersaccounts, verschillende tools gebruiken: de ADUC-console (inclusief), een hulpprogramma, enz. De keuze van de tool was meestal gebaseerd op de taak die voorhanden was en het programmeervermogen van de beheerder.

PowerShell 2.0 introduceert 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 objecten in de AD-directory. Gebruik de cmdlet . om informatie te verkrijgen over Active Directory-domeingebruikers en hun eigenschappen Get-ADUser... U kunt de Get-ADUSer-cmdlet gebruiken om de waarde van elk kenmerk van een bestaand gebruikersaccount in AD op te halen. Daarnaast kunt u verschillende selectiecriteria specificeren en lijsten met domeingebruikers en hun attributen genereren.

In dit voorbeeld laten we u zien hoe u de Get-ADUser PowerShell-cmdlet gebruikt om informatie te krijgen over wanneer het wachtwoord van een gebruiker voor het laatst is gewijzigd en wanneer het zal verlopen.

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

Import-Module activedirectory

Advies... In Windows Server 2012 en hoger kan dit item worden overgeslagen, aangezien de Active Directory PowerShell-module standaard is ingeschakeld.

In clientbesturingssystemen (in dezelfde Windows 10) om de Get-AdUser-commandant te laten werken, moet u de juiste versie van RSAT installeren en het onderdeel inschakelen in het configuratiescherm Active Directory-module voor Windows PowerShell(Externe serverbeheerprogramma's -> Rolbeheerprogramma's -> AD DS en AD LDS-hulpprogramma's -> AD DS-hulpprogramma's).

U kunt als volgt een volledige lijst van alle argumenten voor de Get-ADUser-cmdlet krijgen:

Help Get-ADUSer

Voer de opdracht uit om alle domeinaccounts weer te geven:

Get-ADUser -filter *

Het formaat van de geretourneerde lijst is niet erg handig in gebruik, slechts enkele basis 10 van meer dan 120 attributen en eigenschappen van gebruikersaccounts (DN, SamAccountName, Name, UPN, etc.) worden weergegeven; daarnaast zien we dat er geen informatie over het tijdstip van de laatste wachtwoordwijziging ...

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

Get-ADUSer -identity tuser -properties *

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 gewenste velden worden weergegeven. We zijn geïnteresseerd in de kenmerken:

  • Wachtwoord verlopen
  • WachtwoordLaatsteSet
  • Wachtwoord verloopt nooit

Laten we het commando uitvoeren:

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires

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

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Om gebruikersgegevens van een specifieke OU weer te geven, gebruiken we de parameter Zoekbasis:

Get-ADUser -SearchBase 'OU = Moskou, DC = winitpro, DC = loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

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: \ temp \ users.txt

Of in CSV, wat in de toekomst handig zal zijn om naar Excel te exporteren (ook met sorteer-object sorteer de tabel op de PasswordLastSet-kolom en voeg ook een voorwaarde toe waar- gebruikersnaam moet de regel "Dmitry" bevatten:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | waar ($ _. naam –like "* Dmitry *") | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -pad c: \ temp \ gebruikerswachtwoord-verloopt-2015.csv

U kunt dus een tabel maken met alle vereiste Active Directory-gebruikerskenmerken.

De parameter –Filter wordt gebruikt om een ​​lijst met AD-gebruikersaccounts op te halen op basis van een specifiek criterium. Als argumenten voor deze parameter kunt u de waarde van bepaalde kenmerken van Active Directory-gebruikers opgeven, waardoor de Get-ADUSer-cmdlet wordt toegepast op gebruikers die voldoen aan de filtercriteria.

AD-gebruikers weergeven wiens naam begint met Romeins:

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

Get-ADUser -Filter (SamAccountName -achtige "*") | Maatregel-Object

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

Get-ADUser -Filter (Ingeschakeld -eq "True") | Select-Object SamAccountNaam, Naam, Achternaam, Voornaam | Formaattabel

Lijst met accounts met verlopen wachtwoord:

Get-ADUser -filter (Ingeschakeld -eq $ True) -properties passwordExpired | waar ($ _. Wachtwoord verlopen)

Lijst van actieve accounts met postadressen:

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

Taak: voor een lijst met accounts die zijn opgeslagen in een tekstbestand (één account per regel), moet u het telefoonnummer van de gebruiker in AD ophalen en de informatie uploaden naar een tekst-csv-bestand (u kunt het gemakkelijk importeren in Esxel).

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

In het volgende voorbeeld kunt u een zakelijk adresboek uploaden als een csv-bestand, dat u later kunt importeren in Outlook of Mozilla Thunderbird:

Get-ADUser -Filter ((mail -ne "null") -en (Ingeschakeld -eq "true")) -Eigenschappen Achternaam, Voornaam, mail | Selecteer-Objectnaam, Achternaam, Voornaam, 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 ((passwordlastset -le $ 90_days))

$ gebruiker = Get-ADUser winadmin - Eigenschappen thumbnailPhoto $ user.thumbnailPhoto | Set-Content winadmin.jpg -Encoding byte

Lijst met groepen waarin het gebruikersaccount zich bevindt

Get-AdUser winadmin -Properties memberof | Selecteer lid van -expandproperty lid van

Scripts om alle gebruikers uit MS Active Directory (ITGC) te verwijderen

Ivan Piskunov

Een van de standaard controleprocedures ITGC voor catalogus Active Directory is om de download van alle gebruikers van het domein te krijgen. Op basis van de ontvangen gegevens worden vervolgens 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 zo'n ontlading te vormen, zou zijn om de standaardinterface te gebruiken PowerShell , voorbeelden waarvan we in dit artikel zullen ingaan

1. Snel uploaden met 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-indeling, die zonder problemen door dezelfde Excel kan worden geopend.

$ objSearcher = New-Object System.DirectoryServices.DirectorySearcher $ objSearcher.SearchRoot = "LDAP: // ou = Gebruikers, ou = Afdelingen, dc = test, dc = ru" $ objSearcher.Filter = "(& (objectCategory = persoon) (! userAccountControl: 1.2.840.113556.1.4.803: = 2)) "$ gebruikers = $ objSearcher.FindAll () # Aantal accounts $ gebruikers.Count $ gebruikers | ForEach-Object ($ gebruiker = $ _. Eigenschappen New-Object PsObject -Property @ (Titel = $ user.description Afdeling = $ user.department Login = $ user.userprincipalname Phone = $ user.telephonenumber Room = $ user.physicaldeliveryofficename Full naam = $ gebruiker.cn)) | Export-Csv -NoClobber -Encoding utf8 -Pad C: list_domen_users.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 parameters Gebruikers in de eenheid afdelingen in het domein Test.ru. En specificeer ook het pad naar de locatie waar het bestand is opgeslagen list_domen_users.csv

Als u na het lossen direct opent list_domen_users.csv , zal er in een onleesbare vorm uitzien, maar met standaardmiddelen kunnen we het gemakkelijk in het formaat brengen dat we nodig hebben. Openen in Excel list_domen_users.csv , selecteer de eerste kolom, ga dan naar het tabblad "Gegevens" en klik op "Tekst op kolommen". Selecteer "gescheiden" en klik op "Volgende". Klaar!

Opgemerkt moet worden! 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 de hieronder beschreven methoden gebruiken.

2. Geavanceerde PowerShell-cmdlet voor het krijgen van offloaded Active Directory-gebruikers

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

Beginnen start een Powershell-venster met beheerdersrechten en importeer de Active Directory-module voor verdere acties:
Import-Module activedirectory

Naar lijst alle domeinaccounts a, laten we het commando uitvoeren:

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: de datum waarop het wachtwoord is gewijzigd en de tijd waarop 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 meteen uploaden naar CSV , wat in de toekomst handig zal zijn om naar Excel te exporteren (bovendien zullen we, met behulp van het sort-object, de tabel sorteren op de PasswordLastSet-kolom, en ook de waar-voorwaarde toevoegen - de gebruikersnaam moet de tekenreeks "Dmitry" bevatten)

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