Come configurare smartphone e PC. Portale informativo
  • casa
  • Windows 10
  • Scarica gli utenti dall'annuncio. Utilizzo di Get-ADUser per ottenere varie informazioni sugli utenti del dominio AD

Scarica gli utenti dall'annuncio. Utilizzo di Get-ADUser per ottenere varie informazioni sugli utenti del dominio AD

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

Ivan Piskunov

Una delle procedure di revisione standard ITGC per il catalogo Directory attiva è ottenere un download di tutti gli utenti del dominio. Sulla base dei dati ottenuti si formano poi procedure di test, ad esempio studiando l'elenco degli amministratori o identificando gli utenti con password scaduta. Il modo più efficace per creare un caricamento di questo tipo sarebbe utilizzare interfaccia standard PowerShell , esempi dei quali prenderemo in considerazione in questo articolo

1. Caricamento rapido utilizzando uno script PowerShell

Di seguito è riportato uno script di PowerShell, come uno dei più semplici e modi rapidi ottenere un elenco di tutti gli utenti del dominio AD in Formato CSV, che si apre senza problemi con lo stesso Excel.

$objSearcher = Nuovo oggetto System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru" $objSearcher.Filter = "(&(objectCategory=person) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Numero di account $users.Count $users | ForEach-Object ( $user = $_.Properties New-Object PsObject -Property @( Position = $user.description Department = $user.department Login = $user.userprincipalname Phone = $user.telephonenumber Room = $user.physicaldeliveryofficename Full nome = $utente.cn ) ) | Esporta-Csv -NoClobber -Codifica utf8 -Percorso C: list_domain_users.csv

Affinché lo script funzioni sul tuo sistema, devi correggerlo leggermente, ovvero inserire parametri richiesti, cioè. come va? in questo esempio questi i parametri Utenti nel dipartimento Dipartimenti nel dominio Test.ru. E indica anche il percorso in cui viene salvato il file list_domain_users.csv

Dopo lo scarico, se lo apri immediatamente list_domain_users.csv , sembrerà illeggibile, tuttavia, utilizzando i mezzi standard possiamo facilmente portarlo nel formato di cui abbiamo bisogno. Apri 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!

!È necessario notare che questo script non visualizzerà più di 1000 utenti. È abbastanza adatto per una piccola azienda, ma per chi ha un dominio grande quantità gli utenti dovrebbero ricorrere ai metodi descritti di seguito.

2. Cmdlet avanzato di PowerShell per ottenere i caricamenti degli utenti di Active Directory

Lo strumento Active Directory Module per Windows PowerShell (introdotto in Windows Server 2008 R2 e versioni successive) consente di creare cmdlet che eseguono varie manipolazioni con gli oggetti della directory AD. Il cmdlet viene utilizzato per ottenere informazioni sugli utenti e sulle relative proprietà 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 eseguiamo il comando:

Get-ADUser -filtro *

A ritirare pieno di informazioni su tutti gli attributi disponibili utente tuser, esegui il comando

Get-ADUser -identità tuser -properties *


Ad esempio, siamo interessati a informazioni su data di modifica della password e ora di scadenza . Il risultato del comando può essere caricato su file di testo:

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

O subito caricare in CSV , che sarà conveniente esportare in Excel in futuro (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 ($_.name –like “*Dmitry*”) | sort-oggetto PasswordLastSet | nome oggetto-seleziona, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -percorso c:tempuser-password-expires-2015.csv

Non è un segreto che sin dalla prima versione di PowerShell Microsoft abbia cercato di renderlo lo strumento principale di amministrazione di Windows. E in molti modi funziona! Oggi in poi semplici esempi, mostreremo Funzionalità di PowerShell, che può essere utilizzato per ottenere varie informazioni sugli utenti di Active Directory e sui loro attributi.

Nota. In precedenza, per ottenere informazioni sugli attributi degli account utente AD, era necessario utilizzare vari strumenti: la console ADUC (inclusa), un'utilità, ecc. La scelta dello strumento era solitamente basata sull'attività da svolgere e sulle capacità di programmazione dell'amministratore.

Introduzione di PowerShell 2.0 modulo speciale per lavorare con Active Directory - (introdotto in Windows Server 2008 R2), i cui cmdlet consentono di eseguire varie manipolazioni con gli oggetti della directory AD. Per ottenere informazioni sugli utenti dominio attivo Directory e cmdlet delle relative proprietà Get-ADUser. È possibile utilizzare il cmdlet Get-ADUser per ottenere il valore di qualsiasi attributo di un oggetto esistente account utente in AD. Inoltre, puoi specificare vari criteri di selezione e generare elenchi di utenti del dominio e dei loro attributi.

In questo esempio ti mostreremo come utilizzare il cmdlet Get-ADUser di PowerShell per recuperare informazioni su quando è stata modificata l'ultima volta la password di un utente e quando scade.

Avvia la finestra di Powersll con diritti di amministratore e importa il modulo Active Directory con il comando:

Directory attiva del modulo di importazione

Consiglio. In Windows Server 2012 e versioni successive è possibile saltare questo elemento poiché il modulo PowerShell attivo La directory è connessa per impostazione predefinita.

Nei sistemi operativi client (ad esempio Windows 10), affinché il comandante Get-AdUser funzioni, è necessario installare la versione appropriata di RSAT e abilitare il componente nel pannello di controllo Modulo Active Directory per Windows PowerShell (Server remoto Strumenti di amministrazione -> Strumenti di amministrazione dei ruoli -> Strumenti di Servizi di dominio Active Directory e AD LDS -> Strumenti di Servizi di dominio Active Directory).

Un elenco completo di tutti gli argomenti del cmdlet Get-ADUser può essere ottenuto come segue:

Aiuto Get-ADUser

Per visualizzare un elenco di tutti gli account di dominio, esegui il comando:

Get-ADUser -filtro *

Il formato dell'elenco restituito non è molto comodo da usare, vengono visualizzati solo alcuni 10 degli oltre 120 attributi e proprietà di base degli account utente (DN, SamAccountName, Nome, UPN, ecc.) Inoltre, vediamo che c'è nessuna informazione sull'ora dell'ultima modifica della password.

Per visualizzare informazioni complete su tutti gli attributi disponibili dell'utente tuser, eseguire il comando:

Get-ADUser -identità tuser -properties *

Quindi vediamo lista completa Attributi utente AD e relativi valori associati all'account utente. Successivamente passeremo alla formattazione dell'output del cmdlet Get-ADUser in modo che vengano visualizzati i campi necessari. A noi interessano gli attributi:

  • Password scaduta
  • PasswordUltimoImpostato
  • La password non ha scadenza

Eseguiamo il comando:

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires

Ora i dati utente contengono informazioni sulla data di modifica della password e sull'ora in cui scadrà. Presentiamo le informazioni in una forma tabellare più conveniente:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Nome, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Per visualizzare i dati utente da una unità organizzativa specifica, utilizzare il parametro Base di ricerca:

Get-ADUser -SearchBase 'OU=Mosca,DC=winitpro,DC=loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Nome, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Il risultato del comando può essere esportato in un file di testo:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Nome, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt

Oppure in CSV, che in futuro potrà essere comodamente esportato in Excel (inoltre utilizzando sort-oggetto Ordiniamo la tabella in base alla colonna PasswordLastSet e aggiungiamo anche una condizione Dove– il nome utente deve contenere la stringa “Dmitry”):

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | dove ($_.name –like “*Dmitry*”) | sort-oggetto PasswordLastSet | nome oggetto-seleziona, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -percorso c:\temp\utente-password-scade-2015.csv

Pertanto, puoi creare una tabella con tutti gli attributi utente di Active Directory necessari.

Per ottenere un elenco di account utente AD in base a una caratteristica specifica, utilizzare il parametro –Filter. Come argomenti di questo parametro è possibile specificare il valore di determinati attributi utente di Active Directory, che faranno sì che il cmdlet Get-ADUser venga applicato agli utenti che corrispondono ai criteri di filtro.

Output degli utenti AD il cui nome inizia con Roman:

Get-ADUser -filter (nome -come "Roman*")

Get-ADUser -Filter (SamAccountName -like "*") | Oggetto-misura

Elenco di tutti gli account attivi (non bloccati) in AD:

Get-ADUser -Filter (Abilitato -eq "Vero") | Seleziona-Oggetto SamAccountNome,Nome,Cognome,GivenName | Tabella dei formati

Elenco dei conti con scaduto azioni relative alla password:

Get-ADUser -filter (Abilitato -eq $True) -properties passwordScaduta | dove($_.PasswordScaduta)

Elenco degli account attivi con indirizzi email:

Get-ADUser -Filter ((mail -ne "null") -and (Abilitato -eq "true")) -Properties Cognome,GivenName,mail | Seleziona-Nome oggetto,Cognome,Nome,mail | Tabella dei formati

Compito: per un elenco di account archiviati in un file di testo (un account per riga), è necessario ottenere il numero di telefono dell'utente in AD e caricare le informazioni in un file CSV di testo (può essere facilmente importato in Esxel).

Importa-Csv c:\ps\usernsme_list.csv | Per Ogni ( Get-ADUser -identity $_.user -Properties Nome, numero di telefono | Seleziona nome, numero di telefono | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8 )

Prossimo esempio consente di scaricare la rubrica aziendale come file csv, che può successivamente essere importato in Outlook o Mozilla Thunderbird:

Get-ADUser -Filter ((mail -ne "null") -and (Abilitato -eq "true")) -Properties Cognome,GivenName,mail | Seleziona-Nome oggetto,Cognome,Nome,mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\mail_list.csv

Utenti che non hanno cambiato la propria password negli ultimi 90 giorni:

$90_Giorni = (Get-Date).adddays(-90) Get-ADUser -filter ((passwordlastset -le $90_days))

$utente = Get-ADUser winadmin -Properties miniaturaFoto $utente.thumbnailPhoto | Set-Content winadmin.jpg -Codifica byte

Elenco dei gruppi a cui appartiene l'account utente

Get-AdUser winadmin -Proprietà membro di | Seleziona membro di -expandproprietà membro di

Nei commenti all'articolo precedente, ci siamo ricordati della contabilità in Excel anziché in 1C. Bene, controlliamo quanto conosci Excel. Oggi ti mostrerò come ottenere dati da Active Directory e lavorarci senza macro e PowerShell, solo con i meccanismi standard di Office. Ad esempio, puoi facilmente ottenere analisi sull'uso dei sistemi operativi nella tua organizzazione se non disponi già di qualcosa come Microsoft SCOM. Bene, o semplicemente riscaldati e distrai la mente dai copioni.


Naturalmente, puoi ottenere i dati come negli esempi seguenti letteralmente con una riga in PowerShell. Ma, in primo luogo, PowerShell è troppo noioso e, in secondo luogo, Excel può aggiornare dinamicamente i dati: i documenti risultanti possono essere pubblicati online e dimenticare di aggiornarli.

Per lavorare con i dati, utilizzerò il meccanismo Power Query. Per Office 2010 e 2013 dovrai installare un plugin; Microsoft Office 2016 ha già questo modulo integrato. Purtroppo l’edizione Standard non ci basta; avremo bisogno della Professional.


Il meccanismo stesso è progettato per ricevere ed elaborare dati da una varietà di fonti: dai vecchi file ODBC e di testo, a Exchange, Oracle e Facebook. Maggiori dettagli sul meccanismo e sul linguaggio di scripting integrato “M” sono già stati scritti su Habré, ma esaminerò un paio di esempi di utilizzo di Power Query per ottenere dati da Active Directory.

Riscaldamento: vediamo quando i nostri utenti hanno effettuato l'accesso

La richiesta al database del dominio stesso viene creata nella scheda “Dati ― Nuova richiesta ― Da altre fonti ― Da Active Directory”.



Specificare l'origine dati.


Dovrai selezionare un nome di dominio e fornire le informazioni di connessione necessarie. Successivamente, seleziona il tipo di oggetti, in questo esempio: utente. A destra nella finestra di anteprima la query è già in esecuzione e viene visualizzata anteprima dati.



Prepariamo una richiesta e ammiriamo l'anteprima.


È necessario preparare la richiesta in anticipo facendo clic sul pulsante "modifica" e selezionando le colonne richieste. Essenzialmente, queste colonne sono classi e ciascuna di esse contiene una serie di attributi specifici. Oggetto attivo Directory, tranne la colonna principale nome da visualizzare, che di per sé è un attributo. Mi concentrerò sulle lezioni utente, persona, superiore E securityPrincipal. Ora devi selezionare attributi richiesti da ogni classe utilizzando l'"estensione" - un'icona con due frecce nell'intestazione della colonna:

  • Classe utente espandere scegliendo lastLogonTimestamp E Controllo dell'account utente;
  • V persona scegliamo numero di telefono;
  • V superiorequandoCreato;
  • e dentro securityPrincipalNomeAccountSam.


Espandiamo la richiesta.


Ora impostiamo il filtro: in particolare, per non ottenere account bloccati, l'attributo userAccountControl deve avere un valore 512 o 66048. Il filtro potrebbe essere diverso nel tuo ambiente. Puoi leggere ulteriori informazioni sull'attributo nella documentazione Microsoft.



Applicazione di un filtro.


A volte Excel rileva erroneamente il formato dei dati, in particolare il valore dell'attributo lastLogonTimestamp. Se all'improvviso ti capita una disgrazia del genere, puoi impostare il formato corretto nella scheda "Converti".

Ora la colonna userAccountControl dovrebbe essere eliminata: non è affatto necessaria nella visualizzazione. E fai clic su "Scarica e chiudi".


Il risultato è un piatto che necessita solo di qualche ritocco finale. Ad esempio, rinomina le colonne in qualcosa di più leggibile. E personalizzare aggiornamento automatico dati.


L'aggiornamento automatico all'apertura di una tabella o per timeout è configurato nella scheda “Dati” in “Proprietà”.



Configurazione dell'aggiornamento dei dati.


Una volta completata la configurazione dell'aggiornamento, puoi tranquillamente consegnare la tabella al dipartimento del personale o al servizio di sicurezza: fai sapere loro chi ha effettuato l'accesso al sistema e quando.


Il codice di richiesta nella lingua “M” è sotto lo spoiler.

let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Object Categories"], user1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(user1,( "organizationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchCustomAttributes", "mailRecipient", "distinguishedName")), #"Elemento espanso securityPrincipal" = Table.ExpandRecordColumn(#"Colonne rimosse", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"Elemento espanso top" = Table.ExpandRecordColumn(#"Elemento espanso securityPrincipal ", "top", ("whenCreated"), ("whenCreated")), #"Elemento espanso persona" = Table.ExpandRecordColumn(#"Elemento espanso top", "persona", ("telephoneNumber"), ("telephoneNumber ")), #"Elemento espanso utente" = Table.ExpandRecordColumn(#"Elemento espanso persona", "utente", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Righe con filtro applicato" = Table.SelectRows(#"Elemento utente espanso", ciascuno ( = 512 o = 66048)), #"Tipo modificato" = Table.TransformColumnTypes(#"Righe con filtro applicato",(("lastLogonTimestamp", type datetime))), #"Colonne remote1" = Table.RemoveColumns(#"Tipo modificato","("userAccountControl")) in #"Colonne remote1"

Creazione di una rubrica o cosa fare quando portale aziendale non amichevole con AD

Un'altra variante utilizzando Excel in combinazione con Active Directory: questa è la formazione di una rubrica basata sui dati AD. È chiaro che la rubrica sarà aggiornata solo se il dominio sarà in ordine.


Creiamo una richiesta per un oggetto utente, espandere la classe utente V posta e classe persona V numero di telefono. Eliminiamo tutte le colonne tranne nome distinto― la struttura del dominio ripete la struttura dell'impresa, quindi i nomi Unità Organizzative corrispondono ai nomi dei dipartimenti. Allo stesso modo, i gruppi di sicurezza possono essere utilizzati come base per i nomi dei dipartimenti.


Ora dalla linea CN=Nome utente, OU=Dipartimento contabilità, OU=Divisioni, DC=dominio, DC=ruè necessario estrarre direttamente il nome del dipartimento. Il modo più semplice per farlo è utilizzare i delimitatori nella scheda Trasforma.



Estrazione del testo.


Come delimitatori utilizzo UO= E ,UO=. In linea di principio basta una virgola, ma vado sul sicuro.



Inserisci i delimitatori.


Ora usando il filtro puoi tagliare le parti inutili UO, come gli utenti bloccati e incorporato, configurare l'ordinamento e caricare i dati nella tabella.



Visualizzazione della tabella riepilogativa.

Rapporto rapido sulla composizione delle postazioni di lavoro, senza introdurre agenti o altre preparazioni

Ora proviamo a creare una tabella utile ottenendo i dati sui computer. Faremo un report su quelli utilizzati dall'azienda sistemi operativi: per fare questo creeremo una richiesta, ma questa volta selezioneremo computer.



Facciamo una richiesta per l'oggetto computer.


Lasciamo le classi colonna computer E superiore ed espanderli:

  • Classe computer espandere scegliendo cn, sistema operativo, operativoSystemServicePack E versionesistemaoperativo;
  • in classe superiore scegliamo quandoCreato.


Richiesta avanzata.


Se lo si desidera, è possibile effettuare un report solo sui sistemi operativi server. Ad esempio, filtra per attributo operatingSystem o operatingSystemVersion. Non lo farò, ma correggerò la visualizzazione dell'ora di creazione: mi interessa solo l'anno. Per fare ciò, nella scheda "Conversione", seleziona la colonna di cui abbiamo bisogno e seleziona "Anno" nel menu "Data".



Estraiamo l'anno dal momento in cui il computer è entrato nel dominio.


Ora non resta che eliminare la colonna displayname in quanto non necessaria e caricare il risultato. I dati sono pronti. Ora puoi lavorarci come con un normale tavolo. Innanzitutto, creiamo una tabella pivot nella scheda "Inserisci" - "Tabella pivot". Concordiamo la scelta dell'origine dati e configuriamo i suoi campi.



Impostazioni del campo della tabella pivot.


Ora non resta che personalizzare il disegno secondo i propri gusti e ammirare il risultato:



Tabella riepilogativa per i computer in AD.


Se lo si desidera è possibile aggiungere una tabella riepilogativa, sempre nella scheda “Inserisci”. Nella “Categoria” (o nelle “Righe”, a piacere) aggiungere sistema operativo, ai dati ― cn. Nella scheda "Design" puoi scegliere il tipo di grafico che preferisci; io ho preferito il grafico a torta.



Grafico a torta.


Ora è chiaramente visibile che, nonostante l'aggiornamento in corso, il numero totale di workstation con Windows XP e di server con Windows 2003 è piuttosto elevato. E c'è qualcosa per cui lottare.


Il codice di richiesta è sotto lo spoiler.

let Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Categorie di oggetti"], computer1 = domain.ru(), #"Colonne remote" = Table.RemoveColumns(computer1,( "utente", "organizationalPerson", "person")), #"Altre colonne rimosse" = Table.SelectColumns(#"Colonne remote",("displayName", "computer", "top")), #"Espandi elemento computer" = Table.ExpandRecordColumn(#"Altre colonne remote", "computer", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " operatingSystemVersion")), #"Elemento superiore esteso" = Table.ExpandRecordColumn(#"Elemento computer espanso", "top", ("whenCreated"), ("whenCreated")), #"Anno estratto" = Table.TransformColumns( #"Elemento espanso superiore",(("whenCreated", Date.Year))), #"Colonne remote1" = Table.RemoveColumns(#"Anno estratto",("displayName")) in #"Colonne remote1"

Aggiungere etichette

In questo articolo esamineremo la capacità di PowerShell di gestire i gruppi di domini Active Directory. Vedremo come creare nuovo gruppo in AD, aggiungi utenti (o elimina), visualizza un elenco di utenti del gruppo e molti altri azioni utili con gruppi di domini, estremamente utili nell'amministrazione quotidiana. Per gestire i gruppi AD, il modulo Active Directory PowerShell fornisce i seguenti cmdlet di base:

Per utilizzare questi cmdlet nella sessione di PowerShell, è necessario caricare uno speciale modulo di interazione AD: Modulo Active Directory per Windows PowerShell. Questo moduloè stato introdotto per la prima volta in Windows Server 208 R2. In Windows Server 2012 e versioni successive, questo modulo è abilitato per impostazione predefinita. SU computer client può essere installato e abilitato come uno dei componenti RSAT. Puoi verificare se il modulo è caricato in questo modo:

Get-Module -Listavailable

Come puoi vedere, il modulo ActiveDirectory è caricato. In caso contrario importatelo con il comando:

Directory attiva del modulo di importazione

L'elenco completo dei comandi del modulo può essere ottenuto come segue:

Get-Command -Module ActiveDirectory

Nel modulo sono disponibili in totale 147 cmdlet, di cui 11 possono funzionare con i gruppi.

Get-Command -Module ActiveDirectory -Nome "*Gruppo*"

Ecco la loro lista:

  • Aggiungi-ADPrincipalGroupMembership
  • Get-ADAccountAuthorizationGroup
  • Get-ADGroup
  • Get-ADGroupMember
  • Get-ADPrincipalGroupMembership
  • Nuovo-ADGroup
  • Rimuovi-ADGroup
  • Rimuovere-ADPrincipalGroupMembership
  • Set-ADGroup

Creiamo un nuovo gruppo nel contenitore Active Directory (OU) specificato utilizzando il comando Nuovo-ADGroup:

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

Utilizzo dell'attributo Descrizioneè possibile specificare una descrizione del gruppo e l'utilizzo Nome da visualizzare modificare il nome visualizzato.

Parametro GroupScopeÈ possibile specificare uno dei seguenti tipi di gruppo:

  • 0 = dominio locale
  • 1 = Globale
  • 2 = Universale

Puoi creare un gruppo di distribuzione come questo:

Nuovo-ADGroup "TestADGroup-Distr" -path "OU=Gruppi,OU=Mosca,DC=corp,dc=winitpro,DC=ru" -GroupCategory Distribution -GroupScope Global -PassThru –Verbose

Aggiungi-AdGroupMember: aggiungi utenti a un gruppo AD

È possibile aggiungere utenti a un gruppo Active Directory utilizzando il componente aggiuntivo Membro del gruppo di annunci. Aggiungiamo due utenti al nuovo gruppo:

Aggiungi-AdGroupMember -Identity TestADGroup -Membri utente1, utente2

Se l'elenco degli utenti che devi aggiungere al gruppo è piuttosto grande, puoi salvare l'elenco degli account in un file CSV, quindi importarlo questa vita e aggiungi ciascun utente al gruppo.

Il formato del file CSV è il seguente (elenco degli utenti uno per riga, nome della colonna – utenti)

Import-CSV .\users.csv -Utenti intestazione | ForEach-Object (Add-AdGroupMember -Identity 'TestADGroup' -members $_.users)

Per ottenere tutti i membri di un gruppo (gruppoA) e aggiungerli a un altro gruppo (gruppoB), utilizzare questo comando:

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

Se è necessario copiare i membri di tutti i gruppi nidificati in un nuovo gruppo (ricorsivamente), è necessario utilizzare il seguente comando:

Get-ADGroupMember -Identità “GruppoA” -Ricursivo | Get-ADUser | ForEach-Object(Add-ADGroupMember -Identity “GroupB” -Members$_)

Remove-ADGroupMember: rimuove gli utenti da un gruppo

Per rimuovere utenti da un gruppo AD, è necessario utilizzare il comando Remove-ADGroupMember. Rimuoviamo due utenti dal gruppo:

Remove-ADGroupMember -Identity TestADGroup -Membri utente1, utente2

Conferma la rimozione degli utenti dal gruppo:

Se devi rimuovere utenti da un gruppo in base a un elenco da un file CSV, utilizza questo comando:

Import-CSV .\users.csv -Utenti intestazione | ForEach-Object (Remove-ADGroupMember -Identity 'TestADGroup' -members $_.users)

Get-ADGroup: ottieni informazioni su un gruppo AD

Il cmdlet ti aiuterà a ottenere informazioni sul gruppo Get-ADGroup:

Get-ADGroup "TestADGroup"

Questo comando visualizza le informazioni sugli attributi principali del gruppo (DN, tipo di gruppo, nome, SID). Per visualizzare il valore di tutti gli attributi del gruppo di domini AD, eseguire il comando seguente:

Get-ADGroup "TestADGroup" -proprietà *

Come puoi vedere, ora vengono visualizzati attributi come l'ora di creazione e modifica del gruppo, la descrizione, ecc.

Utilizzando il cmdlet Get-ADGroup è possibile trovare tutti i gruppi a cui si è interessati utilizzando un modello specifico. Ad esempio, devi trovare tutti i gruppi AD i cui nomi contengono la frase amministratori :

Get-ADGroup -LDAPFilter “(nome=*admin*)” | Tabella dei formati

Get-ADGroupMember: visualizza un elenco di utenti del gruppo AD

Visualizza un elenco di utenti del gruppo:

Get-ADGroupMember "TestADGroup"

Per lasciare solo i nomi utente nei risultati, esegui:

Get-ADGroupMember "TestADGroup"| nome ft

Se dentro questo gruppo sono inclusi altri gruppi di dominio, per visualizzare l'elenco completo dei membri, inclusi tutti i gruppi nidificati, utilizzare l'opzione Ricorsivo.

Get-ADGroupMember "server-admins" -recursive| nome ft

Per esportare un elenco di account appartenenti a un gruppo specifico in un file CSV (per un utilizzo successivo in Excel), esegui il comando seguente:

Get-ADGroupMember "server-admins" -recursive| ft samaccountname| Out-File c:\ps\admins.csv

Per aggiungere i dati dell'account utente in AD a un file di testo, utilizzeremo il cmdlet. Ad esempio, oltre all'account, è necessario visualizzare la posizione e il numero di telefono dell'utente del gruppo:

Get-ADGroupMember -Identity 'server-admins' -recursive| foreach ( Get-ADUser $_ -properties titolo, OfficePhone|Seleziona-titolo oggetto, OfficePhone )

(Get-ADGroupMember -Identity "amministratori di dominio").Count

Si è scoperto che nel gruppo "domain admins" abbiamo 7 account amministratore.

Per trovare un elenco di gruppi vuoti in un'unità organizzativa specifica, utilizzare questo comando:

Get-ADGroup -Filter * -Properties Members -searchbase “OU=Mosca,DC=corp,dc=winitpro,DC=ru” | dove (-non $_.membri) | seleziona Nome

0

Ho il seguente script funzionante che controlla se grande elenco utenti nel file CSV come membro del gruppo AD e scrive i risultati in results.csv.

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

Pertanto lo script non restituisce solo corrispondenze per un gruppo AD, ma restituisce corrispondenze per gli 80 gruppi AD contenuti in List_of_AD_groups.csv. Scrivere SÌ/NO per ciascun gruppo AD in una nuova colonna CSV (o se ciò non è possibile, creare un file CSV separato per ciascun gruppo con i risultati avrà lo stesso effetto.

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

ad esempio risultati.csv?:

NOME AD_GROUP1 AD_GROUP2 AD_GROUP80 ecc ecc. utente1 sì no sì utente2 no no sì utente3 no sì no echo "NomeUtente`InfraLite" >> risultati.csv $utenti = GC .\user_list.csv $gruppo = "InfraLite" $membri = Get-ADGroupMember -Identity $group -Recursive | Seleziona -ExpandProperty SAMAccountName foreach ($utente in $utenti) ( if ($membri -contains $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 quella di racchiudere il codice esistente in un altro ciclo e creare un file di output per ciascun gruppo:

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

Un approccio più elegante sarebbe quello di creare un modello di mappatura dei gruppi, clonarlo per ciascun utente e compilare una copia con le appartenenze ai gruppi dell'utente. Qualcosa del genere dovrebbe funzionare:

$template = @() Get-Content "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $groups = @() Get-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name ) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | Where-Object ( $groupmap.ContainsKey($_) ) | ForEach-Object ( $groupmap [$_] = $true ) New-Object -Type PSObject -Property $groupmap ) | Esporta-Csv "C:\user_group_mapping.csv" -NoType

0

Ci sto giocando da un po' e penso di aver trovato un modo per darti esattamente quello che stavi cercando.

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

Ecco cosa mi è venuto 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 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 al SAMAccountName del gruppo $Memberships = $UserInfo.MemberOf | ForEach-Object( ($_.Split(",")) .replace("CN=","") ) #Aggiunta della coppia Utente=Appartenenza all'hash $UserHash.Add($_,$Memberships) ) #Loop esterno per creare un oggetto per utente $Results = $UserArray | ForEach-Object( # Crea prima un oggetto semplice $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 dei membri dell'utente $UserIsMember = $UserHash.($User.Name) -contiene $_ #Aggiunta proprietà all'oggetto e valore $User | Add-Member -MemberType NoteProperty -Name $ _ -Value $UserIsMember ) #Restituendo l'oggetto alla variabile Return $User ) #Converti gli oggetti in un CSV, quindi generali in output $Results | ConvertTo-CSV -NoTypeInformation | Out-File $OutputFile

Speriamo che tutto abbia un senso. Ho commentato più che potevo. Sarebbe molto semplice passare ad ADSI se non avessi RSAT installato su qualunque macchina su cui lo stai eseguendo. Se ne hai bisogno, fammi sapere e apporterò alcune modifiche rapide.

I migliori articoli sull'argomento