Cómo usar Get-ADGroup en PowerShell

¿Necesita obtener todos los grupos en su Active Directory o simplemente necesita encontrar la ubicación del grupo que se esconde en algún lugar de una unidad organizativa?

En PowerShell, podemos usar el Get-ADGroup cmdlet para extraer rápidamente toda la información sobre nuestros grupos del AD.

Los grupos en su Active Directory realmente pueden ayudarlo a mantener su AD organizado.

Le permite asignar permisos o licencias a múltiples usuarios que son miembros de un solo grupo.

Cuando, por ejemplo, la administración necesite acceso a PowerBi, solo tendrá que asignar la licencia al Grupo PowerBi.

En este artículo, veremos cómo usar el cmdlet Get-ADGroup en PowerShell.

Al final del artículo, también encontrarás un completo script que exporta todos los grupos de tu Active Directory a CSV.

Requisitos

Antes de que podamos usar el cmdlet Get-ADGroup, deberá tener instalado el módulo de Active Directory en PowerShell.

Está instalado de forma predeterminada en el controlador de dominio, pero en Windows 10 u 11 deberá instalarlo.

Ejecute el siguiente comando en PowerShell para instalar el módulo:

Add-WindowsCapability –online –Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”

Búsqueda de grupos con Get ADGroup en PowerShell

El cmdlet Get Get-ADGroup nos permite encontrar todos los objetos de grupo en Active Directory y extraer información de ellos.

La ventaja de este cmdlet es que podemos usar diferentes parámetros para encontrar los grupos en nuestro AD.

Podemos utilizar los siguientes parámetros a la hora de encontrar los grupos:

  • Identidad – Encuentre un grupo basado en el nombre del grupo. Esto devolverá un solo grupo.
  • Filtrar – Recuperar varios grupos en función de una consulta de filtro
  • Filtro LDAP – Use una cadena de consulta LDAP para filtrar los objetos de grupo
  • Base de búsqueda – Especifique la ruta de Active Directory (OU) para buscar en
  • Ámbito de búsqueda – Especifique qué tan profundo desea buscar (nivel base, un nivel o subárbol completo)

La forma más común de obtener un grupo es usando el parámetro de identidad. Pero para esto, necesitará saber el nombre del grupo.

Devolverá un solo grupo con las propiedades más importantes:

Get-ADGroup -identity SG_M365_E5
obtener-grupo-de-anuncios
Get-ADGroup

Como puede ver, solo se devuelven las propiedades básicas del grupo. Podemos usar el -properties parámetro para recuperar todas las propiedades del grupo.

Explicaré más sobre cómo recuperar diferentes propiedades más adelante, pero si desea ver toda la información del grupo, use el siguiente comando:

Get-ADGroup -identity SG_M365_E5 -properties *

Uso del parámetro de filtro

Cuando está buscando un grupo en particular y no sabe el nombre exacto, puede usar el parámetro de filtro.

Esto nos permite buscar en todos los grupos según una parte del nombre u otra propiedad.

El parámetro de filtro también se puede usar para recuperar varios grupos o todos los grupos de Active Directory.

Echemos un vistazo a un par de ejemplos de uso común para encontrar grupos:

Para encontrar un grupo basado en una parte del nombre, puede usar el -like filtrar:

Get-ADGroup -Filter "Name -like 'SG_*'" | ft

Esto devolverá todos los grupos donde el nombre comienza con SG_.

filtrar obtener grupo de anuncios
Filtro Get-ADGroup

Para obtener todos los grupos de seguridad, podemos filtrar los grupos en el valor de Categoría de grupo:

Get-ADGroup -Filter "GroupCategory -eq 'Security'" | ft

Si ejecuta el comando anterior, notará que también devuelve todos los grupos integrados. La mayoría de las veces no los necesita en sus exportaciones. Así que filtrémoslos:

Get-ADGroup -Filter "GroupCategory -eq 'Security' -and GroupScope -ne 'Domainlocal'" | ft

Ahora todavía te quedan algunos grupos integrados. Estos grupos se encuentran en el contenedor de unidades organizativas Usuarios predeterminado en Active Directory.

También hay dos opciones para filtrarlos, puede especificar la base de búsqueda, ver el siguiente capítulo o filtrar todos los resultados donde el DistinguishedName termina con OU=Users,DC=Domain,DC=local.

# Replace DC=Domain,DC=Local with your AD domain name
Get-ADGroup -Filter "GroupCategory -eq 'Security' -and GroupScope -ne 'Domainlocal'" |  Where-Object { $_.DistinguishedName -notlike "*,CN=user,DC=Domain,DC=local" } | ft

También puede usar el siguiente cmdlet para obtener la ruta de DN de su dominio:

Get-ADDomain | Select -ExpandProperty DistinguishedName

Obtener la base de búsqueda de ADGroup

Cuando desee recuperar varios grupos de Active Directory, es posible que desee reducir la búsqueda.

Como se mencionó en el capítulo anterior, cuando enumera todos los grupos, también se enumeran todos los grupos integrados.

La mayoría de las veces, tiene sus grupos organizados en una unidad organizativa separada, por lo que podemos usar el parámetro SearchBase (distinguishedName) para especificar la unidad organizativa donde queremos buscar.

El nombre distinguido es la ruta completa de la unidad organizativa, que escribimos desde la unidad organizativa hacia arriba en el árbol hasta el nombre de dominio de AD.

Tome la siguiente estructura de AD, queremos obtener todas las computadoras del sitio de Amsterdam:

estructura de nombre distinguido directorio activo
Ruta de la base de búsqueda

La cadena base de búsqueda, en este caso, sería:

    1              2           3         4        5
"OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"

Para obtener, por ejemplo, todos los grupos de OU Amsterdam, podemos usar la siguiente ruta de SearchBase:

Get-ADGroup -Filter * -SearchBase "OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | ft

Uso de SearchScope

El parámetro -SearchBase devolverá todas las computadoras de las unidades organizativas especificadas y anidadas.

Al usar el parámetro -SearchScope, podemos especificar qué tan profundo o no queremos buscar a través del árbol de Active Directory.

Por ejemplo, queremos obtener todos los grupos del sitio de Amsterdam, excepto los grupos de prueba:

grupos del directorio activo
Grupos de directorio activo

Para obtener todos los grupos de Amsterdam, excepto los grupos en la «prueba» de la unidad organizativa secundaria, podemos limitar el base de búsqueda solo al nivel actual, usando el ámbito de búsqueda parámetro:

$searchBase = "OU=Groups,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"

Get-ADGroup -Filter * -SearchBase $searchBase -SearchScope OneLevel

Obtener administrador de grupo

Los usuarios pueden administrar los grupos de Active Directory.

De esta manera, un usuario puede agregar o eliminar miembros del grupo, lo que es realmente útil para grupos de distribución o cuando tiene muchas mutaciones en un grupo.

Para obtener el administrador de un grupo podemos usar el cmdlet Get-ADGroup y la propiedad managedBy:

# You can also use a filter or searchbase to get the manager of multiple groups
Get-ADGroup -Identity management -Properties managedby | select name, managedBy | ft
administrador de grupos de anuncios
Obtener la propiedad ManagedBy

Como puede ver en la captura de pantalla anterior, la propiedad gestionada por devuelve el nombre distinguido del usuario.

Si solo desea el nombre, puede canalizar el cmdlet Get-ADUser detrás de él:

Get-ADGroup -Identity management -Properties ManagedBy | % {Get-ADUser -Identity $_.managedBy} | select name

Obtener membresía grupal de grupos

Los grupos también pueden ser miembros de otros grupos, esto es especialmente útil cuando desea asignar licencias u otros permisos en función de la pertenencia a un grupo.

Por ejemplo, todos los administradores deben tener acceso a PowerBi.

Ahora puede agregar cada administrador individualmente al grupo SG_M365_PowerBi, pero también puede hacer que el grupo Administración sea miembro de SG_M365_PowerBi.

Para enumerar todos los grupos de los que un grupo es miembro, puede usar la propiedad memberOf:

Get-ADGroup -Identity management -Properties memberOf | select name,memberOf
membresía de grupo

Pero como puede ver en la captura de pantalla anterior, este no es realmente un nombre legible.

Al igual que con el administrador de grupos, necesitaremos buscar cada grupo para obtener el nombre.

Por suerte hay otra opción, podemos usar el Get-ADPrincipalGroupMembership cmdlet para obtener solo el nombre del grupo del que un grupo es miembro:

Get-ADPrincipalGroupMembership -identity management | ft
Obtener ADPrincipalGroupMembership
Obtener ADPrincipalGroupMembership

Exporte todos los grupos de AD a CSV con PowerShell

Si desea obtener una descripción general de todos los grupos en su Active Directory, exportar a CSV es un buen método.

Esto le permite revisar todos los grupos en Excel y enumerar todos los administradores de grupos o membresías, por ejemplo.

He escrito una guía completa sobre el cmdlet Export-CSV, pero también quiero darle un par de ejemplos útiles cuando trabaje con el cmdlet Get-ADGroup.

Para exportar simplemente todos los objetos del grupo AD, podemos usar el siguiente comando:

Get-ADGroup -filter * | Export-csv c:\temp\adgroups.csv -NoTypeInformation

Esto mostrará una lista de todos los grupos, incluido el integrado con solo las propiedades predeterminadas.

La mayoría de las veces no es realmente la información que necesita.

Complete Exportar grupos de AD a CSV Script

Creé un script de PowerShell que exportará todos los grupos de AD a CSV con las propiedades que se necesitan con más frecuencia.

Cuando ejecuta el script, especifica un par de opciones:

  • Especificar la base de búsqueda (OU), Active Directory completo predeterminado
  • Incluir o excluir grupos integrados (exclusión predeterminada)
  • Exportar archivo CSV de ruta (predeterminado ninguno, salida de consola)

El script obtendrá todos los grupos de Active Directory si no especifica la base de búsqueda (OU). También es posible especificar varias unidades organizativas:

.\Get-ADGroups.ps1 -searchBase "OU=groups,OU=Amsterdam,DC=LazyAdmin,DC=Local","OU=groups,OU=Oslo,DC=LazyAdmin,DC=Local" -csvpath c:\temp\computers.csv

Siga estos pasos para exportar los grupos de AD con el script de PowerShell:

  1. Descargar el script completo Exportar grupos de AD de
  2. Abrir PowerShell y navegue hasta el script
  3. Ejecute el script de exportación: Get-ADGroups.ps1

Cuando se complete, la secuencia de comandos abrirá automáticamente Excel para usted.

param(
  [Parameter(
    Mandatory = $false,
    HelpMessage = "Enter the searchbase between quotes or multiple separated with a comma"
    )]
  [string[]]$searchBase,

  [Parameter(
    Mandatory = $false,
    HelpMessage = "Include built-in groups or exclude"
  )]
  [ValidateSet("include", "exclude")]
  [string]$builtin = "exclude",

  [Parameter(
    Mandatory = $false,
    HelpMessage = "Enter path to save the CSV file"
  )]
  [string]$CSVpath
)

Function Get-Groups{
    <#
    .SYNOPSIS
      Get groups from the requested DN
    #>
    param(
      [Parameter(
        Mandatory = $true
      )]
      $dn
    )
    process{
      # Set the properties to retrieve
      $properties = @(
        'Name',
        'CanonicalName',
        'GroupCategory',
        'GroupScope',
        'ManagedBy',
        'MemberOf',
        'created',
        'whenChanged',
        'mail',
        'info',
        'description'
      )

      
      # Get all groups, or exclude the builtin groups
      # Get the computers
      switch ($builtin)
      {
        "include" {
          Get-ADGroup -filter * -searchBase $dn -Properties $properties | select $properties
        }
        "exclude" {
          $builtinUsers = "CN=users,$dn" 
          $filter = "GroupScope -ne 'Domainlocal'"
          Get-ADGroup -filter $filter -searchBase $dn -Properties $properties |  Where-Object { $_.DistinguishedName -notlike "*,$builtinUsers" } | select $properties
        }
      }
    }
}

Function Get-ADGroups {
  <#
    .SYNOPSIS
      Get all AD Groups
  #>
  process {
    Write-Host "Collecting groups" -ForegroundColor Cyan
    $groups = @()

    # Collect groups
    if ($searchBase) {
      # Get the requested groups
       foreach ($dn in $searchBase) {
         Write-Host "- Get groups in $dn" -ForegroundColor Cyan
         $groups += Get-Groups -dn $dn
       }
     }else{
       # Get distinguishedName of the domain
       $dn = Get-ADDomain | Select -ExpandProperty DistinguishedName
       Write-Host "- Get groups in $dn" -ForegroundColor Cyan
       $groups += Get-Groups -dn $dn
     }
 

    # Loop through all computers
    $groups | ForEach {
      $managedBy = ''
      $memberOf=""

      # If the group is managed, get the users name
      if ($null -ne $_.ManagedBy) {
        $managedBy = Get-ADUser -Identity $_.ManagedBy | select -ExpandProperty name
      }

      # If the group is member of other groups, get the group names
      if ($_.MemberOf.count -gt 0) {
        $memberOf = Get-ADPrincipalGroupMembership $_.name | select -ExpandProperty name
      }

      [pscustomobject]@{
        "Name" = $_.Name
        "CanonicalName" = $_.CanonicalName
        "GroupCategory" = $_.GroupCategory
        "GroupScope" = $_.GroupScope
        "Mail" = $_.Mail
        "Description" = $_.Description
        "Info" = $_.info
        "ManagedBy" = $managedBy
        "MemberOf" = ($memberOf | out-string).Trim()
        "Date created" = $_.created
        "Date changed" = $_.whenChanged
      }
    }
  }
}

If ($CSVpath) {
  # Get mailbox status
  Get-ADGroups | Export-CSV -Path $CSVpath -NoTypeInformation -Encoding UTF8
  if ((Get-Item $CSVpath).Length -gt 0) {
      Write-Host "Report finished and saved in $CSVpath" -ForegroundColor Green
      Invoke-Item $CSVpath
  } 
  else {
      Write-Host "Failed to create report" -ForegroundColor Red
  }
}
Else {
  Get-ADGroups
}

Terminando

El cmdlet Get-ADGroup es excelente cuando necesita obtener todos los grupos de Active Directory.

Con la ayuda de los filtros y/o el parámetro de la base de búsqueda, puede seleccionar rápidamente solo los grupos que necesita.

Si tiene alguna pregunta, simplemente deje un comentario a continuación.

Otros artículos relacionados

GUI de PowerShell - Cómo empezar

GUI de PowerShell – Cómo empezar

He creado muchos scripts de PowerShell durante los últimos años. Todo con un solo propósito para automatizar mi trabajo de ...
Leer Más
Cómo usar Start-Transcript en PowerShell

Cómo usar Start-Transcript en PowerShell

Cuando ejecute scripts de PowerShell automáticamente, necesitará una forma de registrar cualquier error o advertencia que ocurra. Una opción es ...
Leer Más
Get-ADComputer- Cómo encontrar y exportar computadoras AD PowerShell

Get-ADComputer- Cómo encontrar y exportar computadoras AD PowerShell

¿Necesita exportar todas las computadoras desde una unidad organizativa o buscar una computadora en su Active Directory? ¿O quieres contar ...
Leer Más
[PowerShell] Exportar el estado de MFA de los usuarios de Office 365

[PowerShell] Exportar el estado de MFA de los usuarios de Office 365

Uno de los informes que realmente extraño en el Centro de administración de Microsoft 365 es una descripción general clara ...
Leer Más
Cómo exportar a un archivo con PowerShell Out-File

Cómo exportar a un archivo con PowerShell Out-File

La salida de los comandos de PowerShell se muestra de forma predeterminada en el terminal. Pero en algunas situaciones, es ...
Leer Más
ADGroupMember: obtenga todos los usuarios en ADGroup con PowerShell

ADGroupMember: obtenga todos los usuarios en ADGroup con PowerShell

Los grupos de Active Directory le permiten asignar fácilmente permisos o software a sus usuarios. Pero, ¿cómo se obtienen todos ...
Leer Más

Deja un comentario