HOWTO · PowerShell
Obtener la pertenencia a todos los grupos de un usuario mediante PowerShell
Compare cuatro formas de enumerar las pertenencias a grupos de Active Directory de un usuario con PowerShell, incluidos sus requisitos previos y el alcance de sus resultados.
En esta página
Para enumerar las pertenencias de un usuario en Active Directory, elija entre el comando heredado net, ADSI, DirectorySearcher o el módulo de Active Directory. Los tres primeros usan los servicios de directorio de Windows sin necesidad de instalar ese módulo; el cmdlet es la opción más directa cuando el módulo está disponible. Estos métodos requieren conexión con un controlador de dominio y una cuenta con permiso para leer el directorio. En este contexto, «todas» se refiere a las pertenencias que devuelve cada consulta: el atributo memberOf del directorio y estos ejemplos muestran vínculos directos con grupos, no una expansión completa de las pertenencias transitivas. Tampoco incluyen necesariamente el grupo principal del usuario.
Obtener la pertenencia a grupos de un usuario con los comandos heredados net
Ejecute net user /domain para solicitar al dominio la información de la cuenta con la que inició sesión. El resultado incluye sus pertenencias a grupos globales del dominio. Para consultar otra cuenta del dominio, indique su nombre de usuario: net user username /domain.
Se trata de una herramienta de línea de comandos heredada que PowerShell puede ejecutar directamente; no es un alias de PowerShell. Su salida está formateada para mostrarse en pantalla, así que use una consulta de Active Directory si necesita objetos estructurados o quiere procesar nombres de grupos en un script. Este comando devuelve información del dominio, no la pertenencia del usuario a grupos locales del equipo.
Obtener la pertenencia a grupos de un usuario con ADSI
ADSI es una interfaz de servicios de directorio de Windows disponible mediante el tipo [adsisearcher] de PowerShell. Esta consulta usa el nombre de la cuenta con la que inició sesión y devuelve sus valores de memberOf como nombres distinguidos. En una sesión de PowerShell conectada a un dominio, ejecute $searcher = [adsisearcher]"(samAccountName=$($env:USERNAME))"; $result = $searcher.FindOne(); if ($null -ne $result) { $result.Properties.memberof }.
Cada valor identifica un grupo mediante su nombre distinguido de LDAP, incluida su ruta organizativa. El filtro busca la cuenta cuyo nombre aparece en $env:USERNAME; no permite seleccionar otro usuario. memberOf representa vínculos directos y no enumera el grupo principal. Este método no requiere instalar un módulo de PowerShell aparte, pero sí necesita conexión con el directorio y permiso para leer la cuenta. La consulta depende de que el entorno pueda resolver y buscar en Active Directory; este artículo no proporciona resultados de ejecución en un dominio que permitan afirmar lo contrario.
Para mostrar la parte del nombre común de los nombres distinguidos de ejemplo, aplique una expresión regular a las cadenas devueltas:
$memberOf = @(
"CN=Finance,OU=Groups,DC=example,DC=com",
"CN=Engineering,OU=Groups,DC=example,DC=com"
)
$memberOf -replace '^CN=([^,]+).+$', '$1'
Finance
Engineering
Esta transformación elimina la ruta LDAP de cada cadena proporcionada; no ejecuta una consulta al directorio. La expresión regular presupone que el nombre común no contiene una coma escapada.
Obtener la pertenencia a grupos de un usuario con un objeto nuevo
DirectorySearcher ofrece otra forma integrada de buscar una cuenta por nombre. Este ejemplo solo acepta un sAMAccountName ASCII compuesto por letras, dígitos, puntos, guiones bajos o guiones, con un máximo de 20 caracteres. Rechace cualquier otra entrada antes de crear el filtro LDAP: if ($username -notmatch '^[A-Za-z0-9._-]{1,20}$') { throw 'Use a valid account name.' }. Después de validarla, ejecute $searcher = New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$username))"); $result = $searcher.FindOne(); if ($null -ne $result) { $result.Properties.memberof }. El conjunto restringido de caracteres impide que el valor proporcionado añada sintaxis al filtro LDAP; si el directorio permite nombres de cuenta que no pertenecen a este conjunto, aplique el escape de filtros LDAP.
Los valores devueltos son nombres distinguidos de LDAP, no solo nombres de grupos. Sustituya user01 por el nombre de inicio de sesión de la cuenta que quiera consultar. Al igual que el ejemplo de ADSI, este método lee el atributo memberOf y, por tanto, no expande las pertenencias anidadas ni incluye el grupo principal. Requiere acceso a un directorio de dominio, pero no instalar un módulo aparte.
Obtener la pertenencia a grupos de un usuario con el módulo de Active Directory
El módulo de Active Directory incluye cmdlets diseñados para administrar directorios. Debe estar disponible en el equipo; Install-Module por sí solo no instala este módulo de Windows. Instale RSAT siguiendo las instrucciones de Microsoft correspondientes a la versión de Windows que utilice. Este artículo no establece comandos de RSAT específicos por versión ni compatibilidad, por lo que aquí no se incluye ninguno.
Instalar el módulo de Active Directory
Después de instalar el componente de RSAT correspondiente, importe el módulo en la sesión de PowerShell con Import-Module -Name ActiveDirectory.
Si el módulo no está disponible, el comando de importación no podrá cargarlo. Los pasos de instalación varían según la versión de Windows; consulte las instrucciones actuales de Microsoft para esa versión de RSAT en lugar de reutilizar un comando de otra versión.
Usar el cmdlet Get-ADPrincipalGroupMembership
Pase el nombre de cuenta de un usuario a Get-ADPrincipalGroupMembership y, para mostrar los nombres de los grupos de forma concisa, selecciónelos con Get-ADPrincipalGroupMembership -Identity "user01" | Select-Object -ExpandProperty Name.
Sustituya user01 por la identidad que quiera consultar. El cmdlet devuelve objetos de grupo asociados a esa entidad; al seleccionar Name, muestra sus nombres en vez de los nombres distinguidos de LDAP. El comando requiere el módulo de Active Directory, una conexión adecuada con el directorio y permiso de lectura. Estos ejemplos no cuentan con evidencia de ejecución en un entorno de dominio de Windows, por lo que la salida y el comportamiento que dependen del dominio no se presentan como probados.