Gegevens uploaden uit AD-containers. Excel in plaats van PowerShell: queries naar AD en systeemmeldingen “op de knie”

0

Ik heb het volgende werkscript 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 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:

$groups = Get-Content "C:\groups.txt" foreach ($group in $groups) ( $members = Get-ADGroupMember ... ... )

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:

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 object $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 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 teruggeven aan 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.

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 zullen we aan de hand van eenvoudige voorbeelden PowerShell-mogelijkheden laten zien die kunnen worden gebruikt om verschillende informatie over Active Directory-gebruikers en hun kenmerken te verkrijgen.

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. Daarnaast kunt u diverse selectiecriteria opgeven en lijsten met domeingebruikers en hun attributen genereren.

In dit voorbeeld laten we u zien hoe u de PowerShell Get-ADUser-cmdlet gebruikt om informatie op te halen over wanneer het wachtwoord van een gebruiker voor het laatst is gewijzigd en wanneer dit 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 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 (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 bedrijfsadresboek downloaden als csv-bestand, dat later in Outlook of Mozilla Thunderbird kan worden geïmporteerd:

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 het gebruikersaccount behoort

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

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 een standaardinterface te gebruiken PowerShell , waarvan we voorbeelden in dit artikel zullen bekijken

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

Hieronder vindt u een PowerShell-script als een van de eenvoudigste en snelste manieren om een ​​lijst van alle AD-domeingebruikers in CSV-indeling te krijgen, die eenvoudig 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 dit voorbeeld zijn dit 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 dat dit script niet meer dan 1000 gebruikers zal weergeven. Het is redelijk geschikt voor een klein bedrijf, 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 ophalen van Active Directory-gebruikersuploads

Met de 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-directoryobjecten. 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 importeer de Active Directory-module 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

Wordt gebruikt voor het maken, wijzigen en verwijderen van directoryobjecten. De gebruiker kan de opdracht ook gebruiken ldifde om het schema uit te breiden, Active Directory-gebruikers- en groepsgegevens naar andere toepassingen of services te exporteren en de Active Directory Application Mode (ADAM) -service te vullen met gegevens uit andere directoryservices.

Syntaxis

ldifde [-i] [-F bestandsnaam] [-S servernaam] [-C lijn1 lijn2] [-v] [-J pad] [-T poortnummer] [-D DN_basis] [-R filter_LDAP] [-P regio] [-l LDAP_kenmerklijst] [-O LDAP_kenmerklijst] [-G] [-M] [-N] [-k] [-A ] [-B ] [-? ]

Opties

-i Specificeert de importmodus. Als de parameter niet is gedefinieerd, wordt standaard de exportmodus gebruikt. -Fbestandsnaam Specificeert de naam van het import- of exportbestand. -Sservernaam Specificeert de computer waarop de import- of exportbewerking moet worden uitgevoerd. Standaardprogramma ldifde wordt uitgevoerd op de computer waarop ldifde geïnstalleerd. -Clijn1 lijn2 Vervangt alle exemplaren lijnen1 inhoud lijnen2. Meestal gebruikt wanneer u gegevens van het ene domein naar het andere importeert en de DN-naam moet vervangen van het domein dat de export uitvoert ( lijn1), domeinnaam importeren ( lijn2). -v Schakelt gedetailleerde 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_basis Specificeert de unieke naam van de zoekbasis voor het exporteren van gegevens. -RLDAP-filter Creëert een LDAP-zoekfilter voor gegevensexport. Het volgende filter exporteert bijvoorbeeld alle gebruikers met een specifieke middelste naam: csvde -r (en(objectClass=Gebruiker)(sn=Achternaam)) -Pregio Specificeert het zoekgebied. De zoekbereikparameters zijn Baseren, Eén niveau En Subboom. -lLDAP_kenmerklijst Specificeert de lijst met kenmerken die worden geretourneerd in de resultaten van de exportaanvraag. Als deze parameter wordt weggelaten, worden alle attributen geretourneerd. -OLDAP_kenmerklijst Specificeert een lijst met kenmerken die moeten worden weggelaten uit de resultaten van de exportaanvraag. Deze optie wordt doorgaans gebruikt bij het exporteren van objecten uit Active Directory en deze vervolgens importeren in een andere LDAP-compatibele directory. Als er kenmerken zijn die niet door een andere catalogus worden ondersteund, kunnen deze met deze optie worden uitgesloten van de resultatenset. -G Elimineert paginazoekopdrachten. -M Laat attributen weg die niet kunnen worden geschreven, zoals ObjectGUID En objectSID. -N Laat de export van binaire waarden achterwege. -k Negeert fouten tijdens de importbewerking en gaat door met de verwerking. Hieronder vindt u een volledige lijst met genegeerde fouten:

  • het object is al lid van de groep;
  • een schending van de objectklasse (wat betekent dat de opgegeven objectklasse niet bestaat) als het geïmporteerde object geen andere attributen heeft;
  • het object bestaat al;
  • overtreding van de beperking;
  • het attribuut of de waarde bestaat al;
  • zo'n object bestaat niet.
-Aonderscheiden_naam_wachtwoord Specificeert de uitvoering van een opdracht met behulp van de opgegeven onderscheidende_naam_gebruikersnaam En wachtwoord -B. -Bgebruikersnaam domeinwachtwoord Specificeert de opdracht die moet worden uitgevoerd met behulp van het opgegeven gebruikersnaam, domein en wachtwoord. Standaard wordt de opdracht uitgevoerd met de inloggegevens van de gebruiker die momenteel op het netwerk is ingelogd. Kan niet worden gebruikt met parameter -A. -? Geeft een menu met opdrachten weer.

Opmerkingen

  • Met parameter -C Je kunt constanten gebruiken #schemaNamingContext En #configurationNamingContext in plaats van de DN-namen van de schemamappartitie en de configuratiemappartitie.
  • Bij het maken van een importbestand voor een opdracht ldifde, gebruik de waarde verandertype om het type wijzigingen in het importbestand te bepalen. Waarden verandertype staan ​​in de onderstaande tabel.

Hieronder ziet u een voorbeeld van een LDAP-importbestand in LDIF-indeling waarin de waarde wordt gebruikt toevoegen:
DN: CN=geselecteerde_gebruiker,DC=domeinnaam
wijzigingstype: toevoegen
CN: geselecteerde_gebruiker
beschrijving:bestandsbeschrijving
objectKlasse: gebruiker
objectKlasse: geselecteerde_gebruiker

Voorbeelden

Om alleen de DN-naam, algemene naam, voornaam, achternaam en telefoonnummer van de geretourneerde objecten te extraheren, voert u het volgende in:
-l onderscheidende_naam, CN, Naam, S.N. telefoon
Om een ​​Globally Unique Identifier (GUID) voor een object uit te sluiten, voert u het volgende in:
-O wanneer_aangemaakt, wanneer_gewijzigd, object_GUID