Genera rapporti con Get-AdGroupMember in PowerShell

A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using the PowerShell Get-ADGroupMember cmdlet and other cmdlets can save you a ton of time.

I gruppi di Active Directory sono un ottimo modo per suddividere gli account degli utenti. I gruppi consentono agli amministratori di definire l’accesso alle risorse su molti sistemi.

In questo articolo, utilizziamo PowerShell per ottenere i membri del gruppo AD ed esportare i membri del gruppo AD. È quindi possibile utilizzare queste informazioni per generare molti report interessanti.

Active Directory group

Gestisci e reporta Active Directory, Exchange e Microsoft 365 con ManageEngine ADManager Plus. Scarica la prova gratuita!

Prerequisiti

Se desideri seguire questo articolo, assicurati di avere i seguenti requisiti pronti:

  • Lavorare su un computer con Windows 10, associato a un dominio
  • Accedere con un utente che può leggere i gruppi AD e gli account degli utenti
  • Avere installato il modulo di Active Directory di PowerShell

Apprendere le basi

Per interrogare i gruppi AD e i membri del gruppo, hai a disposizione due cmdlet di PowerShell – Get-AdGroup e Get-AdGroupMember.

Get-ADGroup interroga un controller di dominio e restituisce gli oggetti di gruppo AD. Get-AdGroupMember guarda all’interno di ogni gruppo e restituisce tutti gli account utente, gruppi, contatti e altri oggetti che esistono in quel gruppo.

Ottenere i gruppi AD

Per trovare i gruppi AD con PowerShell, è possibile utilizzare il cmdlet Get-ADGroup. Senza parametri, Get-ADGroup interrogherà AD e restituirà tutti i gruppi in un dominio utilizzando il parametro Filter. Il parametro Filter è obbligatorio. Esiste per limitare i gruppi restituiti in base a vari criteri.

Ad esempio, per trovare tutti i gruppi senza considerare alcun criterio, utilizzare Get-ADGroup e specificare un carattere jolly (asterisco) per il parametro Filter. Potete vedere un esempio di seguito. Scorrere tutti questi gruppi potrebbe richiedere del tempo se avete centinaia o anche migliaia nel vostro dominio.

Get-ADGroup -Filter *

Se avete bisogno di trovare un singolo gruppo, potete utilizzare il parametro Identity.

Il parametro Identity è un parametro comune tra tutti i cmdlet di PowerShell di Active Directory. Vi consente di limitare la vostra query a un singolo oggetto AD. Ad esempio, se avete bisogno di verificare se esiste un gruppo chiamato HR, potete scoprirlo eseguendo il comando di seguito.

Get-ADGroup -Identity 'HR'

Ottenere i membri del gruppo AD con Get-AdGroupMember

Utilizzare PowerShell per elencare i membri di un gruppo AD richiede il cmdlet Get-ADGroupMember. Questo cmdlet restituisce oggetti utente, gruppo e computer all’interno di un gruppo specifico. Forse hai bisogno di trovare tutti i membri del gruppo Amministratori. Nel suo formato più semplice, useresti semplicemente il parametro Identity specificando il nome del gruppo come segue.

Get-ADGroupMember -Identity 'Administrators'

Nota che Get-AdGroupMember restituisce solo l’appartenenza a gruppi per utenti, gruppi e computer. Non restituirà altri oggetti AD come i contatti.

Enumerazione dei membri del gruppo all’interno dei membri del gruppo

Come forse sai, i gruppi AD possono contenere non solo account utente, ma anche altri gruppi, chiamati annidamento. Quando un gruppo è annidato all’interno di un altro gruppo, i membri di quello gruppo ereditano le stesse autorizzazioni assegnate al gruppo principale.

Per impostazione predefinita, il cmdlet PowerShell Get-AdGroupMember non restituisce i membri dei gruppi annidati. Per risolvere questo problema, puoi utilizzare il parametro Recursive. Ad esempio, potresti trovare i membri di gruppi annidati all’interno del gruppo HR utilizzando il parametro Recursive come mostrato di seguito.

Get-ADGroupMember -Identity 'HR' -Recursive

Ottenere più gruppi/membri contemporaneamente

Se hai bisogno di interrogare AD per molti gruppi diversi o membri di gruppi contemporaneamente, puoi farlo anche usando un ciclo PowerShell foreach. Un ciclo foreach esegue un comando o un codice per ogni elemento in una raccolta. In questo caso, quella raccolta sarà una lista di nomi di gruppo.

Forse hai bisogno di trovare tutti i membri del gruppo HR, Contabilità e IT. Per farlo, dovresti prima creare una raccolta o un array di questi nomi di gruppo. Nell’esempio sottostante viene definita questa raccolta come $groupNames. Quindi, per ogni nome in quella raccolta, esegui Get-ADGroupMember fornendo il nome di ogni gruppo al parametro Identity.

$groupNames = 'HR','Accounting','IT'
foreach ($group in $groupNames) {
    Get-ADGroupMember -Identity $group
}

Potresti anche utilizzare il cmdlet ForEach-Object per iterare sui gruppi.

Utilizzo di credenziali alternative

Come molti altri cmdlet di PowerShell, i cmdlet dei gruppi AD hanno un parametro Credential. Per impostazione predefinita, ogni volta che esegui un cmdlet dei gruppi AD, vengono utilizzate le tue credenziali di accesso per interrogare Active Directory. Questo comportamento richiede di essere su un computer connesso al dominio e connesso come utente di Active Directory che ha le autorizzazioni necessarie.

Ma cosa succede se sei su un computer di gruppo di lavoro o è necessario autenticarsi ad AD come utente diverso? In tal caso, è possibile utilizzare il parametro Credential. Questo parametro consente di specificare un nome utente e una password da utilizzare per l’autenticazione.

Ad esempio, supponiamo che il tuo account utente non abbia i diritti per eseguire un’operazione su AD. Hai un account di servizio con diritti aggiuntivi. Puoi essere connesso come utente standard e autenticarti con l’account di servizio come mostrato di seguito.

Il cmdlet Get-Credential richiede un nome utente/password per creare un credenziale. Questa credenziale viene quindi passata al cmdlet Get-AdGroup per l’autenticazione.

Get-ADGroup -Identity 'HR' -Credential (Get-Credential)

Il parametro Credential è onnipresente in PowerShell per fornire credenziali di autenticazione. Per ulteriori informazioni, leggi Utilizzo del cmdlet PowerShell Get-Credential e tutte le cose relative alle credenziali.

Ottieni i membri del gruppo con Get-ADGroup?

Può sembrare controintuitivo, ma è possibile ottenere i membri di un gruppo anche con il cmdlet Get-ADGroup.

Risulta che Get-ADGroup restituisce una proprietà per ogni gruppo chiamata members. Questa è una collezione di oggetti AD che sono membri di un gruppo.

Ad esempio, per trovare i membri del gruppo HR senza utilizzare Get-ADGroupMember, è possibile fare qualcosa del genere:

Get-ADGroup -Identity 'HR' -Properties members

Perché utilizzare questo metodo rispetto agli altri? La differenza principale è che la proprietà members contiene tutti i tipi di oggetti AD – non solo utenti, computer e altri gruppi.

Forse hai contatti all’interno di vari gruppi. Quando esegui Get-ADGroupMember, quei contatti non verranno visualizzati. Ma se dici a Get-ADGroup di restituire tutti i membri di quel gruppo insieme all’espansione di quella collezione come mostrato di seguito, vedrai i contatti.

Get-ADGroup -Identity 'HR' -Properties members | Select-Object -ExpandProperty members

Trovare attributi AD specifici

Nella sezione di base sopra, hai semplicemente restituito tutti i gruppi e i membri dei gruppi. Le informazioni restituite per ogni gruppo e membro del gruppo sono solo una parte delle attributi AD associate a ciascun tipo di oggetto.

Forse vuoi vedere l’indirizzo email di un account utente, la data dell’ultimo accesso o un altro attributo AD associato? Per fare questo, dovrai essere creativo.

Forse sei riuscito a trovare tutti i membri del gruppo HR ma hai bisogno anche di vedere l’indirizzo email di ogni account utente?

$groupMembers = (Get-ADGroup -Identity 'HR' -Properties members).members
$groupMembers | Select-Object -Property Name, @{Name='Member';exp={Get-AdUser -Identity $_.Name -Properties emailAddress,lastlogonDate}}

Filtrare i risultati

Fino a questo punto, hai trovato tutti i gruppi e i membri del gruppo, ma in un ambiente di lavoro quotidiano, raramente avrai bisogno di farlo. Probabilmente avrai bisogno di trovare solo un numero limitato di ogni elemento. I cmdlet dei gruppi AD offrono alcuni modi per gestire questo.

Il parametro Filter

Come accennato in precedenza, entrambi i cmdlet hanno il parametro Filter. Questo parametro ti consente di limitare ciò che viene restituito in molti modi diversi al di fuori del campo di questo articolo.

Utilizzando il parametro Filtro, è possibile limitare i risultati in base a qualsiasi attributo AD, come il nome, il tipo di gruppo, l’indirizzo email, l’ultimo accesso per gli utenti, ecc.

Ad esempio, forse desideri trovare solo gruppi di sicurezza. In tal caso, specificheresti un attributo GroupCategory e imposti una condizione per assicurare che vengano restituiti solo gruppi di Sicurezza.

Get-ADGroup -Filter 'GroupCategory -eq "Security"'

Forse desideri trovare tutti i gruppi di sicurezza, ma che non siano gruppi locali del dominio. Aggiungeresti quindi un’altra condizione (questa volta utilizzando l’operatore -ne) per evitare che vengano restituiti gruppi locali del dominio.

Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'

Se desideri imparare come creare filtri di query, assicurati di dare un’occhiata a Learning Active Directory and LDAP Filters in PowerShell.

Limitare i risultati dei gruppi per unità organizzative (OU)

Forse hai vari gruppi nidificati in OU. Non desideri necessariamente trovare tutti i gruppi, ma solo i gruppi in una specifica OU. In tal caso, puoi utilizzare il parametro SearchBase.

Il parametro SearchBase ti consente di specificare il nome distinto (DN) di un’OU per iniziare a cercare gruppi. Ad esempio, forse hai un’OU chiamata Locations alla radice del tuo dominio. Nell’OU Locations, hai creato un’OU per ogni posizione come Austin, NYC e Los Angeles. Stai cercando solo gruppi nell’OU NYC e hai bisogno di limitare la visualizzazione degli altri.

Di seguito è mostrata un esempio di struttura OU AD. Nota che esistono altri gruppi al di fuori delle OU Locations.

company.local
- Locations
  - Austin
  - NYC
    - Group 1
    - Group 2
  - Los Angeles
- Computers
  - Group 3
  - Group 4
- Service Accounts

Forse è necessario trovare tutti i gruppi AD che si trovano solo nell’OU di NYC. Per limitare la query, utilizzare il parametro SearchBase fornendo il DN come mostrato di seguito. Vengono restituiti tutti i gruppi all’interno dell’OU di Locations.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,OU=NYC,DC=company,DC=pri'

Ma ora è necessario trovare tutti i gruppi in tutti gli OU sotto l’OU di Locations. Get-ADGroup restituisce solo i gruppi nell’OU di Locations stessa, non negli OU figli.

Per restituire i gruppi all’interno degli OU figli, è necessario utilizzare il parametro SearchScope. Questo parametro è simile al parametro Recursive in quanto esamina anche gli oggetti figlio.

Ad esempio, per trovare tutti i gruppi in qualsiasi OU sotto l’OU di Locations, specificare Subtree o 2. Questo valore per il parametro SearchScope indica a Get-ADGroup di cercare ricorsivamente in tutti gli OU figli, nipoti e così via.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2

Per una panoramica completa delle opzioni del parametro SearchScope, fare riferimento alla documentazione di Get-ADGroup.

Esportazione di gruppi AD e membri

Ora finalmente sai come interrogare e restituire i gruppi e i membri di gruppo necessari. Tutte queste informazioni vengono inviate alla console di PowerShell. Ma ora è necessario ottenere queste informazioni in un file CSV o in un foglio di lavoro di Excel.

L’unica cosa che devi fare ora è inviare tutte queste informazioni a un file.

Esportazione in un file CSV

Un formato popolare per esportare informazioni AD è un CSV. PowerShell dispone di un comodo cmdlet che consente di creare facilmente file CSV dall’output di PowerShell chiamato Export-Csv.

È possibile creare un file CSV da qualsiasi comando trattato in questo articolo tramite il reindirizzamento a Export-Csv. Utilizzando l’esempio seguente, verrà reindirizzato tutto l’output che Get-AdGroup avrebbe restituito alla console, invece in un file CSV.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Csv -Path 'departmental_groups.csv' -NoTypeInformation

Per ulteriori informazioni su questo utile cmdlet, consulta Export-Csv: il modo di PowerShell per trattare i file CSV come cittadini di prima classe.

È anche possibile esportare facilmente i risultati in CSV tramite il cmdlet Get-AdGroupMember.

Esportazione in Excel

PowerShell non ha un modo nativo per esportare le informazioni in Excel. Ma è possibile scaricare gratuitamente il modulo della community chiamato ImportExcel. Questo modulo porta direttamente le capacità di esportazione simili a CSV nei fogli di lavoro di Excel. Per installare il modulo di PowerShell, esegui Install-Module ImportExcel -Scope CurrentUser.

Utilizzando l’esempio sopra, invece di un file CSV, se avessi bisogno di esportare i gruppi in un foglio di lavoro di Excel, useresti il cmdlet Export-Excel come mostrato di seguito.

Trova password fuoriuscite e non sicure nel tuo Active Directory controllando la lista delle password del NCSC.

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Excel -Path 'departmental_groups.csv'

Il modulo ImportExcel ha molte funzionalità per lavorare con Excel. Se hai bisogno di un foglio di lavoro più sofisticato, probabilmente ha una funzione adatta a te.

Per ulteriori informazioni sull’utilizzo del modulo ImportExcel, leggi questo articolo. Fornisce un’ottima introduzione a alcuni casi d’uso comuni che può gestire.

Gestisci e genera report su Active Directory, Exchange e Microsoft 365 con ManageEngine ADManager Plus. Scarica la versione di prova gratuita!

Conclusioni

Utilizzando solo due cmdlet di PowerShell, puoi fare praticamente tutto con i gruppi di AD. Questo articolo è solo un’introduzione alle funzionalità messe a tua disposizione. Utilizza le conoscenze acquisite qui, segui alcuni dei link per approfondire gli argomenti nell’articolo e scopri cosa puoi costruire!

Source:
https://adamtheautomator.com/get-adgroupmember/