Per trovare oggetti specifici in Active Directory è possibile usare diversi meccanismi di filtro in PowerShell. I parametri principali sono -Filter, -LDAPFilter, -SearchBase e -SearchScope, applicabili ai cmdlet Get-ADUser, Get-ADGroup, Get-ADComputer e Get-ADObject.
Sintassi dei comandi
Filtrare utenti con -Filter
# Utenti di un determinato dipartimento
Get-ADUser -Filter {Department -eq "IT"} -Properties Department
# Utenti con account disabilitato
Get-ADUser -Filter {Enabled -eq $false}
# Utenti con account che scade entro 30 giorni
$data = (Get-Date).AddDays(30)
Get-ADUser -Filter {AccountExpirationDate -lt $data -and AccountExpirationDate -ne "00/00/0000 00:00:00"} -Properties AccountExpirationDateFiltrare con -LDAPFilter
# Utenti con email impostata
Get-ADUser -LDAPFilter "(mail=*)"
# Utenti membri di un gruppo specifico
Get-ADUser -LDAPFilter "(memberOf=CN=GRP_IT,OU=Gruppi,DC=dominio,DC=local)"
# Account mai utilizzati (lastLogon non impostato)
Get-ADUser -LDAPFilter "(!lastLogon=*)"-LDAPFilter permette di usare la sintassi LDAP nativa, utile per query più complesse o non supportate da -Filter.
Limitare la ricerca a una OU con -SearchBase
# Cercare solo dentro una OU specifica
Get-ADUser -Filter * -SearchBase "OU=Utenti,DC=dominio,DC=local"Controllare la profondità con -SearchScope
# Base: solo l'oggetto indicato in SearchBase
Get-ADUser -Filter * -SearchBase "OU=Utenti,DC=dominio,DC=local" -SearchScope Base
# OneLevel: solo i figli diretti (non ricorsivo)
Get-ADUser -Filter * -SearchBase "OU=Utenti,DC=dominio,DC=local" -SearchScope OneLevel
# Subtree: tutta la struttura sotto (default)
Get-ADUser -Filter * -SearchBase "OU=Utenti,DC=dominio,DC=local" -SearchScope SubtreePer impostazione predefinita i cmdlet AD restituiscono solo un sottoinsieme di attributi. È possibile richiederne altri specificando l’opzione -Properties
# Proprietà specifiche
Get-ADUser -Filter * -Properties EmailAddress, Department, LastLogonDate |
Select-Object Name, EmailAddress, Department, LastLogonDate
# Tutte le proprietà disponibili
Get-ADUser -Identity "mario.rossi" -Properties *Affinare i risultati con Where-Object
# Utenti che non accedono da più di 90 giorni
$soglia = (Get-Date).AddDays(-90)
Get-ADUser -Filter {Enabled -eq $true} -Properties LastLogonDate |
Where-Object { $_.LastLogonDate -lt $soglia -or $_.LastLogonDate -eq $null }Esempio di utilizzo
Scenario: trovare tutti gli utenti abilitati del dipartimento IT che non accedono da più di 60 giorni, cercando solo all’interno di una OU specifica.
$soglia = (Get-Date).AddDays(-60)
Get-ADUser -Filter {Department -eq "IT" -and Enabled -eq $true} `
-SearchBase "OU=Utenti,DC=dominio,DC=local" `
-SearchScope Subtree `
-Properties Department, LastLogonDate |
Where-Object { $_.LastLogonDate -lt $soglia -or $_.LastLogonDate -eq $null } |
Select-Object Name, SamAccountName, LastLogonDate |
Sort-Object LastLogonDateOutput atteso:
Name SamAccountName LastLogonDate
---- -------------- -------------
Marco Verdi marco.verdi
Mario Rossi mario.rossi 2026-02-10 08:45:00Gli utenti senza LastLogonDate non hanno mai effettuato l’accesso o il valore non è stato ancora replicato tra i Domain Controller.