Obtener la pertenencia a todos los grupos de un usuario mediante PowerShell

  1. Obtenga la membresía de un grupo de usuarios con los comandos heredados net
  2. Obtenga una membresía de grupo de usuario con ADSI
  3. Obtenga la membresía de un grupo de usuarios con un nuevo objeto
  4. Obtenga una membresía de grupo de usuarios con el módulo de Active Directory
Obtener la pertenencia a todos los grupos de un usuario mediante PowerShell

En Windows PowerShell, hay muchas formas de obtener la lista de miembros de grupos de un usuario específico. Podemos usar comandos heredados, comandos nativos o extensiones para ejecutar dentro del entorno de secuencias de comandos de PowerShell.

Este artículo discutirá todos estos métodos uno por uno, sus ventajas y desventajas, y cómo se ejecutan correctamente.

Los siguientes comandos solo se ejecutarán correctamente si su computadora o servidor está unido al dominio. El uso del dominio predeterminado GRUPO DE TRABAJO dará como resultado un error de excepción.

Obtenga la membresía de un grupo de usuarios con los comandos heredados net

Podemos comenzar con un comando heredado que ha existido desde las primeras etapas del sistema operativo, al que llamamos los comandos net. Los comandos net generalmente se ejecutan en el símbolo del sistema y funcionan con Windows PowerShell a través de alias.

Los comandos net se usan típicamente para administrar la computadora local. Aún así, podemos usar el comando para obtener la membresía de un usuario específico para este propósito en particular usando la sintaxis a continuación.

net user /domain username

El uso de este método no solo devuelve grupos de dominio globales, sino también los grupos locales del usuario.

Una de las desventajas de este comando es que es menos flexible que los cmdlets más nuevos de Windows PowerShell. Además, no veremos nombres de grupos largos (aproximadamente 21 caracteres) correctamente cuando se exporten, ya que se truncarán en la línea de comandos.

Obtenga una membresía de grupo de usuario con ADSI

Según Microsoft, ADSI o las interfaces de servicio de Active Directory son interfaces COM integradas que se utilizan para acceder a los servicios de directorio. Dentro de la biblioteca ADSI se encuentra la clase [ADSISearcher] que podemos ejecutar en Windows PowerShell para consultar la pertenencia a un grupo de un usuario actual.

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof

Podemos mejorar esto agregando expresiones regulares para eliminar los caracteres LDAP innecesarios CN="groupname", que solo devolverán los nombres de grupo del usuario.

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof -replace '^CN=([^,]+).+$','$1'

Este método no necesitará ninguna instalación de módulo para ejecutarse, ya que viene integrado con la máquina. El único requisito que necesitará es una máquina unida a un dominio. Ejecutar la sintaxis anterior generará una excepción de error.

La única desventaja de esta sintaxis es que la consulta solo funcionará con un usuario que haya iniciado sesión actualmente. Significa que no puede apuntar a un usuario diferente mientras ejecuta la sintaxis cuando inicia sesión.

Obtenga la membresía de un grupo de usuarios con un nuevo objeto

Otro método para obtener la membresía de un grupo de usuarios es usar los servicios de directorio y crear un nuevo objeto. En este método, tampoco necesitamos instalar un módulo separado para que esto funcione.

Además, este método puede apuntar a un usuario específico dentro de su dominio, ya que consultará el controlador de dominio al que está conectado actualmente dentro de la red.

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:USERNAME)))")).FindOne().GetDirectoryEntry().memberOf

Si no desea consultar al usuario que inició sesión, puede reemplazar $env:USERNAME con el nombre de usuario exacto del usuario de destino.

$username = "user01"
(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($username)))")).FindOne().GetDirectoryEntry().memberOf

Este método generará caracteres LDAP innecesarios y generará la base de búsqueda de toda la unidad organizativa (OU) como el método anterior.

Obtenga una membresía de grupo de usuarios con el módulo de Active Directory

Podemos considerar que este es uno de los métodos más simples y cortos para obtener la membresía de un grupo de usuarios para este último método. La única condición para este método es instalar el módulo de Active Directory para importar los cmdlets de AD a nuestro entorno de secuencias de comandos.

Instalación del módulo de directorio activo

Por lo general, al ejecutar el cmdlet, Install-Module debe buscar el paquete desde un CDN remoto e instalarlo en su computadora. Aún así, con el módulo de Active Directory, debe instalar un paquete de requisitos previos para tener éxito. Este paquete de requisitos previos es lo que llamamos Herramientas de administración remota del servidor o RSAT.

Para instalar RSAT en su computadora o en el servidor, puede ejecutar los scripts de PowerShell a continuación.

Instalación de RSAT para Windows 10:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online

Instalación de RSAT para Windows Server (varias versiones de 2008 a 2016):

Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature

Al instalar la función RSAT en su máquina, también se instalará el módulo Active Directory para Windows PowerShell.

Uso del cmdlet Get-ADPrincipalGroupMembership

Una vez que se instala el módulo de Active Directory, ahora puede importar el módulo de Active Directory con la siguiente sintaxis.

Import-Module -Name ActiveDirectory

Una vez que se importa el módulo de Active Directory, ahora puede ejecutar los cmdlets de AD, y usaremos estos cmdlets extendidos específicos para obtener la lista de miembros del grupo de un usuario.

Para obtener la membresía del grupo de un usuario, usaremos el cmdlet Get-ADPrincipalGroupMembership. Este cmdlet devolverá todos los grupos de AD del usuario, equipo, grupo o cuenta de servicio. Además, dado que podemos dirigirnos a usuarios y objetos de grupo, este cmdlet también devolverá pertenencias a grupos anidados.

Ejecute la siguiente sintaxis para obtener la pertenencia al grupo del usuario. Asegúrese de que el módulo del directorio activo esté importado.

Get-ADPrincipalGroupMembership username | select name

La canalización de la propiedad name generará todos los miembros del grupo de usuarios.

Producción :

name
----
Domain Users
Domain Computers
Workstation Admins
Company Users
Company Developers
AutomatedProcessingTeam
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn