Hvordan får jeg en liste over utvalgte AD-grupper som en stor liste over brukere er medlem av? Finn inaktive brukere i Active Directory

Skript for å laste ut alle brukere fra MS Active Directory (ITGC)

Ivan Piskunov

En av standard revisjonsprosedyrer ITGC for katalog Active Directory er å få nedlasting av alle brukere av domenet. Basert på dataene som mottas, blir testprosedyrer dannet, for eksempel ved å studere listen over administratorer eller identifisere brukere med et utløpt passord. Den mest effektive måten å lage en slik lossing på vil være å bruke standardgrensesnittet Kraftskall , eksempler som vi vil vurdere i denne artikkelen

1. Ekspressopplasting med PowerShell-skript

Nedenfor er et PowerShell-skript som en av de enkleste og raskeste måtene å få en liste over alle brukere av et AD-domene i CSV-format, som kan åpnes uten problemer av samme Excel.

$ objSearcher = New-Object System.DirectoryServices.DirectorySearcher $ objSearcher.SearchRoot = "LDAP: // ou = Brukere, ou = Avdelinger, dc = test, dc = ru" $ objSearcher.Filter = "(& (objectCategory = person) (! userAccountControl: 1.2.840.113556.1.4.803: = 2)) "$ brukere = $ objSearcher.FindAll () # Antall kontoer $ users.Count $ users | ForEach-Object ($ bruker = $ _. Egenskaper New-Object PsObject -Property @ (Tittel = $ user.description Avdeling = $ user.department Logg inn = $ user.userprincipalname Telefon = $ user.telephonenumber Rom = $ user.physicaldeliveryofficename Fullstendig navn = $ bruker.cn)) | Export-Csv -NoClobber -Encoding utf8 -Path C: list_domen_users.csv

For at skriptet skal fungere på systemet ditt, må du korrigere det litt, nemlig angi de nødvendige parameterne, dvs. som i dette eksemplet er dette parametere Brukere i enheten Avdelinger i domenet Test.ru. Og spesifiser også banen til stedet der filen er lagret list_domen_users.csv

Etter lossing, hvis du åpner umiddelbart list_domen_users.csv , vil se ut i en uleselig form, men med standard midler kan vi enkelt bringe den inn i formatet vi trenger. Åpning i Excel list_domen_users.csv , velg den første kolonnen, gå deretter til "Data"-fanen og klikk på "Tekst etter kolonner". Velg "avgrenset" og klikk "Neste". Klar!

! Det bør merkes at dette skriptet ikke vil vise mer enn 1000 brukere. Det er ganske egnet for et lite selskap, men de som har et stort antall brukere i domenet bør bruke metodene beskrevet nedenfor.

2. Avansert PowerShell-cmdlet for å få avlastede Active Directory-brukere

Active Directory Module for Windows PowerShell-verktøyet (introdusert i Windows Server 2008 R2 og nyere) lar deg generere cmdlets som utfører ulike manipulasjoner med AD-katalogobjekter. For å få informasjon om brukere og deres egenskaper, bruk cmdleten Get-ADUser.

Å starte start et Powershell-vindu med administratorrettigheter og importer Active Directory-modulen for ytterligere handlinger:
Import-Module activedirectory

Til liste opp alle domenekontoer a, la oss utføre kommandoen:

Get-ADUser -filter *

Til vise fullstendig informasjon om alle tilgjengelige attributter bruker bruker, kjør kommandoen

Get-ADUser -identitet bruker -egenskaper *


Vi er for eksempel interessert i informasjon om datoen passordet ble endret og tidspunktet da det utløper ... Resultatet av kommandoutførelsen kan eksporteres til en tekstfil:

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

Eller med en gang last opp til CSV , som i fremtiden vil være praktisk å eksportere til Excel (i tillegg, ved å bruke sorteringsobjektet, vil vi sortere tabellen etter PasswordLastSet-kolonnen, og også legge til where-betingelsen - brukernavnet må inneholde strengen "Dmitry")

Get-ADUser -filter * -egenskaper PasswordExpired, PasswordLastSet, PasswordNeverExpires | hvor ($ _. navn –som "* Dmitry *") | sort-objekt PassordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c: tempuser-password-expires-2015.csv

God ettermiddag, kjære lesere og abonnenter, vi fortsetter å utforske mulighetene til Powershell og Active Directory sammen med dere. Som du husker har hun alle bruker- og datamaskinkontoer i NTDS.dit-databasen, alt er flott og sentralisert. Når et selskap har mer enn én systemadministrator, kan en situasjon føre til at søppel og unødvendig legitimasjon samler seg i den. Vi er alle mennesker og vi kan glemme noen ting, og i noen øyeblikk kan vi bli distrahert, noe som også vil føre til at vi glemmer viktig informasjon. Og vi kommer til den konklusjon at inaktive brukere (avfyrte eller glemte) samler seg i Actvie-katalogen, i alle fall bør en god systemadministrator identifisere dem, deaktivere dem og deretter slette dem etter eget ønske, noe vi vil gjøre.

Gjennom ADUC snap-in

Forrige gang ga jeg deg allerede et eksempel på bruk av snapin-modulen Active Directory Users and Computers, der vi søkte etter manglende datamaskiner på det lokale nettverket som ikke hadde dukket opp på en måned. La oss nå gjøre det samme med brukerkontoer. Jeg har AD på Windows Server 2012 R2, åpne ADUC, for dette trykk WIN + R og skriv inn dsa.msc.

I forespørselsskjemaet som åpnes, spesifiser:

  • Forespørselsnavn> Jeg har mistet brukere
  • Beskrivelse om nødvendig
  • Be om root> her kan du forlate hele domenet, eller spesifisere det på ønsket OU

Deretter trykker vi på knappen forespørsel.

På brukerfanen ser vi punktet "Antall dager siden siste pålogging", for eksempel setter jeg 60 dager.

Som et resultat vil du få listen over inaktive medarbeiderkontoer du trenger.

Gjennom powershell snap-in

Alt det samme kan gjøres gjennom Powershell. Umiddelbart vil jeg gi en kode hvis oppgave er å søke etter inaktive brukere, for dette valgte jeg en periode på 45 dager, koble fra brukerdata og flytte til en spesielt utpekt OU.

$ date_with_offset = (Get-Date) .AddDays (-45)
$ users = Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $ date_with_offset) | Sorter LastLogonDate
foreach ($ bruker i $ brukere) (set-aduser $ bruker -aktivert $ false; move-adobject -identity $ user -targetpath "ou = Avfyrt, ou = Msk L. brukere, ou = Sted, dc = msk, dc = contoso, dc = com ")
Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $ date_with_offset) | Sort LastLogonDate | FT-navn, LastLogonDate -AutoSize | Utfil c: \ Script \ users.txt

  • På den første linjen erklærer du en variabel der du setter søkeordet
  • Opprett en variabel og eksempel innen siste påloggingstidspunkt
  • Flytte brukere

  • Lage en rapport til en fil

Mer nyttige ting for å jobbe med brukeren. Før du bruker kommandoene nedenfor, må du laste Active Directory-modulen via kommandoen

Få-hjelp Get-ADUser

I dag vil vi prøve å laste ut listen over alle brukere til en egen fil fra Active Directory. PowerShell vil være vår hovedassistent i denne saken. Dette er fordi Microsoft opprinnelig planla PowerShell Shell som det primære verktøyet for å administrere Windows-serverkomponenter. Og i dag, når vi i det store og hele allerede har versjon 2.0, er det slik.

Selv i den siste tiden, for på en eller annen måte å samhandle med AD, måtte administratorer ha enten dsquery-verktøyet eller alle slags skript eller verktøy til rådighet. I dag, fra og med Windows Server 2008 R2, kan vi jobbe med AD gjennom PowerShell. Med bruken av PowerShell 2.0, brukes en spesiell modul for å samhandle med Active Directory Active Directory-modul for Windows PowerShell som inneholder den nødvendige listen over cmdlets. For våre oppgaver vil vi bruke kommandoen Get-ADUser.

Så, avhengig av hvilket operativsystem vi skal kjøre PowerShell-konsollen, må vi utføre "forberedende trinn".

1) Hvis vi jobber fra Windows Server opp til versjon 2012, så må vi utføre kommandoen:

  • Import-Module activedirectory - kommando for å importere en modul til AD

For operativsystemversjoner fra 2012 og nyere er denne modulen allerede aktivert som standard.

2) Hvis vi jobber fra en klient-Windows, må RSAT-fjernadministrasjonspakken installeres på den, med Active Directory Module for Windows PowerShell-komponenten installert.

Det er verdt å merke seg at Get-ADUser cmdlet anbefales å kjøre når mengden data som lastes opp er opptil 1000 brukere.

Eksportering av AD-brukere som bruker PowerShell til en egen fil

Først, la oss ringe hjelpen for Get-ADUser-kommandoen. Som et resultat vil du motta alle nødvendige kommandoer for videre administrasjon.

  • hjelp Get-ADUser - kommando for å ringe hjelp

For å få en liste over alle brukere med alle egenskaper i et PowerShell-vindu, kjør følgende kommando:

  • Get-ADUser -filter * - eksport av listen over AD-brukere

Denne lossingen er ikke helt informativ og får ikke plass til all nødvendig informasjon i vinduet. La oss derfor prøve å begrense søket og vise egenskapene til en spesifikk bruker ved navn bruker1:

  • Get-ADUser -identity user1 -properties * - eksport av egenskaper til en bestemt bruker

La oss nå prøve å eksportere listen over alle brukere med egenskapene deres til en ekstern. txt eller csv fil:

  • Get-ADUser -filter * -egenskaper * | Export-csv -path c: \ users.csv -encoding Unicode - eksport av brukere til en egen fil

Jeg vil gjerne trekke spesiell oppmerksomhet til nøkkelen -koding av Unicode... Den brukes slik at det russiske kyrilliske alfabetet, etter eksport fra AD, kan vises riktig i den opplastede filen. For eksempel vil vi gjennom Microsoft Excel se spørsmålstegn i stedet for russiske bokstaver.

Når du viser en fil, eksporteres dataene på en enkelt linje og dermed ikke lesbare. For å endre dette, må vi gjøre følgende:

I denne artikkelen skal vi ta en titt på PowerShells muligheter for å administrere Active Directory-domenegrupper. Vi går gjennom hvordan du oppretter en ny gruppe i AD, legger til brukere i den (eller sletter den), viser gruppens brukere og noen andre nyttige domenegruppetriks som er ekstremt nyttige i daglig administrasjon. Følgende grunnleggende cmdlets er tilgjengelige i Active Directory PowerShell-modulen for å administrere AD-grupper:

For å bruke disse cmdletene i PowerShell-økten din, må en spesiell AD-interaksjonsmodul lastes - Active Directory-modul for Windows PowerShell... Denne modulen ble først introdusert i Windows Server 208 R2. I Windows Server 2012 og nyere er denne modulen aktivert som standard. På klientdatamaskiner kan den installeres og aktiveres som en av RSAT-komponentene. Du kan sjekke om modulen er lastet slik:

Get-Module -Listatilgjengelig

Som du kan se, er ActiveDirectory-modulen lastet. Hvis ikke, importer den med kommandoen:

Import-Module activedirectory

En komplett liste over modulkommandoer kan fås som følger:

Get-Command -Module ActiveDirectory

Det er 147 cmdlets tilgjengelig i modulen, hvorav 11 kan jobbe med grupper.

Get-Command -Module ActiveDirectory -Navn "* Group *"

Her er en liste over dem:

  • Legg til-ADPrincipalGroupMembership
  • Get-ADAccountAuthorizationGroup
  • Get-ADGroup
  • Få-ADGroupMember
  • Få-ADPrincipalGroupMembership
  • Ny ADGroup
  • Fjern-ADGroup
  • Remove-ADPrincipalGroupMembership
  • Set-ADGroup

Opprett en ny gruppe i den angitte beholderen (OU) Active Directory ved å bruke kommandoen Ny ADGroup:

New-ADGroup "TestADGroup" -path "OU = Groups, OU = Moscow, DC = corp, dc = winitpro, DC = ru" -GroupScope Global -PassThru –Verbose

Bruk av attributtet Beskrivelse du kan angi en beskrivelse av gruppen og bruke Visningsnavn endre visningsnavnet.

Parameteren GroupScope du kan angi en av følgende typer grupper:

  • 0 = DomainLocal
  • 1 = Global
  • 2 = Universal

Du kan opprette en distribusjonsgruppe slik:

New-ADGroup "TestADGroup-Distr" -bane "OU = Groups, OU = Moscow, DC = corp, dc = winitpro, DC = ru" -GroupCategory Distribution -GroupScope Global -PassThru –Verbose

Add-AdGroupMember - legg til brukere i AD-gruppen

Du kan legge til brukere i en Active Directory-gruppe ved å bruke Add- Annonsegruppemedlem... La oss legge til to brukere i den nye gruppen:

Add-AdGroupMember -Identity TestADGroup -Medlemmer bruker1, bruker2

Hvis listen over brukere som skal legges til i en gruppe er ganske stor, kan du lagre listen over kontoer i en CSV-fil, deretter importere denne filen og legge til hver bruker i gruppen.

CSV-filformatet er som følger (liste over brukere, én per linje, kolonnenavn er brukere)

Import-CSV. \ Users.csv -Header-brukere | ForEach-Object (Add-AdGroupMember -Identity ‘TestADGroup’ -members $ _. Users)

For å få alle medlemmene i en gruppe (gruppeA) og legge dem til en annen gruppe (gruppeB), bruk denne kommandoen:

Get-ADGroupMember “GroupA” | Get-ADUser | ForEach-Object (Add-ADGroupMember -Identity "Group-B" -Members $ _)

I tilfelle du trenger å kopiere medlemmene av alle nestede grupper til en ny gruppe (rekursivt), må du bruke følgende kommando:

Get-ADGroupMember -Identitet "GroupA" -Rekursiv | Get-ADUser | ForEach-Object (Add-ADGroupMember -Identity "GroupB" -Members $ _)

Remove-ADGroupMember - fjern brukere fra en gruppe

For å fjerne brukere fra en AD-gruppe, bruk kommandoen Remove-ADGroupMember. La oss fjerne to brukere fra gruppen:

Remove-ADGroupMember -Identity TestADGroup -Medlemmer bruker1, bruker2

Bekreft fjerning av brukere fra gruppen:

Hvis du trenger å fjerne brukere fra en gruppe i henhold til listen fra en CSV-fil, bruk følgende kommando:

Import-CSV. \ Users.csv -Header-brukere | ForEach-Object (Remove-ADGroupMember -Identity ‘TestADGroup’ -members $ _. Users)

Get-ADGroup - få informasjon om en AD-gruppe

Cmdleten vil hjelpe deg med å få informasjon om gruppen. Get-ADGroup:

Get-ADGroup "TestADGroup"

Denne kommandoen viser informasjon om hovedattributtene til gruppen (DN, gruppetype, navn, SID). For å vise verdien av alle attributtene til en AD-domenegruppe, kjør følgende kommando:

Get-ADGroup "TestADGroup" -egenskaper *

Som du kan se, vises nå attributter som gruppeopprettelse og endringstid, beskrivelse osv..

Ved å bruke Get-ADGroup cmdleten kan du finne alle gruppene du er interessert i etter et spesifikt mønster. For eksempel må du finne alle AD-grupper som inneholder uttrykket administratorer :

Get-ADGroup -LDAPFilter "(navn = * admins *)" | Format-tabell

Get-ADGroupMember - List opp brukerne av en AD-gruppe

Vis en liste over brukere i en gruppe:

Get-ADGroupMember "TestADGroup"

For å la bare brukernavn være i resultatene, kjør:

Get-ADGroupMember "TestADGroup" | ft navn

Hvis denne gruppen inkluderer andre grupper i domenet, for å vise en fullstendig liste over medlemmer, inkludert alle nestede grupper, bruk parameteren Tilbakevendende.

Get-ADGroupMember 'server-admins "-rekursiv | ft navn

For å eksportere listen over kontoer som tilhører en bestemt gruppe til en CSV-fil (for videre bruk i Excel), kjør følgende kommando:

Get-ADGroupMember 'server-admins "-rekursiv | ft samaccountname | Ut-fil c: \ ps \ admins.csv

Vi bruker cmdleten til å legge til AD-brukerkontoinformasjon til en tekstfil. For eksempel, i tillegg til kontoen, må du vise posisjonen og telefonnummeret til gruppebrukeren:

Get-ADGroupMember -Identity 'server-admins' -rekursiv | foreach (Get-ADUser $ _ -properties title, OfficePhone | Select-Object title, OfficePhone)

(Get-ADGroupMember -Identitet "domeneadministratorer"). Antall

Det viste seg at vi har 7 administratorkontoer i "domeneadmins"-gruppen.

For å finne en liste over tomme grupper i en bestemt OU, bruk denne kommandoen:

Get-ADGroup -Filter * -Properties Members -searchbase "OU = Moscow, DC = corp, dc = winitpro, DC = ru" | hvor (-ikke $ _. medlemmer) | velg Navn