Adam the Automator (Español)

Un uso popular de PowerShell es trabajar con Active Directory Directory Services (AD). Hay tantas cosas que PowerShell puede hacer para ahorrar tiempo con los objetos de AD. El uso de PowerShell para obtener miembros y grupos de grupos de AD ahorra mucho tiempo.

Los grupos de Active Directory son una excelente manera de segmentar las cuentas de usuario. Los grupos permiten a los administradores definir el acceso a los recursos en muchos sistemas.

En este artículo, usemos PowerShell para obtener miembros del grupo AD y exportar miembros del grupo AD. Luego puede usar esta información para generar toneladas de informes interesantes.

Tabla de contenido

Requisitos previos

Si desea seguir este artículo, asegúrese de tener los siguientes requisitos listos para comenzar:

  • Trabajar en una computadora con Windows 10, unida a un dominio
  • Inició sesión con un usuario que puede leer grupos de AD y cuentas de usuario
  • Tener instalado el módulo PowerShell Active Directory

Aprender los conceptos básicos

Para consultar grupos de AD y miembros del grupo, tiene dos cmdlets de PowerShell a su disposición: Get-AdGroup y Get-AdGroupMember.

Get-ADGroup consulta un controlador de dominio y devuelve objetos de grupo de AD. Get-AdGroupMember busca dentro de cada grupo y devuelve todas las cuentas de usuario, grupos, contactos y otros objetos que existen en ese grupo.

Obtener grupos de AD

Para buscar grupos de AD con PowerShell, puede usar el cmdlet Get-ADGroup. Sin parámetros, Get-ADGroup consultará AD y devolverá todos los grupos de un dominio mediante el parámetro Filter. El parámetro Filter es obligatorio. Existe para limitar los grupos devueltos según varios criterios.

Por ejemplo, para buscar todos los grupos sin tener en cuenta ningún criterio, use Get-ADGroup y especifique un comodín ( asterisco) para el parámetro Filter. Puede ver un ejemplo a continuación. Desplazarse por todos estos grupos puede llevar un tiempo si tiene cientos o incluso miles en su dominio.

Si necesita encontrar un solo grupo, puede utilice el parámetro Identity.

El parámetro Identity es un parámetro común entre todos los cmdlets de PowerShell de Active Directory. Le permite limitar su consulta a un solo objeto AD. Por ejemplo, si necesita verificar si existe un grupo llamado HR, puede averiguarlo ejecutando el comando a continuación.

Cómo obtener miembros del grupo AD

El uso de PowerShell para enumerar los miembros del grupo de AD requiere el cmdlet Get-ADGroupMember. Este cmdlet incluye objetos de usuario, grupo y equipo en un grupo en particular. Quizás necesite encontrar a todos los miembros del grupo Administradores. En su forma más simple, simplemente usaría el parámetro Identity nuevamente especificando el nombre del grupo como se muestra a continuación.

Tenga en cuenta que Get-AdGroupMember solo devuelve membresía de grupo para usuarios, grupos y computadoras. No devolverá otros objetos AD como contactos.

Enumeración de miembros del grupo dentro de los miembros del grupo

Como sabrá, los grupos AD no solo puede contener cuentas de usuario, sino otros grupos también llamados anidamiento. Cuando un grupo está anidado dentro de otro grupo, los miembros de ese grupo heredan los mismos permisos asignados al grupo principal.

De forma predeterminada, el cmdlet Get-AdGroupMember de PowerShell hace no devolver miembros del grupo anidado. Para remediar eso, puede usar el parámetro Recursive. Por ejemplo, puede encontrar miembros de grupos anidados dentro del grupo de recursos humanos utilizando el parámetro Recursive como se muestra a continuación.

Obtener varios grupos / miembros a la vez

Si necesita consultar AD para muchos grupos o miembros de grupo diferentes a la vez, también puede hacerlo mediante un bucle foreach de PowerShell. Un bucle foreach ejecuta un comando o código para cada elemento de una colección. En este caso, esa colección será una lista de nombres de grupos.

Quizás necesite encontrar a todos los miembros del grupo en los grupos de recursos humanos, contabilidad e informática. Para hacerlo, primero debe crear una colección o matriz de estos nombres de grupos. El siguiente ejemplo define esta colección como $groupNames. Luego, para cada nombre de esa colección, ejecute Get-ADGroupMember proporcionando el nombre de cada grupo al parámetro Identity.

Alternativamente, podría usar el ForEach-Object cmdlet para recorrer grupos.

Uso de credenciales alternativas

Como muchos otros cmdlets de PowerShell, los cmdlets de grupo de AD tienen un Credential parámetro.De forma predeterminada, cada vez que ejecuta un cmdlet de grupo de AD, utiliza sus credenciales de inicio de sesión para consultar Active Directory. Este comportamiento dicta que debe estar en una computadora unida a un dominio que haya iniciado sesión como un usuario de Active Directory que tenga permiso.

Pero, ¿qué sucede si está en una computadora de grupo de trabajo o necesita autenticarse en AD como un usuario diferente? ¿usuario? En ese caso, puede utilizar el parámetro Credential. Este parámetro le permite especificar un nombre de usuario y una contraseña para usar para la autenticación.

Por ejemplo, tal vez su cuenta de usuario no tenga el derecho de realizar una tarea de AD. Tienes una cuenta de servicio con derechos adicionales. Puede iniciar sesión como usuario estándar y aún así autenticarse con la cuenta de servicio como se muestra a continuación.

El cmdlet Get-Credential solicita un nombre de usuario / contraseña para crear un credencial. Luego, esta credencial se pasa al Get-AdGroup cmdlet para la autenticación.

El parámetro Credential es ubicuo en PowerShell para proporcionar credenciales de autenticación. Para obtener más información, lea Uso del cmdlet Get-Credential de PowerShell y todas las credenciales.

¿Obtener miembros del grupo con Get-ADGroup?

Puede parecer contradictorio, pero también puede obtener miembros del grupo con el Get-ADGroup cmdlet.

Resulta que Get-ADGroup devuelve una propiedad para cada grupo llamada members. Se trata de una colección de objetos AD que son miembros de un grupo.

Por ejemplo, para buscar miembros del grupo en ese grupo de recursos humanos nuevamente sin usar Get-ADGroupMember, podría haz algo como esto:

¿Por qué usar este método sobre el otro? La principal diferencia es que las propiedades members contienen todos los tipos de objetos AD, no solo usuarios, computadoras y otros grupos.

Quizás tenga contactos dentro de varios grupos . Cuando ejecuta Get-ADGroupMember, esos contactos no aparecen. Pero si le dice a Get-ADGroup que devuelva todos los miembros de ese grupo junto con expandir esa colección como se muestra a continuación, verá los contactos.

Encontrar atributos específicos de AD

En la sección básica anterior, simplemente estaba devolviendo todos los grupos y miembros del grupo. La información devuelta para cada grupo y miembro del grupo es solo un subconjunto de los atributos de AD asociados con cada tipo de objeto.

Tal vez desee ver la dirección de correo electrónico de una cuenta de usuario, la última fecha de inicio de sesión u otro atributo de AD asociado ? Para hacer esto, deberá ser creativo.

¿Quizás pudo encontrar a todos los miembros del grupo en el grupo de recursos humanos, pero también necesita ver la dirección de correo electrónico de cada cuenta de usuario?

Filtrado de resultados

Hasta este punto, ha encontrado todos los grupos y miembros del grupo, pero en un entorno de trabajo diario, rara vez necesita hacer esto. Lo más probable es que solo necesites encontrar un número limitado de cada artículo. Los cmdlets del grupo de AD tienen varias formas de manejar esto.

El parámetro de filtro

Como se mencionó anteriormente, ambos cmdlets tienen el Filter parámetro. Este parámetro le permite limitar lo que se devuelve de muchas formas diferentes fuera del alcance de este artículo.

Con el parámetro Filter, puede limitar los resultados por cualquier AD atributo como nombre, tipo de grupo, dirección de correo electrónico, último inicio de sesión de los usuarios, etc.

Por ejemplo, tal vez desee buscar solo grupos de seguridad. En ese caso, especificaría un atributo GroupCategory y establecería una condición para garantizar que solo se devuelvan Security grupos.

Quizás desee buscar todos los grupos de seguridad, pero no deben ser grupos locales de dominio. Luego agregaría otra condición (esta vez usando el operador -ne) para evitar que se devuelva cualquier grupo local de dominio.

Si desea aprender a crear filtros de consulta, asegúrese de consultar Aprendizaje de filtros de Active Directory y LDAP en PowerShell.

Limitación de resultados de grupo por unidad organizativa (OU)

Quizás tenga varios grupos anidados en OU. No es necesario que busque todos los grupos, sino solo los grupos de una unidad organizativa específica. En ese caso, puede utilizar el parámetro SearchBase.

El parámetro SearchBase le permite especificar una unidad organizativa distinguida nombre (DN) para comenzar a buscar grupos. Por ejemplo, quizás tenga una unidad organizativa llamada Ubicaciones en la raíz de su dominio. En la unidad organizativa de ubicaciones, tiene cada unidad organizativa de ubicación creada como Austin, Nueva York y Los Ángeles. Solo busca grupos en la unidad organizativa de la ciudad de Nueva York y necesita restringir la visualización de los demás.

A continuación, se muestra un ejemplo de estructura de la unidad organizativa AD.Observe que existen otros grupos fuera de las unidades organizativas de ubicaciones.

Tal vez necesite encontrar todos los grupos de AD que solo se encuentran en la unidad organizativa de Nueva York. Para limitar la consulta, usaría el parámetro SearchBase que proporciona el DN como se muestra a continuación. Se devuelven todos los grupos dentro de la unidad organizativa de ubicaciones.

Pero ahora necesita encontrar todos los grupos en todas las unidades organizativas en la unidad organizativa de ubicaciones. Get-ADGroup solo devuelve grupos en la unidad organizativa de ubicaciones en sí, no en las unidades organizativas secundarias.

Para devolver grupos dentro de las unidades organizativas secundarias, debe utilizar el SearchScope parámetro. Este parámetro es similar al parámetro Recursive en el sentido de que también inspeccionará los objetos secundarios.

Por ejemplo, para encontrar todos los grupos en cualquier unidad organizativa en la unidad organizativa de ubicaciones, especifique Subtree o 2. Este valor para SearchScope le dice a Get-ADGroup que mire de forma recursiva a todos los hijos, nietos y otras unidades organizativas.

Para obtener un desglose completo de las opciones de parámetros SearchScope, consulte la documentación de Get-ADGroup.

Exportación de grupos y miembros de AD

Para que finalmente sepa cómo consultar y devolver los grupos y miembros de grupo que necesita. Toda esta información se envía a la consola de PowerShell. Pero ahora necesita introducir esta información en un archivo CSV o una hoja de cálculo de Excel.

Lo único que necesita hacer ahora es enviar toda esa información a un archivo.

Exportar a un CSV

Un formato popular para exportar información de AD es un CSV. PowerShell tiene un cmdlet útil que le permite crear fácilmente archivos CSV a partir de la salida de PowerShell llamado Export-Csv.

Puede crear un archivo CSV desde cualquier comando cubierto en este artículo canalizándolo a Export-Csv. Usando el ejemplo siguiente, redirigirá todos los resultados que Get-AdGroup tendrían que regresar a la consola, a un archivo CSV en su lugar.

Para obtener más información sobre este práctico cmdlet, consulte Export-Csv: La forma de PowerShell de tratar los archivos CSV como ciudadanos de primera clase.

Exportar a Excel

PowerShell no tiene una forma nativa de exportar información a Excel. Pero siempre puede descargar el módulo comunitario gratuito llamado ImportExcel. Este módulo trae capacidades de exportación similares a CSV directamente a las hojas de cálculo de Excel. Para instalar el módulo de PowerShell, ejecute Install-Module ImportExcel -Scope CurrentUser.

Usando el ejemplo anterior, en lugar de un archivo CSV, necesitaba exportar los grupos a una hoja de cálculo de Excel, Usaría el cmdlet Export-Excel como se muestra a continuación.

El módulo ImportExcel tiene un montón de funcionalidades para trabajar con Excel. Si necesita una hoja de trabajo más elegante, probablemente tenga una función para usted.

Para obtener más información sobre el uso del módulo ImportExcel, lea este artículo. Proporciona una excelente introducción a algunos casos de uso comunes que puede manejar.

Conclusión

Con solo dos cmdlets de PowerShell, puede hacer casi cualquier cosa con grupos de AD. Este artículo fue solo una introducción a la funcionalidad disponible para usted. Utilice el conocimiento reunido aquí, siga algunos de los enlaces para profundizar en el tema en el artículo y vea lo que puede construir.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *