Een lijst met gebruikers uit Active Directory verwijderen. Get-ADUSer gebruiken om verschillende informatie over AD-domeingebruikers te krijgen

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-formaat, dat zonder problemen met 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

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-kenmerk 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 en wanneer ze zijn ingelogd op het systeem.


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 naar wens 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"

Labels toevoegen Wordt gebruikt om catalogusobjecten aan te maken, te wijzigen en te verwijderen. De gebruiker kan ook het commando ldifde om het schema uit te breiden, Active Directory-gebruikers- en groepsinformatie naar andere applicaties of services te exporteren en Active Directory Application Mode (ADAM) te vullen met gegevens van andere directoryservices.

Syntaxis

ldifde [-I] [-F Bestandsnaam] [-s server naam] [-C lijn1 lijn2] [-v] [-J pad] [-t poortnummer] [-D DN_base] [-R LDAP_filter] [-P regio] [-l LDAP_attribute_list] [-O LDAP_attribute_list] [-G] [-m] [-N] [-k] [-een ] [-B ] [-? ]

Parameters:

-I Bepaalt de importmodus. Als de parameter niet is opgegeven, wordt standaard de exportmodus gebruikt. -FBestandsnaam Specificeert de naam van het import- of exportbestand. -sserver naam Specificeert de computer waarop de import- of exportbewerking moet worden uitgevoerd. Standaard is het programma ldifde zal draaien op de computer waarop: ldifde geïnstalleerd. -Clijn1 lijn2 Vervangt alle instanties snaren1 inhoud snaren2... Meestal gebruikt bij het importeren van gegevens van het ene domein naar het andere, en tegelijkertijd is het nodig om de DN-naam van het exporterende domein te vervangen ( string1), de naam van het importerende domein ( string2). -v Schakelt uitgebreide logmodus in. -Jpad Specificeert de locatie van het logbestand. De standaardwaarde is het huidige pad. -tpoortnummer Specificeert het LDAP-poortnummer (Lightweight Directory Access Protocol). De standaard LDAP-poort is 389. De globale cataloguspoort is 3268. -DDN_base Specificeert de DN-naam van de zoekbasis voor het exporteren van gegevens. -RLDAP-filter Creëert een LDAP-zoekfilter voor het exporteren van gegevens. Als u bijvoorbeeld het volgende filter gebruikt, worden alle gebruikers met een specifieke tweede naam geëxporteerd: csvde -r (en (objectClass =Gebruiker) (sn =Achternaam)) -Pregio Specificeert het bereik van de zoekopdracht. Zoekbereikparameters zijn: Baseren, Een niveau en Subboom. -lLDAP_attribute_list Specificeert de lijst met attributen die moeten worden geretourneerd in de resultaten van een exportverzoek. Als deze parameter wordt weggelaten, worden alle kenmerken geretourneerd. -OLDAP_attribute_list Specificeert een lijst met kenmerken die moeten worden weggelaten uit de resultaten van een exportquery. Meestal wordt deze parameter gebruikt bij het exporteren van objecten uit Active Directory en deze vervolgens importeren in een andere LDAP-compatibele directory. Als attributen niet worden ondersteund door een andere directory, kunnen ze worden uitgesloten van de resultatenset met behulp van deze parameter. -G Exclusief gepagineerde zoekopdrachten. -m Het weglaten van attributen die niet kunnen worden geschreven, zoals ObjectGUID en objectSID. -N Laat de export van binaire waarden weg. -k Negeert fouten tijdens de importbewerking en zet de verwerking voort. Het volgende is een volledige lijst van genegeerde fouten:

  • het object is al lid van de groep;
  • overtreding van een objectklasse (wat betekent dat de opgegeven objectklasse niet bestaat) als het geïmporteerde object geen andere kenmerken heeft;
  • het object bestaat al;
  • overtreding van de beperking;
  • het attribuut of de waarde bestaat al;
  • zo'n object bestaat niet.
-eengebruikersnaam voornaam wachtwoord Specificeert de uitvoering van een opdracht met behulp van de opgegeven gebruiker DN_naam en wachtwoord -B. -Bgebruikersnaam domein wachtwoord Specificeert een opdracht die moet worden uitgevoerd met behulp van de opgegeven gebruikersnaam, domein en wachtwoord... Standaard wordt de opdracht uitgevoerd met de referenties van de gebruiker die momenteel is aangemeld bij het netwerk. Kan niet worden gebruikt met parameter -een. -? Geeft het commandomenu weer.

Opmerkingen

  • Met parameter -C je kunt constanten gebruiken #schemaNamingContext en #configurationNamingContext in plaats van de DN-namen van de schemadirectory-sectie en de configuratiedirectory-sectie.
  • Bij het maken van een importbestand voor een opdracht ldifde, gebruik de waarde van type veranderen om het type wijzigingen in het importbestand te bepalen. De waarden van type veranderen worden weergegeven in de onderstaande tabel.

Het volgende is een voorbeeld van een LDAP-importbestand in LDIF-formaat dat gebruikmaakt van de waarde toevoegen:
DN: CN =geselecteerde_gebruiker, gelijkstroom =domeinnaam
van type veranderen: toevoegen
CN: geselecteerde_gebruiker
Beschrijving:bestandsomschrijving
objectKlasse: gebruiker
objectKlasse: geselecteerde_gebruiker

Voorbeelden van

Als u alleen de DN-naam, algemene naam, voornaam, achternaam en telefoonnummer van de geretourneerde objecten wilt ophalen, voert u het volgende in:
-l uitgesproken naam, CN, naam, SN, telefoon
Voer het volgende in om een ​​GUID (Globally Unique Identifier) ​​voor een object uit te sluiten:
-O wanneer_gemaakt, wanneer_gewijzigd, Object_guid

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.