Ricerca di utenti AD membri o non membri di gruppi il cui nome inizia per un prefisso
Talvolta può essere necessario eseguire delle verifiche in AD per identificare quali utenti appartengono o meno a determinati gruppi.
Nel caso si sia utilizzata una nomenclatura per i gruppi può presentarsi la necessità di identificare quali utenti appartengono o non appartengono a determinati gruppi il cui nome inizia per un prefisso.
Per realizzare questo tipo di query è ovviamente necessario definire una clausola che preveda l’uso di wildchar sull’attributo memberof dell’oggetto User, a riguardo si veda User Security Attributes.
Sebbene tramite le query LDAP sia possibile eseguire ricerche molto granulari tramite filtri che prevedono una buona duttilità (a riguardo si veda Creating a Query Filter), non è possibile eseguire una query LDAP che preveda l’uso di wildchar su attributi DN come memberof, a riguardo si veda l’articolo Active Directory: LDAP Syntax Filters:
“The wildcard character “*” is allowed, except when the <AD Attribute> is a DN attribute.”
Sebbene tale query non sia realizzabile in LADP è possibile ovviare utilizzando una questy PowerShell.
Di seguito, a esempio, una query PowerShell per trovare gli utenti abilitati nella OU “Utenti Amministrativi” nel dominio contoso.com che appartengo ad uno più gruppo con il prefisso “Ufficio-“:
Get-ADUser -SearchBase “OU=Utenti Amministrativi,DC=contoso,DC=com” -Filter {Enabled -eq $TRUE} -Properties Description, physicalDeliveryOfficeName, MemberOf | Where-Object {$_.MemberOf -Like (“*=Ufficio-*”)} | Select Name, SamAccountName, Description, physicalDeliveryOfficeName
Di seguito, a esempio, una query PowerShell per trovare gli utenti abilitati nella OU “Utenti Amministrativi” nel dominio contoso.com che non appartengo ad uno più gruppo con il prefisso “Ufficio-“:
Get-ADUser -SearchBase “OU=Utenti Amministrativi,DC=contoso,DC=com” -Filter {Enabled -eq $TRUE} -Properties Description, physicalDeliveryOfficeName, MemberOf | Where-Object {[string]$_.MemberOf -NotLike (“*=Ufficio-*”)} | Select Name, SamAccountName, Description, physicalDeliveryOfficeName
Per realizzare la query che esclude gli utenti che appartengo ad uno più gruppo con il prefisso “Ufficio-” è necessario trattare nel filtro l’attributo MemberOf come una stringa:
{[string]$_.MemberOf -NotLike (“*=Ufficio-*“)}
E’ possibile trovare esempi di queste, ed altre, query PowerShell in AD a questo link PowerShell/Active Directory.md at master · ermannog/PowerShell (github.com) del mio repository su GitHub.
Ciao, contribuisco con un esempio penso altrettanto utile. La mia directory ha oramai qualche migliaio di utenti, suddivisi su diverse OU, quindi spesso non si sa a colpo quale sia il suo username, ma si sa ad esempio che è nella OU della città di appartenenza.
Con una ricerca del tipo:
Get-ADUser -filter {sn -like ‘COGNOME’} | Select-Object DistinguishedName, SamAccountName, UserPrincipalName, Enabled | Sort-Object DistinguishedName | Format-Table
Tirerà fuori una tabella con tutti gli user con il cognome inserito. Se si vuole una ricerca più larga si può utilizzare
Get-ADUser -filter {sn -like ‘*COGNOME’*} | Select-Object DistinguishedName, SamAccountName, UserPrincipalName, Enabled | Sort-Object DistinguishedName | Format-Table
per esempio:
Get-ADUser -filter {sn -like ‘*albe*’} | Select-Object DistinguishedName, SamAccountName, UserPrincipalName, Enabled | Sort-Object DistinguishedName | Format-Table
Tirerà fuori utenti il quale cognome è Albero, oppure ad esempio Champalbert.
Ciao Fabrizio,
grazie della gradita e utile condivisione!