Guía de scripts PowerShell: ver los miembros de una OU en Active Directory

Principales conclusiones

  • Dominio de PowerShell: aprovechar PowerShell es crucial para una gestión eficaz de AD, en particular para la gestión de cuentas de usuario en OU.
  • Estructuración de scripts: comprender los bloques de inicio, proceso y fin del script es clave para su funcionamiento y posibles personalizaciones.
  • Acceso administrativo: es necesario ejecutar el script con privilegios administrativos para acceder a los datos de AD y modificarlos.
  • Flexibilidad de los parámetros: el script puede adaptarse a varios entornos AD ajustando los parámetros OU y CustomField.
  • Eficacia por encima de tradición: los scripts de PowerShell ofrecen un enfoque más eficaz y automatizable en comparación con los métodos tradicionales de gestión de AD.
  • Consideraciones de seguridad: asegurar el acceso restringido al script es fundamental debido a su capacidad para recuperar información sensible del usuario.
  • Adaptabilidad y ampliación: la naturaleza modular del script permite realizar modificaciones fácilmente para satisfacer necesidades específicas de la infraestructura de AD.
  • Herramientas complementarias: la integración de scripts PowerShell con plataformas como NinjaOne puede mejorar la gestión general de TI y la eficiencia operativa.

La gestión de Active Directory (AD) es un aspecto fundamental de la administración de redes en muchos entornos corporativos. A medida que los administradores se enfrentan a las complejidades de la gestión de cuentas de usuario y unidades organizativas (OU), PowerShell emerge como una herramienta robusta, que ofrece tanto flexibilidad como eficiencia. Este blog profundiza en un script de PowerShell diseñado para extraer miembros de una OU de AD, una operación fundamental para una gestión de directorios eficaz.

Contexto

Active Directory, la piedra angular de la gestión de identidades en las redes Windows, a menudo requiere que los administradores manejen un gran número de cuentas de usuario organizadas en OU. El script que aquí nos ocupa proporciona un enfoque racionalizado para ver los miembros de una OU específica, una tarea comúnmente encontrada por profesionales de TI y Proveedores de Servicios Gestionados (MSPs). Este script no solo simplifica la gestión de usuarios, sino que también mejora las capacidades de supervisión y auditoría dentro de un entorno AD.

El script para ver los miembros de una OU

#Requires -Version 4.0

<#
.SYNOPSIS
    Gets the members of an OU from AD.
.DESCRIPTION
    Gets the members of an OU(Organizational Unit) from AD(Active Directory) and can save the results to a Custom Field.

PARAMETER: -OU "Test"
    A brief explanation of the parameter.
.EXAMPLE
    -OU "Test"

    OU=Test,DC=something,DC=local 
    -----------------------------   
    [email protected]

PARAMETER: -OU "Test" -CustomField "TestOU"
    A brief explanation of the parameter.
.EXAMPLE
    -OU "Test" -CustomField "TestOU"

    OU=Test,DC=something,DC=local
    ----------------------------- 
    [email protected]

.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows Server 2012 R2 (Domain Controller's Only)
    Release Notes: Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [string]$OU,
    [string]$CustomField
)

begin {
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }

    if (-not (Get-Module -Name ActiveDirectory -ListAvailable)) { 
        Write-Error "RSAT is required to get the membership. Please run this on a domain controller or on a machine with RSAT installed." 
        exit 1
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }

    if ($env:OU -and $env:OU -notlike "null") {
        $OU = $env:OU
    }

    if ($env:CustomField -and $env:CustomField -notlike "null") {
        $CustomField = $env:CustomField
    }

    $Report = New-Object System.Collections.Generic.List[string]

    try {
        $OUPaths = Get-ADOrganizationalUnit -Filter * | Where-Object { $_.DistinguishedName -like "OU=$OU*" } | Select-Object -ExpandProperty DistinguishedName
        $OUPaths | ForEach-Object {
            $Report.Add("`n$_")

            $TitleLength = $_.Length
            $i = 1
            $Title = $Null
            while($i -le $TitleLength){
                $Title = "$Title-"
                $i++
            }
            $Report.Add($Title)

            Get-ADUser -Filter * -SearchBase $_ -ErrorAction SilentlyContinue | Select-Object -ExpandProperty UserPrincipalName -ErrorAction SilentlyContinue | ForEach-Object { $Report.Add("$_") }
        }
    }
    catch {
        Write-Error $_
        exit 1
    }

    $Report | Write-Host

    if ($CustomField) {
        Ninja-Property-Set -Name $CustomField -Value $($Report | Out-String)
    }
}
end {
    
    
    
}

 

Accede a más de 300 scripts en el Dojo de NinjaOne

Obtén acceso

Análisis detallado

El script para ver los miembros de una OU comienza con una comprobación obligatoria de la versión, asegurando la compatibilidad con PowerShell 4.0 o superior. Está estructurado en tres partes: inicio, proceso y fin, bloques de script estándar de PowerShell.

  • Bloque de inicio: esto inicia una comprobación de prerrequisitos para el módulo Active Directory, crucial para las operaciones AD del script. Una función de comprobación de elevación Test-IsElevated asegura que el script se ejecuta con privilegios administrativos, críticos para acceder a los datos de AD.
  • Bloque de proceso: aquí se realizan las operaciones principales. El script acepta dos parámetros: OU para especificar la Unidad Organizativa y CustomField para la personalización opcional de la salida de datos. Se adapta dinámicamente a las variables de entorno para estos parámetros si están presentes. A continuación, el script genera una lista ($Report) para almacenar la salida. Utilizando el cmdlet Get-ADOrganizationalUnit, recupera los Nombres Distinguidos de todas las OU que coincidan con el parámetro OU especificado. Para cada OU encontrada, los detalles del usuario (UserPrincipalName) dentro de ella se obtienen usando Get-ADUser y se añaden a la lista del informe.
  • Bloque final: utilizado principalmente para operaciones de limpieza y finales, en este script, se deja vacío, indicando que no hay acciones específicas al finalizar el script.

Posibles casos de uso

Imagina que un administrador de TI necesita auditar cuentas de usuario en OU específicas con regularidad. Con este script, puede generar rápidamente una lista de todos los usuarios de las OU seleccionadas, lo que facilita la realización de auditorías y comprobaciones de conformidad eficaces.

Comparaciones

Tradicionalmente, estas tareas se realizaban manualmente a través de la consola Usuarios y equipos de AD o mediante consultas LDAP básicas. El enfoque de PowerShell, como se ilustra en este script para ver los miembros de una OU, ofrece una solución más flexible que puede automatizarse e integrarse en flujos de trabajo más amplios.

FAQ

  • ¿Puede modificarse el script para diferentes estructuras AD?
    Por supuesto, el script se puede adaptar a varias configuraciones de AD modificando el parámetro OU.
  • ¿Es necesario ejecutar el script con privilegios de administrador?
    Sí, para acceder a los datos de AD, es obligatorio el acceso a nivel de administrador.
  • ¿Puede el script manejar múltiples OU simultáneamente?
    En su forma actual, está diseñado para una OU a la vez, pero se puede ampliar para manejar múltiples OU.

Implicaciones

Aunque el script mejora la eficacia, hay que tener en cuenta el aspecto de la seguridad. Garantizar que solo el personal autorizado tenga acceso a ejecutar estos scripts es primordial, ya que se trata de información sensible del usuario.

Recomendaciones

  • Ejecuta siempre el script para ver los miembros de una OU en un entorno controlado.
  • Actualiza periódicamente el script para adaptarlo a los cambios que se produzcan en tu infraestructura AD.
  • Implementa el registro para rastrear el uso y la salida del script.

Reflexiones finales

En el ámbito de las TI, la eficiencia y la automatización son fundamentales. Los scripts de PowerShell, como el que se analiza aquí para ver los miembros de una OU, desempeñan un papel fundamental a la hora de agilizar las tareas de AD. Herramientas como NinjaOne complementan estos scripts proporcionando una plataforma unificada para la gestión de las operaciones de TI, simplificando aún más los retos a los que se enfrentan los profesionales.

Próximos pasos

Crear un equipo de TI eficiente y eficaz requiere una solución centralizada que actúe como herramienta principal para la prestación de servicios. NinjaOne permite a los equipos de TI supervisar, gestionar, proteger y dar soporte a todos sus dispositivos, estén donde estén, sin necesidad de una infraestructura local compleja.

Para más información sobre el despliegue remoto de scripts de NinjaOne, asiste a una demo en directo o empieza tu prueba gratuita de la plataforma NinjaOne.

Categorías:

Quizá también te interese…

Términos y condiciones de NinjaOne

Al hacer clic en el botón «Acepto» que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona «tal cual» y «según disponibilidad», sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).