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

La creación de un equipo de TI próspero y eficaz requiere contar con una solución centralizada que se convierta en tu principal herramienta de 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 complejas infraestructuras locales.

Obtén más información sobre NinjaOne Remote Script Deployment, echa un vistazo a un tour en vivo, o comienza tu prueba gratuita de la plataforma NinjaOne.

Categorías:

Quizá también te interese…