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.