Come configurare smartphone e PC. Portale informativo
  • casa
  • Interessante
  • Scaricare utenti bloccati da ad powershell. Trova utenti inattivi in ​​Active Directory

Scaricare utenti bloccati da ad powershell. Trova utenti inattivi in ​​Active Directory

Oggi proveremo a scaricare l'elenco di tutti gli utenti in un file separato da Active Directory. PowerShell sarà il nostro assistente principale in questa materia. Questo perché Microsoft aveva originariamente pianificato PowerShell Shell come strumento principale per la gestione dei componenti del server Windows. E oggi, quando abbiamo già la versione 2.0, nel complesso, è così.

Anche nel recente passato, per poter interagire in qualche modo con AD, gli amministratori dovevano avere a disposizione o l'utility dsquery, o tutti i tipi di script o utilità. Oggi, a partire da Windows Server 2008 R2, possiamo lavorare con AD tramite PowerShell. Con l'avvento di PowerShell 2.0, viene utilizzato un modulo speciale per interagire con Active Directory Modulo Active Directory per Windows PowerShell che contiene l'elenco richiesto di cmdlet. Per i nostri compiti, useremo il comando Ottieni-ADUser.

Quindi, a seconda del sistema operativo in cui eseguiremo la console PowerShell, dovremo eseguire "passaggi preparatori".

1) Se lavoriamo da sotto Windows Server fino alla versione 2012, quindi dobbiamo eseguire il comando:

  • Directory attiva del modulo di importazione - comando per importare un modulo in AD

Per le versioni del sistema operativo dal 2012 in poi, questo modulo è già abilitato per impostazione predefinita.

2) Se lavoriamo da qualsiasi client Windows, su di esso deve essere installato il pacchetto di amministrazione remota RSAT, con installato il componente Modulo Active Directory per Windows PowerShell.

Vale la pena notare che si consiglia di eseguire il cmdlet Get-ADUser quando la quantità di dati da caricare è fino a 1000 utenti.

Esportazione di utenti AD utilizzando PowerShell in un file separato

Innanzitutto, chiamiamo l'aiuto per il comando Get-ADUser. Di conseguenza, riceverai tutti i comandi necessari per un'ulteriore amministrazione.

  • aiuto Get-ADUser - comando per chiamare aiuto

Per ottenere un elenco di tutti gli utenti con tutte le proprietà in una finestra di PowerShell, eseguire il comando seguente:

  • Get-ADUser -filtro * - esportazione dell'elenco degli utenti AD

Questo scarico non è del tutto informativo e non si adatta a tutte le informazioni necessarie nella finestra. Pertanto, proviamo a restringere la ricerca e visualizzare le proprietà di un utente specifico denominato user1:

  • Get-ADUser -identity user1 -properties * - esportazione delle proprietà di un utente specifico

Ora proviamo ad esportare l'elenco di tutti gli utenti con le loro proprietà su uno esterno. txt o csv file:

  • Get-ADUser -filter * -properties * | Export-csv -path c: \ users.csv -encoding Unicode - esportazione degli utenti in un file separato

Vorrei attirare l'attenzione in particolare sulla chiave -codifica Unicode... Viene utilizzato in modo che l'alfabeto cirillico russo, dopo l'esportazione da AD, possa essere visualizzato correttamente nel file caricato. Ad esempio, tramite Microsoft Excel vedremo punti interrogativi invece di lettere russe.

Quando si visualizza un file, i dati vengono esportati su un'unica riga e quindi non leggibili. Per cambiare questo, dobbiamo fare quanto segue:

Dedicato all'uso di PowerShell per l'amministrazione di AD. Come punto di partenza, ho deciso di prendere 10 comuni attività di amministrazione di AD e vedere come possono essere semplificate utilizzando PowerShell:

  1. Reimposta password utente
  2. Attiva e disattiva gli account
  3. Sblocca account utente
  4. cancella il tuo account
  5. Trova gruppi vuoti
  6. Aggiungi utenti al gruppo
  7. Elenca i membri del gruppo
  8. Trova account computer obsoleti
  9. Disattiva l'account del computer
  10. Trova computer per tipo

Inoltre, l'autore mantiene un blog (usando PowerShell, ovviamente), ti consigliamo di dare un'occhiata - jdhitsolutions.com/blog. E il più rilevante che puoi ottenere dal suo twitter twitter.com/jeffhicks.
Quindi, di seguito è riportata la traduzione dell'articolo "Le 10 principali attività di Active Directory risolte con PowerShell".

Gestire Active Directory (AD) con Windows PowerShell è più semplice di quanto pensi e voglio dimostrartelo. Puoi semplicemente prendere gli script di seguito e usarli per risolvere una serie di attività di gestione di AD.

Requisiti

Per utilizzare PowerShell per gestire AD, è necessario soddisfare diversi requisiti. Dimostrerò come funzionano i cmdlet AD su un computer Windows 7 come esempio.
Per utilizzare i cmdlet, è necessario disporre di un controller di dominio Windows Server 2008 R2 oppure è possibile scaricare e installare il servizio gateway di gestione di Active Directory nei controller di dominio legacy. Leggere attentamente la documentazione prima dell'installazione; È necessario riavviare il CD.
Sul lato client, scarica e installa (RSAT) per Windows 7 o Windows 8. In Windows 7, dovrai aprire in Pannelli di controllo capitolo Programmi e scegli Attiva o disattiva le caratteristiche di Windows... Trovare Strumenti di amministrazione remota del server ed espandi la sezione Strumenti di amministrazione del ruolo... Selezionare gli elementi appropriati per gli strumenti di AD DS e AD LDS, in particolare notare che l'elemento deve essere selezionato Modulo Active Directory per Windows PowerShell come mostrato nella Figura 1. (In Windows 8, tutti gli strumenti sono selezionati per impostazione predefinita). Ora siamo pronti per partire.

Figura 1 abilitazione di servizi di dominio Active Directory e strumenti di AD LDS

Ho effettuato l'accesso con un account con diritti di amministratore di dominio. La maggior parte dei cmdlet che mostrerò ti consentirà di specificare credenziali alternative. Comunque, consiglio di leggere l'aiuto ( Ottenere aiuto) ed esempi che dimostrerò di seguito.
Avvia una sessione PowerShell e importa il modulo:

PS C: \> Modulo di importazione ActiveDirectory

L'importazione crea un nuovo PSDrive, ma non lo utilizzeremo. Tuttavia, puoi vedere quali comandi ci sono nel modulo importato.

PS C: \> get-command -module ActiveDirectory

La bellezza di questi comandi è che se posso usare un comando per un oggetto AD, allora può essere usato per 10, 100 e anche 1000. Vediamo come funzionano alcuni di questi cmdlet.

Attività 1: Reimposta password utente

Iniziamo con un'attività tipica: reimpostare la password di un utente. Questo può essere fatto facilmente e semplicemente tramite il cmdlet Imposta-ADAAccountPassword... La parte difficile è che la nuova password deve essere qualificata come stringa sicura: una parte di testo crittografata e archiviata in memoria durante la sessione di PowerShell. Innanzitutto, creiamo una variabile con una nuova password:
PS C: \> $ new = Read-Host "Inserisci la nuova password" -AsSecureString

Quindi, inseriamo una nuova password:

Ora possiamo recuperare l'account (usando samNomeAccountè l'opzione migliore) e impostare una nuova password. Ecco un esempio per l'utente Jack Frost:

PS C: \> Set-ADAccountPassword jfrost -NewPassword $ new

Sfortunatamente, c'è un bug con questo cmdlet: -Passare attraverso, -Cosa succede se, e -Confermare non funziona. Se preferisci una scorciatoia, prova quanto segue:

PS C: \> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String " [e-mail protetta]"-forza)

Di conseguenza, ho bisogno che Jack cambi la password la prossima volta che accedo e modifico l'account usando Set-ADUser.

PS C: \> Set-ADUser jfrost -ChangePasswordAtLogon $ True

I risultati dell'esecuzione del cmdlet non vengono scritti nella console. Se è necessario, utilizzare -Vero... Ma posso scoprire se l'operazione è andata a buon fine o meno estraendo il nome utente usando il cmdlet Ottieni-ADUser e specificando la proprietà Password scaduta come mostrato in Figura 2.


Riso. 2. I risultati del cmdlet Get-ADUser Cmdlet con la proprietà PasswordExpired

In conclusione: reimpostare la password di un utente utilizzando PowerShell non è affatto difficile. Confesso che anche reimpostare la password è facile con un gioco da ragazzi. Utenti e computer di Active Directory console Console di gestione Microsoft (MMC). Ma l'utilizzo di PowerShell va bene se è necessario delegare un'attività, non si desidera distribuire il suddetto snap-in o reimpostare la password in un grande processo IT automatizzato.

Compito 2: attivare e disattivare gli account

Ora disattiviamo l'account. Continuiamo a lavorare con Jack Frost. Questo codice utilizza il parametro -Cosa succede se, che puoi vedere in altri cmdlet che apportano modifiche per testare il mio comando senza eseguirlo.

PS C: \> Disable-ADAccount jfrost -whatif What if: Eseguendo l'operazione "Set" su Target "CN = Jack Frost, OU = staff, OU = Testing, DC = GLOBOMANTICS, DC = local".

Ora disattiviamo per davvero:

PS C: \> Disabilita-ADAccount jfrost

E quando sarà il momento di attivare il tuo account, quale cmdlet ci aiuterà?

PS C: \> Enable-ADAccount jfrost

Questi cmdlet possono essere utilizzati in un'espressione pipeline, consentendo di attivare o disattivare tutti gli account desiderati. Ad esempio, questo codice disattiva tutti i conti nel reparto Vendite.

PS C: \> get-aduser -filter "department -eq" sales "" | disabilita-adaccount

Certo, scrivendo un filtro per Ottieni-ADUser piuttosto complicato, ma è qui che si usa il parametro -Cosa succede se insieme al cmdlet Disabilita-ADAccount viene in soccorso.

Attività 3: sbloccare l'account utente

Considera una situazione in cui Jack ha bloccato il suo account mentre cercava di inserire una nuova password. Invece di cercare il suo account tramite la GUI, la procedura di sblocco può essere eseguita con un semplice comando.

PS C: \> Sblocca-ADAccount jfrost

Il cmdlet supporta anche i parametri -Cosa succede se e -Confermare.

Compito 4: Elimina account

Non importa quanti utenti elimini, è facile farlo con il cmdlet Rimuovi-ADUser... Non voglio rimuovere Jack Frost, ma se volessi, userei un codice come questo:

PS C: \> Remove-ADUser jfrost -whatif What if: Eseguendo l'operazione "Remove" su Target "CN = Jack Frost, OU = staff, OU = Testing, DC = GLOBOMANTICS, DC = local".

Oppure posso inserire più utenti ed eliminarli con un semplice comando:

PS C: \> get-aduser -filter "enabled -eq" false "" -property WhenChanged -SearchBase "OU = Impiegati, DC = Globomantics, DC = Local" | dove ($ _. WhenChanged -le (Get-Date) .AddDays (-180)) | Rimuovi-ADuser -whatif

Questo comando troverà e rimuoverà tutti gli account OU dipendenti disattivati ​​che non sono stati modificati per 180 giorni o più.

Compito 5: trovare gruppi vuoti

La gestione del gruppo è infinita e ingrata. Esistono molti modi per trovare gruppi vuoti. Alcune espressioni potrebbero funzionare meglio di altre, a seconda della tua organizzazione. Il codice seguente troverà tutti i gruppi in un dominio, inclusi quelli integrati.

PS C: \> get-adgroup -filter * | dove (-Not ($ _ | get-adgroupmember)) | Seleziona nome

Se hai gruppi con centinaia di membri, l'utilizzo di questo comando può richiedere molto tempo; Get-ADGroupMember controlla ogni gruppo Se puoi limitare o personalizzare, sarà meglio.
Ecco un altro approccio:

PS C: \> get-adgroup -filter "members -notlike" * "-AND GroupScope -eq" Universal "" -SearchBase "OU = Gruppi, OU = Dipendenti, DC = Globomantics, DC = locale" | Seleziona Nome, Gruppo *

Questo comando trova tutti i gruppi universali che non hanno l'appartenenza ai gruppi di unità organizzative e visualizza alcune delle proprietà. Il risultato è mostrato in Figura 3.


Riso. 3. Ricerca e filtraggio di gruppi universali

Attività 6: aggiunta di utenti al gruppo

Aggiungiamo Jack Frost al gruppo IT di Chicago:

PS C: \> add-adgroupmember "chicago IT" -Membri jfrost

Sì, è così semplice. Puoi anche aggiungere facilmente centinaia di utenti ai gruppi, anche se questo è un po' imbarazzante secondo me:

PS C: \> Add-ADGroupMember "Chicago Employees" -member (get-aduser -filter "city -eq" Chicago "")

Ho usato l'espressione pipeline tra parentesi per trovare tutti gli utenti che hanno una proprietà City a Chicago. Il codice tra parentesi viene eseguito e gli oggetti risultanti vengono passati al parametro –Member. Ogni oggetto personalizzato viene aggiunto al gruppo Chicago Employees. Non importa se abbiamo a che fare con 5 o 5000 utenti, l'aggiornamento delle appartenenze ai gruppi richiede solo pochi secondi. Questa espressione può essere scritta anche usando PerOgni-Oggetto, che potrebbe essere più conveniente:

PS C: \> Get-ADUser -filter "city -eq" Chicago "" | foreach (Add-ADGroupMember "Chicago Employees" -Member $ _)

Compito 7: Visualizzazione di un elenco di membri del gruppo

Potresti voler sapere chi fa parte di un particolare gruppo. Ad esempio, dovresti scoprire periodicamente chi è membro del gruppo Domain Admins:

PS C: \> Get-ADGroupMember "Amministratori di dominio"

La figura 4 mostra il risultato.


Riso. 4. Membri del gruppo Domain Admins

Il cmdlet elenca l'oggetto AD per ogni membro del gruppo. Ma per quanto riguarda i gruppi nidificati? Il mio gruppo Chicago All Users è una raccolta di gruppi nidificati. Per ottenere un elenco di tutti gli account, devo solo utilizzare il parametro -Ricorsivo.

PS C: \> Get-ADGroupMember "Chicago All Users" -Ricursivo | Seleziona il nome distinto

Se vuoi andare dall'altra parte - trova a quali gruppi appartiene l'utente - usa la proprietà dell'utente Membro di:

PS C: \> get-aduser jfrost -property Memberof | Selezionare -ExpandProperty memberOf CN = NewTest, OU = Groups, OU = Employees, DC = GLOBOMANTICS, DC = local CN = Chicago Test, OU = Groups, OU = Employees, DC = GLOBOMANTICS, DC = locale CN = Chicago IT, OU = Gruppi, OU = Dipendenti, DC = GLOBOMANTICS, DC = locale CN = Chicago Sales Users, OU = Gruppi, OU = Dipendenti, DC = GLOBOMANTICS, DC = locale

ho usato il parametro -Espandi proprietà per visualizzare i nomi Membro di come le stringhe.

Compito 8: trova account computer obsoleti

Mi viene spesso posta questa domanda: "Come faccio a trovare account di computer obsoleti?" E io rispondo sempre: "Cosa è obsoleto per te?" Le aziende variano nelle loro definizioni di quando un account computer (o utente, non importa) è deprecato e non più utilizzabile. Per quanto mi riguarda, faccio attenzione a quegli account per i quali le password non sono state modificate per un certo periodo di tempo. Questo periodo per me è di 90 giorni: se il computer non ha cambiato la password insieme al dominio durante questo periodo, molto probabilmente è offline e obsoleto. Viene utilizzato il cmdlet Ottieni-ADComputer:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Seleziona nome, passwordlastset

Il filtro funziona alla grande con un valore fisso, ma questo codice verrà aggiornato per tutti gli account computer che non hanno modificato le password dal 1 gennaio 2012. I risultati sono mostrati in Figura 5.


Riso. 5. Trova account computer obsoleti

Un'altra opzione: supponi di essere almeno al livello funzionale di un dominio Windows 2003. Filtra per proprietà UltimoLogontimeTimbro... Questo valore è il numero di intervalli di 100 nanosecondi dal 1 gennaio 1601 ed è memorizzato in GMT, quindi lavorare con questo valore è un po' complicato:

PS C: \> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | select name, lastlogontimestamp, @ (Name = "LastLogon"; Expression = (:: FromFileTime ($ _. Lastlogontimestamp))), passwordlastset | Ordina LastLogonTimeStamp


Riso. 6. Converti il ​​valore LastLogonTimeStamp nel solito formato

Per creare un filtro, devo convertire una data, ad esempio 1 gennaio 2012, nel formato corretto. La conversione viene eseguita in FileTime:

PS C: \> $ cutoff = (Get-Date "1/1/2012"). ToFileTime () PS C: \> $ cutoff 129698676000000000

Ora posso usare questa variabile nel filtro per Ottieni-ADComputer:

PS C: \> Get-ADComputer -Filter "(lastlogontimestamp -lt $ cutoff) -or (lastlogontimestamp -notlike" * ")" -property * | Seleziona Nome, LastlogonTimestamp, PasswordLastSet

Il codice sopra trova gli stessi computer mostrati in Figura 5.

Compito 9: Disattiva account computer

Forse quando trovi account inattivi o obsoleti, vuoi disattivarli. Questo è abbastanza facile da fare. Utilizzeremo lo stesso cmdlet utilizzato con gli account utente. Puoi perfezionarlo usando samNomeAccount account.

PS C: \> Disable-ADAccount -Identity "chi-srv01 $" -whatif What if: Esecuzione dell'operazione "Set" su Target "CN = CHI-SRV01, CN = Computer, DC = GLOBOMANTICS, DC = locale".

O usando un'espressione pipeline:

PS C: \> get-adcomputer "chi-srv01" | Disabilita-ADAccount

Posso anche usare il mio codice per trovare account obsoleti e disattivarli tutti:

PS C: \> get-adcomputer -filter "Passwordlastset -lt" 1/1/2012 "" -properties * | Disabilita-ADAccount

Compito 10: trova i computer per tipo

Mi viene anche spesso posta la domanda su come trovare account di computer per tipo, come server o workstation. Ciò richiede una certa quantità di creatività da parte tua. Non c'è nulla in AD che differenzia il server dal client, tranne forse il sistema operativo. Se sul tuo computer è in esecuzione Windows Server 2008, è necessario eseguire alcuni passaggi aggiuntivi.
Innanzitutto, è necessario ottenere un elenco di sistemi operativi, quindi filtriamo gli account in base al sistema operativo disponibile.

PS C: \> Get-ADComputer -Filter * -Properties OperatingSystem | Seleziona Sistema Operativo -unique | Ordina sistema operativo

I risultati sono mostrati in Figura 7.


Riso. 7. Estrai l'elenco dei sistemi operativi

Voglio trovare tutti i computer che hanno un sistema operativo server:

PS C: \> Get-ADComputer -Filter "Sistema operativo -like" * Server * "" -properties OperatingSystem, OperatingSystem ServicePack | Seleziona Nome, Operazione * | formato-lista

I risultati sono mostrati in Figura 8.

Come con altri cmdlet di AD Get, è possibile personalizzare i parametri di ricerca e limitare la query a unità organizzative specifiche, se necessario. Tutte le espressioni che ho mostrato possono essere integrate in grandi espressioni di PowerShell. Ad esempio, puoi ordinare, raggruppare, applicare filtri, esportare in CSV o creare e inviare report HTML tramite e-mail, tutto da PowerShell! In questo caso, non devi scrivere un singolo squittio.
Ecco un bonus per te: il rapporto sull'età della password dell'utente salvato in un file HTML:

PS C: \> Get-ADUser -Filter "Enabled -eq" True "-AND PasswordNeverExpires -eq" False "" -Properties PasswordLastSet, PasswordNeverExpires, PasswordExpired | Seleziona DistinguishedName, Name, pass *, @ (Name = "PasswordAge"; Expression = ((Get-Date) - $ _. PasswordLastSet)) | sort PasswordAge -Descending | ConvertTo-Html -Titolo "(! LANG: Rapporto età password" | Out-File c:\Work\pwage.htm !}

Sebbene questa espressione possa sembrare un po' intimidatoria, con una piccola conoscenza di PowerShell è facile da usare. E rimane solo l'ultimo consiglio: come definire una proprietà personalizzata chiamata Età password... Il valore rappresenta l'intervallo tra oggi e la proprietà PasswordLastSet. Quindi ordino i risultati per la mia nuova proprietà. La Figura 9 mostra l'output per il mio piccolo dominio di prova.

Aggiorna:
Il post contiene la traduzione dell'articolo sul portale

Utilizzato per creare, modificare ed eliminare oggetti del catalogo. L'utente può anche utilizzare il comando ldifde per estendere lo schema, esportare informazioni su utenti e gruppi di Active Directory in altre applicazioni o servizi e popolare ADAM (Active Directory Application Mode) con i dati di altri servizi di directory.

Sintassi

ldifde [-io] [-F Nome del file] [-S nome del server] [-C riga1 riga2] [-v] [-J sentiero] [-T numero di porta] [-D DN_base] [-R Filtro_LDAP] [-P regione] [-l LDAP_attribute_list] [-o LDAP_attribute_list] [-G] [-m] [-n] [-K] [-un ] [-B ] [-? ]

Parametri

-io Determina la modalità di importazione. Se il parametro non è specificato, per impostazione predefinita viene utilizzata la modalità di esportazione. -FNome del file Specifica il nome del file di importazione o esportazione. -Snome del server Specifica il computer su cui deve essere eseguita l'operazione di importazione o esportazione. Di default il programma ldifde verrà eseguito sul computer su cui ldifde installato. -Criga1 riga2 Sostituisce tutte le occorrenze stringhe1 contenuto stringhe2... Tipicamente utilizzato quando si importano dati da un dominio ad un altro, e contemporaneamente è necessario sostituire il nome distinto del dominio esportatore ( stringa1), il nome del dominio importatore ( stringa2). -v Abilita la modalità di registrazione dettagliata. -Jsentiero Specifica la posizione del file di registro. L'impostazione predefinita è il percorso corrente. -Tnumero di porta Specifica il numero di porta LDAP (Lightweight Directory Access Protocol). La porta LDAP predefinita è 389. La porta del catalogo globale è 3268. -DDN_base Specifica il nome distinto della base di ricerca per l'esportazione dei dati. -RFiltro LDAP Crea un filtro di ricerca LDAP per l'esportazione dei dati. Ad esempio, utilizzando il seguente filtro, vengono esportati tutti gli utenti con un secondo nome specifico: csvde -r (e (objectClass =Utente) (sn =Cognome)) -Pregione Specifica l'ambito della ricerca. I parametri dell'ambito di ricerca sono Base, OneLevel e Sottoalbero. -lLDAP_attribute_list Specifica l'elenco di attributi da restituire nei risultati di una richiesta di esportazione. Se questo parametro viene omesso, vengono restituiti tutti gli attributi. -oLDAP_attribute_list Specifica un elenco di attributi da omettere dai risultati di una query di esportazione. In genere questo parametro viene utilizzato quando si esportano oggetti da Active Directory e quindi li si importa in un'altra directory compatibile con LDAP. Se alcuni attributi non sono supportati da un'altra directory, possono essere esclusi dal set di risultati utilizzando questo parametro. -G Esclude le ricerche impaginate. -m Omettendo attributi che non possono essere scritti, come ObjectGUID e oggetto SID. -n Omettere l'esportazione dei valori binari. -K Ignora gli errori durante l'operazione di importazione e continua l'elaborazione. Di seguito è riportato un elenco completo degli errori ignorati:

  • l'oggetto è già un membro del gruppo;
  • violazione di una classe oggetto (nel senso che la classe oggetto specificata non esiste) se l'oggetto importato non ha altri attributi;
  • l'oggetto esiste già;
  • violazione della restrizione;
  • l'attributo o il valore esiste già;
  • non esiste tale oggetto.
-unnome distinto utente password Specifica l'esecuzione di un comando utilizzando il nome_distinto utente e parola d'ordine -B. -Bnome utente dominio password Specifica un comando da eseguire utilizzando l'oggetto specificato nome utente, dominio e password... Per impostazione predefinita, il comando verrà eseguito utilizzando le credenziali dell'utente attualmente connesso alla rete. Non può essere utilizzato con il parametro -un. -? Visualizza il menu dei comandi.

Osservazioni

  • Con parametro -C puoi usare le costanti #schemaNamingContext e #configurationNamingContext invece dei nomi distinti della sezione della directory dello schema e della sezione della directory di configurazione.
  • Quando si crea un file di importazione per un comando ldifde, usa il valore cambia tipo per determinare il tipo di modifiche contenute nel file di importazione. I valori cambia tipo sono riportati nella tabella sottostante.

Quello che segue è un esempio di un file di importazione LDAP in formato LDIF che utilizza il valore Inserisci:
DN: CN =utente_selezionato, DC =nome del dominio
cambia tipo: Inserisci
CN: utente_selezionato
descrizione:descrizione del file
classe oggetto: utente
classe oggetto: utente_selezionato

Esempi di

Per recuperare solo il nome distinto, il nome comune, il nome, il cognome e il numero di telefono degli oggetti restituiti, immettere:
-l nome distinto, CN, nome, SN, telefono
Per escludere un identificatore univoco globale (GUID) per un oggetto, inserisci:
-o quando_creato, quando_cambiato, Object_guid

Script per scaricare tutti gli utenti da MS Active Directory (ITGC)

Ivan Piskunov

Una delle procedure di audit standard ITGC per catalogo Directory attiva è ottenere il download di tutti gli utenti del dominio. Sulla base dei dati ricevuti, vengono quindi formate procedure di test, ad esempio studiando l'elenco degli amministratori o identificando gli utenti con password scaduta. Il modo più efficiente per formare un tale scarico sarebbe utilizzare l'interfaccia standard PowerShell , esempi dei quali prenderemo in considerazione in questo articolo

1. Caricamento rapido utilizzando lo script PowerShell

Di seguito è riportato uno script PowerShell come uno dei modi più semplici e veloci per ottenere un elenco di tutti gli utenti di un dominio AD in formato CSV, che può essere aperto senza problemi dallo stesso Excel.

$ objSearcher = New-Object System.DirectoryServices.DirectorySearcher $ objSearcher.SearchRoot = "LDAP: // ou = Utenti, ou = Reparti, dc = test, dc = ru" $ objSearcher.Filter = "(& (objectCategory = persona) (! userAccountControl: 1.2.840.113556.1.4.803: = 2)) "$ utenti = $ objSearcher.FindAll () # Numero di account $ utenti.Conta $ utenti | ForEach-Object ($ user = $ _. Properties New-Object PsObject -Property @ (Title = $ user.description Department = $ user.department Login = $ user.userprincipalname Telefono = $ user.telephonenumber Room = $ user.physicaldeliveryofficename Completo nome = $ utente.cn)) | Esporta-Csv -NoClobber -Codifica utf8 -Percorso C: list_domen_users.csv

Affinché lo script funzioni sul tuo sistema, devi correggerlo leggermente, ovvero inserire i parametri necessari, ad es. come in questo esempio questi sono parametri Utenti nell'unità dipartimenti nel dominio Test.ru. E specifica anche il percorso della posizione in cui viene salvato il file list_domen_users.csv

Dopo lo scarico, se apri subito list_domen_users.csv , apparirà in una forma illeggibile, tuttavia, con mezzi standard possiamo portarlo facilmente nel formato di cui abbiamo bisogno. Apertura in Excel list_domen_users.csv , seleziona la prima colonna, quindi vai alla scheda "Dati" e fai clic su "Testo per colonne". Selezionare "delimitato" e fare clic su "Avanti". Pronto!

! Dovrebbe essere notato che questo script non visualizzerà più di 1000 utenti. È abbastanza adatto per una piccola azienda, ma coloro che hanno un numero enorme di utenti nel dominio dovrebbero utilizzare i metodi descritti di seguito.

2. Cmdlet avanzato di PowerShell per ottenere utenti di Active Directory scaricati

Lo strumento Modulo Active Directory per Windows PowerShell (introdotto in Windows Server 2008 R2 e versioni successive) consente di generare cmdlet che eseguono varie manipolazioni con oggetti directory AD. Per ottenere informazioni sugli utenti e sulle loro proprietà, utilizzare il cmdlet Get-ADUser.

Iniziare avvia una finestra di Powershell con diritti di amministratore e importare il modulo Active Directory per ulteriori azioni:
Directory attiva del modulo di importazione

a elenca tutti gli account di dominio a, eseguiamo il comando:

Get-ADUser -filtro *

a visualizzare informazioni complete su tutti gli attributi disponibili utente tuser, esegui il comando

Get-ADUser -identity tuser -properties *


Ad esempio, siamo interessati a informazioni su la data in cui la password è stata modificata e l'ora in cui scade ... Il risultato dell'esecuzione del comando può essere esportato in un file di testo:

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

O subito carica in CSV , che in futuro sarà conveniente esportare in Excel (inoltre, utilizzando l'oggetto di ordinamento, ordineremo la tabella in base alla colonna PasswordLastSet e aggiungeremo anche la condizione dove: il nome utente deve contenere la stringa "Dmitry")

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | dove ($ _. nome –come “* Dmitry *”) | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c: tempuser-password-expires-2015.csv

0

Ho il seguente script di lavoro che verifica se un ampio elenco di utenti in un file CSV è membro di un gruppo AD e scrive i risultati in results.csv.

Non sono sicuro di come convertire lo script in modo da poter cambiare $ group = "InfraLite" in $ group = DC. \ List_Of_AD_Groups.CSV.

Pertanto, lo script non restituisce solo le corrispondenze per un gruppo AD, ma restituisce le corrispondenze per 80 gruppi AD contenuti in List_of_AD_groups.csv. Scrivendo S / NO per ogni gruppo AD in una nuova colonna CSV (o, se ciò non è possibile, creando un file CSV separato per ogni gruppo con risultati sarà anche.

Potrei farlo manualmente modificando il valore da $ group e il nome del file di esportazione e rieseguendo lo script 80 volte, ma dovevo essere veloce con PS per farlo

ad esempio risultati.csv?:

NOME AD_GROUP1 AD_GROUP2 AD_GROUP80 ecc ecc. user1 si no si user2 no no si user3 no si no echo "UserName`InfraLite" >> results.csv $ utenti = GC \ user_list.csv $ group = "InfraLite" $ membri = Get-ADGroupMember -Identity $ group -Recursive | Selezionare -ExpandProperty SAMAccountName foreach ($ utente in $ utenti) (if ($ membri -contiene $ utente) (echo "$ utente $ gruppo`tSì" >> risultati.csv) else (echo "$ utente`tNo" >> risultati .csv))

  • 2 risposte
  • Ordinamento:

    Attività

0

Una soluzione banale al tuo problema sarebbe avvolgere il tuo codice esistente in un altro ciclo e creare un file di output per ogni gruppo:

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

Un approccio più pulito sarebbe quello di creare un modello di mappatura di gruppo, clonarlo per ciascun utente e popolare una copia con le appartenenze al gruppo dell'utente. Qualcosa del genere dovrebbe funzionare:

$ template = @ () Get-Content "C: \ groups.txt" | ForEach-Object ($ template [$ _] = $ false) $ groups = @ () Get-ADGroup -Filter * | ForEach-Object ($ gruppi [$ _. DistinguishedName] = $ _. Nome) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ($ groupmap = $ template.Clone () $ _. MemberOf | ForEach-Object ($ groups [$ _]) | Where-Object ($ groupmap.ContainsKey ($ _)) | ForEach-Object ($ groupmap [$ _] = $ true) Nuovo-Oggetto -Tipo PSObject -Proprietà $ mappa di gruppo) | Esporta-Csv "C: \ user_group_mapping.csv" -NoType

0

Ci ho giocato per un po' e penso di aver trovato un modo per darti esattamente quello che cercavi.

Penso che Ansgar fosse sulla strada giusta, ma non sono riuscito a convincerlo a fare quello che ha fatto dopo. Ha detto che al momento della stesura, non aveva accesso all'ambiente AD.

Questo è quello che mi è venuta in mente:

$ UserArray = Get-Content "C: \ Temp \ Users.txt" $ GroupArray = Get-Content "C: \ Temp \ Groups.txt" $ OutputFile = "C: \ Temp \ Something.csv" # Impostazione di una tabella hash per un uso successivo $ UserHash = New-Object -TypeName System.Collections.Hashtable # Ciclo esterno per aggiungere utenti e appartenenze a UserHash $ UserArray | ForEach-Object ($ UserInfo = Get-ADUser $ _ -Properties MemberOf # Elimina la sintassi LPAP solo per SAMAccountName del gruppo $ Memberships = $ UserInfo.MemberOf | ForEach-Object (($ _. Split (",")) .replace ("CN =", "")) #Aggiunta della coppia Utente = Appartenenza all'Hash $ UserHash.Add ($ _, $ Appartenenze)) # Ciclo esterno per creare un oggetto per utente $ Risultati = $ UserArray | ForEach-Object (# Prima crea un semplice oggetto $ User = New-Object -TypeName PSCustomObject -Property @ (Name = $ _) # Aggiungi dinamicamente membri all'oggetto, in base a $ GroupArray $ GroupArray | ForEach-Object (#Checking $ UserHash per vedere se il gruppo viene visualizzato nell'elenco di appartenenza dell'utente $ UserIsMember = $ UserHash. ($ User.Name) -contiene $ _ #Aggiunta proprietà all'oggetto e valore $ Utente | Add-Member -MemberType NoteProperty -Name $ _ -Value $ UserIsMember) #Restituire l'oggetto alla variabile Return $ User) #Convertire gli oggetti in un CSV, quindi emetterli $ Risultati | ConvertTo-CSV -NoTypeInformation | Out-File $ OutputFile

Speriamo che tutto abbia un senso. Ho commentato più che potevo. Sarebbe molto facile convertire in ADSI se non avessi installato RSAT su qualsiasi macchina su cui lo esegui. Se ne hai bisogno, fammi sapere e farò alcune rapide modifiche.

Principali articoli correlati