Come configurare smartphone e PC. Portale informativo
  • casa
  • Ferro
  • Script per scaricare tutti gli utenti da MS Active Directory (ITGC). Script di PowerShell da importare nella foresta di Active Directory e creare un file con gli utenti

Script per scaricare tutti gli utenti da MS Active Directory (ITGC). Script di PowerShell da importare nella foresta di Active Directory e creare un file con gli utenti

Oggi proveremo a caricare un elenco di tutti gli utenti in un file separato da Active Directory. PowerShell sarà il nostro assistente principale in questa materia. Il fatto è che Microsoft originariamente aveva pianificato la console di comando di PowerShell come strumento principale per la gestione dei componenti del server Windows. E oggi, quando abbiamo già la versione 2.0, secondo nell'insieme, è proprio così.

Anche nel recente passato, per interagire in qualche modo con AD, gli amministratori dovevano disporre dell'utilità dsquery o diverso tipo script o utilità. Oggi, a cominciare dalla versione Windows Server 2008 R2, possiamo lavorare con AD tramite PowerShell. Con l'avvento di PowerShell 2.0, viene utilizzato per interagire con Active Directory modulo speciale Modulo Active Directory per Windows PowerShell, che contiene lista richiesta cmdlet. Per i nostri compiti, useremo il comando Get-ADUser.

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

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

  • Directory attiva del modulo di importazione – comando per importare il 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, allora il pacchetto di amministrazione remota RSAT deve essere installato su di esso, con il componente Active Directory installato Modulo per Windows PowerShell.

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

Esportazione di utenti AD utilizzando PowerShell in un file separato

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

  • aiuta Get-ADUser - comando per chiamare aiuto

Per entrare nella finestra Elenco di PowerShell tutti gli utenti con tutte le proprietà, è necessario eseguire il comando seguente:

  • Get-ADUser-filtro * – esportazione elenco utenti AD

Questo scarico non è del tutto informativo e non si adatta a tutte le finestre informazione necessaria. Pertanto, proviamo a restringere la ricerca e visualizzare le proprietà di un utente specifico denominato utente1:

  • Get-ADUser -identità utente1 -proprietà * – esportare le proprietà di un utente specifico

E ora proviamo ad esportare un elenco di tutti gli utenti con le loro proprietà su un esterno txt o csv file:

  • Get-ADUser -filtro * -proprietà * | Export-csv -percorso c:\users.csv -codifica Unicode – esportare gli utenti in un file separato

Vorrei prestare particolare attenzione alla chiave -codifica Unicode. Serve a garantire che l'alfabeto cirillico russo, dopo l'esportazione da AD, possa essere visualizzato correttamente nel file caricato. Ad esempio, attraverso Microsoft Excel vedremo punti interrogativi invece di lettere russe.

Durante la visualizzazione di un file, i dati vengono esportati su un'unica riga e sono quindi illeggibili. Per cambiare questo, dobbiamo fare quanto segue:

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

Ivan Piskunov

Uno di procedure standard audit ITGC per catalogo Directory attiva è ottenere un download di tutti gli utenti del dominio. Sulla base dei dati ottenuti, si formano ulteriormente le procedure di test, ad esempio studiando l'elenco degli amministratori o identificando gli utenti con una password scaduta. Il modo più efficace per formare un tale scarico sarebbe quello di utilizzare interfaccia standard PowerShell , esempi di cui prenderemo in considerazione in questo articolo.

1. Caricamento rapido tramite script PowerShell

Di seguito è riportato uno script di 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 = Nuovo oggetto System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Utenti,ou=Departmets,dc=test,dc=en" $objSearcher.Filter = "(&(objectCategory=person) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Numero di account $users.Count $users | ForEach-Object ( $utente = $_.Proprietà Nuovo oggetto PsObject -Proprietà @( Titolo = $user.description Reparto = $user.reparto Login = $user.userprincipalname Telefono = $user.telephonenumber Room = $user.physicaldeliveryofficename Nome = $utente.cn ) ) | Export-Csv -NoClobber -Codifica utf8 -Percorso C: list_domain_users.csv

Affinché lo script funzioni sul tuo sistema, devi correggerlo leggermente, ovvero invio parametri richiesti, cioè. come in questo esempio questi sono i parametri Utenti nella divisione Dipartimenti nel dominio Test.ru. E specificare anche il percorso della posizione in cui è stato salvato il file. list_domain_users.csv

Dopo lo scarico, se immediatamente aperto list_domain_users.csv , apparirà in una forma illeggibile, tuttavia, utilizzando strumenti standard, possiamo facilmente portarlo nel formato di cui abbiamo bisogno. Apertura in Excel list_domain_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!

!Nota 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 ricorrere ai metodi descritti di seguito.

2. Cmdlet PowerShell avanzato per ottenere download Utenti attivi Directory

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

Iniziare avviare 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 ed esegui il comando:

Get-ADUser-filtro *

a ritirare informazioni complete su tutti gli attributi disponibili utente utente, eseguire il comando

Get-ADUser -identity tuser -proprietà *


Ad esempio, siamo interessati a informazioni su data e ora di cambio password alla scadenza . Il risultato dell'esecuzione del comando può essere esportato in un file di testo:

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

O subito carica su CSV , che verrà successivamente esportato convenientemente in Excel (inoltre, utilizzando sort-object, ordineremo la tabella in base alla colonna PasswordLastSet e aggiungeremo anche dove condizione- il nome utente deve contenere la stringa "Dmitry")

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | dove ($_.nome –come “*Dmitry*”) | sort-oggetto PasswordLastSet | seleziona-oggetto Nome, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Esporta-csv -percorso c:tempuser-password-expires-2015.csv

Continuiamo a familiarizzare con utili cmdlet di PowerShell per l'utilizzo di Active Directory. Nell'ultimo articolo abbiamo parlato della possibilità di ottenere qualsiasi informazione sugli account utente di AD. In data odierna parleremo sul cmdlet Ottenere-ADComputer e il suo utilizzo per ottenere vari dati sugli account dei computer (server e workstation) in Dominio attivo Directory.

Diamoci da fare compito pratico: Utilizzando PowerShell, è necessario ottenere un elenco di account di computer che non sono stati registrati nel dominio per più di 120 giorni (computer inattivi) e disabilitarli.

Prima di poter utilizzare il cmdlet Get-ADComputer, è necessario includere il modulo AttivoDirectorymoduloperfinestrePowerShell.

Directory attiva del modulo di importazione

Consigli. In PowerShell 3.0 (introdotto in Windows Server 2012) e versioni successive, questo modulo è incluso per impostazione predefinita quando la funzionalità è installata. Server remoto Strumenti di amministrazione -> Strumenti di amministrazione dei ruoli -> Strumenti di Servizi di dominio Active Directory e AD LDS -> Modulo Active Directory per Windows PowerShell. Per utilizzare il cmdlet Get-ADComputer nei client Windows 10,8.1 e Windows 7, è necessario scaricare e installare la versione del proprio sistema operativo e abilitare il modulo AD-Powershell dal pannello di controllo o con il comando:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Considerazioni sulla sintassi per il cmdlet Get-ADComputer

La guida sui parametri del cmdlet Get-ADComputer viene chiamata in modo standard utilizzando Get-Help:

Per ottenere informazioni da AD utilizzando i cmdlet del modulo AD for Powershell, non è necessario disporre dei diritti di amministratore di dominio, è sufficiente che l'account con cui viene eseguito il cmdlet sia incluso nel gruppo utenti di dominio (Utenti autenticati / Utenti di dominio ).

Per ottenere informazioni su un computer specifico nel dominio, specificarne il nome con il parametro - Identità:

Get-ADComputer-Identity SRV-DB01

Siamo interessati all'ora dell'ultima registrazione del computer nel dominio AD, ma questa informazione non è nell'output del comando. Mostriamo tutte le proprietà del computer disponibili in Active Directory:

Get-ADComputer -Identità SRV-DB01 -Proprietà *

Come puoi vedere l'ora ultimo accesso questo computer alla rete è specificato nell'attributo LastLogonDate - 21/09/2015 0:20:17.

Rimuoveremo tutto ulteriori informazioni, lasciando solo il valore dei campi Nome e LastLogonDate.

Get-ADComputer -identità SRV-DB01 -Proprietà * | Nome FT, LastLogonDate - Dimensione automatica

Successivamente, è necessario correggere il comando in modo che visualizzi le informazioni sull'ora dell'ultima registrazione sulla rete per tutti i computer del dominio. Per fare ciò, cambiamo il parametro Identità sul filtro:

Get-ADComputer -Filtro * -Proprietà * | Nome FT, LastLogonDate - Dimensione automatica

Per visualizzare le informazioni sui computer in uno specifico contenitore di dominio (OU), utilizzare il parametro SearchBase:
Get-ADComputer -SearchBase 'OU=Mosca,DC=winitpro,DC=loc' -Filtro * -Proprietà * | Nome FT, LastLogonDate - Dimensione automatica

Ordina i risultati della query in base all'ora dell'ultimo accesso alla rete (campo LastLogonDate) utilizzando il comando Ordinare:

Get-ADComputer -Filtro * -Proprietà * | OrdinaLastLogonData | Nome FT, LastLogonDate - Dimensione automatica

Quindi, abbiamo un elenco di computer nel dominio e l'ora del loro ultimo accesso alla rete di Active Directory, ora vogliamo bloccare Conti computer che non sono stati utilizzati per più di 120 giorni.

Con l'aiuto di Get-Date entriamo valore variabile data corrente e sottrarre 120 giorni dalla data corrente:

$date_with_offset=(Get-Date).AddDays(-120)

La variabile data risultante può essere utilizzata come filtro per la query Get-ADComputer nel campo LastLogonDate

Get-ADComputer -Proprietà LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | OrdinaLastLogonData | Nome FT, LastLogonDate - Dimensione automatica

Quindi abbiamo una lista computer inattivi, non registrato nella rete da più di 120 giorni. Con il comando Disabilita-ADAccount spegniamoli.

Consigli. Per la prima volta, è meglio testare i risultati del comando con un interruttore Cosa succede se, che fa in modo che il comando non apporti alcuna modifica, mostrando cosa accadrà quando verrà eseguito.

Get-ADComputer -Proprietà LastLogonDate -Filter (LastLogonData -lt $date_with_offset ) | Set-ADComputer -Abilitato $false -whatif

Ora puoi bloccare tutti gli account computer ricevuti:

Get-ADComputer -Proprietà LastLogonDate -Filter (LastLogonData -lt $datecutoff) | Set-ADComputer -Abilitato $false

Get-ADComputer: casi d'uso pratici

Di seguito sono riportati alcuni esempi più utili di comandi che utilizzano il cmdlet Get-ADComputer.

Ottieni il numero di computer in Active Directory:

Get-ADComputer-Filter (SamAccountName -come "*") | Misura-Oggetto

Elenco di computer i cui nomi iniziano con BuhPC:

Get-ADComputer -Filtro "Nome -come "BuhPC*"" -Proprietà Indirizzo IPv4 | Nome tabella formato,DNSHostName,IPv4Address -A

Seleziona tutte le workstation che eseguono Windows XP:

Get-ADComputer-Filter (Sistema Operativo, simile a "*XP*")

Seleziona solo sistemi server:

Get-ADComputer-Filtro (Sistema Operativo -Come "*Windows Server*" ) -ProprietàSistemaOperativo | Seleziona Nome, Sistema operativo | Formato tabella – Dimensione automatica

Ottieni un elenco di server nel dominio con la versione del sistema operativo e il Service Pack installato:
Get-ADComputer -Filtro (Sistema operativo -Come "*Windows Server*" ) -Proprietà * | Format-Table Name,OperatingSystem,OperatingSystemServicePack -Wrap -Auto

Per eliminare tutti gli account computer nel dominio che non sono stati nel dominio per più di 6 mesi, puoi utilizzare il comando:

get-adcomputer -properties lastLogonDate -filter * | dove ($_.lastLogonDate -lt (get-date).addmonths(-6)) | Rimuovi-ADComputer

Seleziona i computer disabilitati in una specifica UO:

Get-ADComputer -filter * -SearchBase "OU=Computer, dc=winitpro,dc=loc" | Where-Object ($_.enabled -eq $False)

I risultati dell'esecuzione del comando possono essere esportati in un file di testo:

Get-ADComputer-Filtro (Sistema Operativo -Come "*Windows Server*" ) -ProprietàSistemaOperativo | Seleziona Nome, Sistema operativo | Format-Table -AutoSize C:\Script\server_system.txt

O file CSV:

Get-ADComputer -Filtro * -Proprietà * | Seleziona-Nome oggetto,Sistema operativo,Sistema operativoServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Codifica UTF8

Per eseguire una determinata azione con tutti i computer dall'elenco ricevuto, è necessario utilizzare foreach loop. In questo esempio, vogliamo generare un elenco di server nel dominio (l'elenco dovrebbe contenere il nome del server, il produttore del server e il modello del server).

$Computer = Get-ADComputer -Filtro (Sistema operativo -Come "*Windows Server*")
Foreach($Computer in $Computer)
{
$Nome host = $NomeComputer
$Infocomputer = (Ottieni-WmiObject -Nome del computer$HostnameWin32_ComputerSystem)
$Produttore = $Produttore.Computer
$Modello = $Modello.Computer
Scrivi host "Nome: $Nome host"
Write-Host "Produttore: $Produttore"
Scrivi host "Modello: $Model"
Scrivi Host " "
$Contenuto = "$Nome host;$Produttore;$Modello"
Aggiungi contenuto -Valore$Contenuto -Sentiero"C:\PS\ServersInfo.txt"
}

Oppure puoi usare la sintassi del ciclo più breve. Supponiamo di dover eseguire un comando specifico su tutti i computer in una specifica unità organizzativa (in questo esempio, vogliamo eseguire il comando di aggiornamento dei criteri di gruppo su tutti i server):

get-adcomputer -SearchBase "OU=Server,DC=winitpro,DC=loc" -Filter * | %( Invoke-Command -Computer $_.Name -ScriptBlock (gpupdate /force) )

Come sai, uno dei modi per importare in blocco gli utenti è importare gli utenti da Active Directory. Tuttavia, ci sono alcune restrizioni su questa opzione di importazione:

  1. Non è possibile reimportare i dati per gli utenti esistenti nel sistema.
  2. Non è possibile eseguire il componente di importazione tramite la riga di comando in modalità standalone.
  3. Non è possibile importare ulteriori informazioni sull'account da Active Directory (vengono caricate solo le informazioni necessarie per generare un utente).

Durante la successiva implementazione del sistema, il cliente ha stabilito severi requisiti per l'importazione degli utenti dalla directory:

  1. Dovrebbe essere possibile importare ripetutamente dati su utenti esistenti per aggiornare le informazioni su questi utenti (disabilitazione di un account, download di certificati, gruppi di utenti, ecc.)
  2. Importa gruppi personalizzati con tipi di unità organizzative e gruppi universali, tenendo conto della gerarchia in Active Directory. Aggiornamento delle informazioni sull'ingresso dell'utente in un particolare gruppo.
  3. Importa certificati utente.
  4. Collegamento automatico di un account utente con un record esistente directory Dipendenti.
  5. Importare Indirizzi email utente (utilizzato successivamente per inviare notifiche su nuove attività).
  6. Chiusura dell'account utente del sistema DIRECTUM, nel caso sia disabilitato in Active Directory.
  7. Lavora offline tramite la riga di comando sulle attività assegnate.

Come risultato del lavoro, è stata sviluppata una soluzione sotto forma di uno scenario che soddisfa questi requisiti. Dalle principali funzionalità dello script si può notare quanto segue:

  • Importa account utente. Il nome utente e il nome completo vengono importati.
  • Importa gruppi di utenti. Vengono importati i gruppi di utenti che includono l'account di directory (vengono importati i gruppi del tipo Unità organizzativa e Gruppi universali). Ciò tiene conto della gerarchia di directory del dominio.
  • Importa certificati utente. Importa certificati di account directory validi e certificati non ancora scaduti per la firma e la crittografia.
  • Cancellazione/chiusura di un account. Rimozione di un accesso utente e chiusura di una voce di directory Utenti quando l'account della directory è disabilitato.
  • Collegamento di un account a un dipendente. L'account utente è collegato a una voce della rubrica lavoratori, per cui il valore dell'attributo corrisponde Cognome I.O. con il nome completo dell'account di directory.
  • Importa indirizzoE-posta. Se l'account dell'utente importato è stato associato a una voce lavoratori, quindi per la voce di directory corrispondente Persone l'indirizzo email dell'utente viene registrato.

Lo script consente di lavorare in modalità visiva (quando è necessario elaborare uno o più account) e in modalità nascosta (quando tutti gli account vengono elaborati senza la partecipazione dell'amministratore).

Bene, per chiarezza, farò un esempio lavoro visivo sceneggiatura.

Quindi, eseguendo lo script, configura le impostazioni di importazione e fai clic ok :

Sul passo successivo selezionare utenti importati di utenti. Trasferiamo gli utenti necessari dalla colonna di sinistra a destra e premiamo il pulsante ok :

Dopo che gli utenti sono stati importati, viene visualizzato un messaggio sul completamento dello script:

Possiamo vedere quali azioni sono state eseguite con gli account nel registro di importazione.

Piattaforma di sviluppo: DIRECTUM 4.6.1.
Pacchetto di sviluppo e tecnologia. descrizione:
Funzione corretta allo script:

Dedicato all'uso di PowerShell per amministrare AD. Come punto di partenza, l'autore ha deciso di svolgere 10 attività tipiche di amministrazione di AD e vedere come possono essere semplificate utilizzando PowerShell:

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

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

Controllo attivo Directory (AD) con finestre PowerShell è più facile di quanto pensi e voglio dimostrartelo. Puoi semplicemente prendere gli script seguenti e usarli per risolvere una serie di attività di gestione di AD.

Requisiti

Per utilizzare PowerShell per gestire AD, è necessario soddisfare alcuni requisiti. Dimostrerò come funzionano i cmdlet AD su un computer Windows 7 di esempio.
Per utilizzare i cmdlet, è necessario disporre di un controller di dominio Livello Windows Server 2008 R2 oppure è possibile scaricare e installare il servizio Active Directory Management Gateway su controller di dominio legacy. Leggere attentamente la documentazione prima dell'installazione; È necessario il riavvio.
Sul lato client, scarica e installa (RSAT) per Windows 7 o Windows 8. In Windows 7, dovrai aprire Pannelli di controllo capitolo Programmi e scegli Accendi o spegni Funzionalità di Windows(Attiva o disattiva le caratteristiche di Windows). Trovare Strumenti di amministrazione remota del server ed espandere la sezione Strumenti di amministrazione dei ruoli. Selezionare gli elementi appropriati per gli strumenti Servizi di dominio Active Directory 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 lavorare.

Figura 1 Abilitazione degli strumenti Servizi di dominio Active Directory e AD LDS

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

PS C:\> Modulo di importazione ActiveDirectory

L'importazione crea un nuovo PSDrive, ma non lo useremo. 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: reimpostare la password utente

Iniziamo con compito tipico: reimposta la password dell'utente. Puoi farlo facilmente e semplicemente tramite il cmdlet Set-ADAccountPassword. La parte difficile è che la nuova password deve essere qualificata come una stringa sicura: un pezzo di testo crittografato e archiviato in memoria per la durata della sessione di PowerShell. Per prima cosa, creiamo una variabile con una nuova password:
PS C:\> $new=Host di lettura "Inserisci la nuova password" -AsSecureString

Quindi, inserisci una nuova password:

Ora possiamo estrarre l'account (usando samAccountnameè 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 la scorciatoia, prova quanto segue:

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

Alla fine, ho bisogno che Jack cambi la sua password la prossima volta che accedo e aggiorno l'account utilizzando Set-ADUser.

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

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


Riso. 2. Risultati del cmdlet Get-ADUser con la proprietà PasswordExpired

In conclusione: reimpostare la password di un utente con PowerShell non è affatto difficile. Confesso che anche reimpostare la password è facile in un attimo. Utenti e computer di Active Directory console Console di gestione Microsoft (MMC). Ma usando PowerShell adatto se è necessario delegare un'attività, non si desidera distribuire lo snap-in sopra menzionato o reimpostare la password come parte di un ampio processo IT automatizzato.

Attività 2: Attiva e disattiva gli account

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

PS C:\> Disable-ADAccount jfrost -whatif Cosa succede se: Esecuzione dell'operazione "Set" su Target "CN=Jack Frost, OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

E ora disattiviamo per davvero:

PS C:\> Disabilita-ADAccount jfrost

E quando arriverà il momento di attivare l'account, quale cmdlet ci aiuterà?

PS C:\> Abilita-ADAccount jfrost

Questi cmdlet possono essere usati in un'espressione pipeline, consentendo di attivare o disattivare tutti gli account desiderati. Ad esempio, questo codice disattiverà tutti gli account nel reparto vendite (Vendite)

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

Naturalmente, scrivendo un filtro per Get-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:\> Unlock-ADAccount jfrost

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

Attività 4: Elimina l'account

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

PS C:\> Remove-ADUser jfrost -whatif Cosa succede se: Esecuzione dell'operazione "Rimuovi" sulla destinazione "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

Oppure posso inserire più utenti e rimuoverli con un semplice comando:

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

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

Compito 5: Trovare Gruppi Vuoti

La gestione del gruppo è un compito infinito e ingrato. Esistono molti modi per trovare gruppi vuoti. Alcune espressioni potrebbero funzionare meglio di altre, a seconda dell'organizzazione. Il codice seguente troverà tutti i gruppi nel dominio, inclusi i gruppi incorporati.

PS C:\> get-adgroup -filter * | dove (-Non ($_ | get-adgroupmember)) | seleziona il 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=Groups,OU=Employees,DC=Globomantics, DC=local" | Seleziona Nome, Gruppo*

Questo comando trova tutti i gruppi universali che non hanno l'appartenenza a gruppi UO e stampa alcune delle proprietà. Il risultato è mostrato in Figura 3.


Riso. 3. Cerca e filtra i gruppi universali

Attività 6: aggiunta di utenti a un gruppo

Aggiungiamo Jack Frost al gruppo IT di Chicago:

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

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

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 utente viene aggiunto al gruppo Chicago Employees. Non importa se abbiamo a che fare con 5 o 5000 utenti, bastano pochi secondi per aggiornare le appartenenze ai gruppi. Questa espressione può anche essere scritta usando Per ogni oggetto che potrebbe essere più conveniente:

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

Attività 7: Visualizzazione di un elenco di membri del gruppo

Potresti voler sapere chi è in un particolare gruppo. Ad esempio, dovresti controllare periodicamente chi è nel 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 restituisce un oggetto AD per ogni membro del gruppo. E i gruppi nidificati? Il mio gruppo Chicago All Users è una raccolta di gruppi nidificati. Per ottenere una lista di tutti gli account devo solo usare il parametro -Ricorsivo.

PS C:\> Get-ADGroupMember "Chicago Tutti gli utenti" -Recursive | Seleziona Nome distinto

Se vuoi andare dall'altra parte, per trovare 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=local CN=Chicago IT,OU= Gruppi, OU=Dipendenti, DC=GLOBOMANTICS,DC=locale CN=Chicago Sales Users,OU=Gruppi,OU=Dipendenti, DC=GLOBOMANTIS,DC=locale

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

Attività 8: trova account computer obsoleti

Spesso mi viene posta questa domanda: "Come faccio a trovare account di computer obsoleti?". E io rispondo sempre: "Cos'è per te obsoleto?" Le aziende variano nella definizione di quando un account computer (o account utente, qualunque cosa) sia obsoleto e non più utilizzabile. Quanto a me, faccio attenzione a quegli account per i quali non sono state modificate le password certo periodo volta. Questo periodo per me è di 90 giorni: se il computer non ha modificato la password insieme al dominio durante questo periodo, molto probabilmente è offline e obsoleto. cmdlet utilizzato Get-ADComputer:

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

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


Riso. 5. Trova account computer obsoleti

In alternativa, supponi di essere almeno al livello di funzionalità del dominio Windows 2003. Filtra in base alla proprietà LastLogontimeStamp. 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,lastlogotimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogotimestamp))),passwordlastset | SortLastLogonTimeStamp


Riso. 6. Convertire il valore LastLogonTimeStamp nel formato familiare

Per creare un filtro, devo convertire una data, come il 1 gennaio 2012, nel formato corretto. La conversione avviene in FileTime:

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

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

PS C:\> Get-ADComputer -Filter "(lastlogotimestamp -lt $cutoff) -o (lastlogotimestamp -non come "*")" -property * | Selezionare Nome, Ultimo accesso, Timestamp, Password UltimoSet

Il codice precedente trova gli stessi computer mostrati nella Figura 5.

Attività 9: Disattiva l'account del computer

Potresti voler disattivarli quando trovi account inattivi o obsoleti. Per fare questo è abbastanza semplice. Utilizzeremo lo stesso cmdlet utilizzato con gli account utente. Puoi perfezionarlo usando samAccountname account.

PS C:\> Disable-ADAccount -Identity "chi-srv01$" -whatif Cosa succede se: Esecuzione dell'operazione "Set" su Target "CN=CHI-SRV01, CN=Computers,DC=GLOBOMANTICS,DC=local".

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

Attività 10: trova i computer per tipo

Spesso mi viene anche chiesto come trovare account di computer per tipo, come server o workstation. Ciò richiede un po' di creatività da parte tua. Non c'è nulla in AD che distingua il server dal client, tranne forse il sistema operativo. Se il tuo computer esegue Windows Server 2008, dovrai eseguire alcuni passaggi aggiuntivi.
Per prima cosa devi ottenere un elenco di sistemi operativi, quindi filtriamo gli account in base al sistema operativo disponibile.

PS C:\> Get-ADComputer -Filtro * -Proprietà Sistema Operativo | Seleziona Sistema Operativo -univoco | Ordina Sistema operativo

I risultati sono mostrati in Figura 7.


Riso. 7. Estrai l'elenco dei sistemi operativi

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

PS C:\> Get-ADComputer -Filtro "Sistema operativo -come "*Server*"" -proprietà Sistema operativo,Sistema operativo ServicePack | Seleziona Nome, Op* | formato-elenco

I risultati sono mostrati in Figura 8.

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

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

Sebbene questa espressione possa sembrare un po' intimidatoria, con una conoscenza minima di PowerShell è facile da usare. E rimane solo ultimo consiglio: come definire una proprietà personalizzata chiamata PasswordEtà. Il valore è il divario 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.

Aggiornare:
Il post contiene una traduzione dell'articolo sul portale

Articoli correlati in alto