Crear informes de equipos de Directorio Activo con PowerShell

Crea informes de computadoras en Active Directory con PowerShell. Para encontrar cualquier cosa relacionada con los objetos de computadora en el directorio activo (AD) y sus propiedades, usaremos principalmente el cmdlet Get-ADComputer. Por ejemplo, en un dominio de Active Directory, podemos usar el cmdlet Get-ADComputer de PowerShell para obtener información sobre los objetos de cuenta de computadora (servidores y estaciones de trabajo). Este cmdlet es uno de los más útiles para buscar computadoras de AD según diversos criterios.

Este artículo discute los diversos usos del cmdlet Get-ADComputer y cómo podemos convertirlo en un informe completo y valioso.

Empecemos con el artículo del blog Crear Informes de Computadoras en Active Directory con PowerShell.

Crear informes de equipos de Active Directory con Powershell

Prerrequisitos

Si deseamos seguir los scripts de ejemplo en este artículo, asegúrate de tener lo siguiente:

Bueno, ¿cómo crear informes de equipos del Directorio Activo con PowerShell? Vamos a averiguarlo.

Entendiendo el comando Get-ADComputer de PowerShell

Antes de comenzar, deberíamos familiarizarnos con el comando Get-ADComputer. No necesitamos privilegios de administrador de dominio para obtener información del Directorio Activo. Usar una cuenta de usuario regular miembro del grupo de usuarios del dominio o Usuarios Autenticados es suficiente.

Bien, el Get-Help comando, como es habitual, proporciona una lista de todos los otros parámetros para el cmdlet Get-ADComputer:

$command = Get-ADComputer
Get-Help $command

Salida de ejemplo:

Alternativamente, podemos acceder a la documentación oficial del comando Get-ADComputer aquí.

Después de desplazarnos por la larga lista de parámetros en nuestra línea de comandos y documentación, podemos comenzar a escribir scripts. Recuerda, el parámetro más crucial que acompaña al comando Get-ADComputer es el Identity parámetro.

Para obtener información sobre una cuenta de equipo específica en el dominio, utilice el parámetro -Identity con su nombre como argumento:

Get-ADComputer -Identity DC01

Aquí está el resultado de muestra:

DistinguishedName : CN=DC01,OU=Servers,OU=DC,OU=IT,DC=infrasos,DC=com
DNSHostName       : DC01.infrasos.com
Enabled           : True
Name              : DC01
ObjectClass       : computer
ObjectGUID        : 87654321-1204-5578-0000-123462341264
SamAccountName    : DC01
SID               : S-1-5-21-123656780-1234667890-0986654321-1264

Como resultado, el cmdlet Get-ADComputer devolvió solo las propiedades fundamentales del objeto Equipo desde AD. Sin embargo, ejecutar el comando anterior solo proporciona la información de nivel superior sobre el objeto del equipo. Entonces, si queremos profundizar y mostrar las propiedades disponibles del objeto, podemos utilizar el parámetro -Properties.

Para listar todas las propiedades del objeto, añada el parámetro -Properties y agregue un valor de asterisco (*). El valor de asterisco es el valor comodín que indica TODOS:

Get-ADComputer -Identity DC01 -Properties *

Resultado de muestra:

Por otro lado, podemos navegar dentro de la consola de Usuarios y Computadoras de Active Directory (o dsa.msc) y ver las propiedades desde allí. Finalmente, selecciona un objeto de computadora y navega hasta la pestaña del Editor de Atributos para ver la lista de propiedades del objeto de computadora.

Filtrando Resultados de Get-ADComputer

Un inconveniente es que podríamos mostrar más información sobre cosas que no necesariamente necesitamos. Usando el conducto de PowerShell, el cmdlet Get-ADComputer nos permite mostrar propiedades específicas de la computadora en la línea de comando. Por ejemplo, podemos dejar solo los valores de Nombre y ÚltimaFechaDeInicioDeSesión  en la salida mediante el paso del comando Format-Table a la sintaxis principal:

Get-ADComputer -Identity DC01 -Properties * | Format-Table Name, LastLogonDate -Autosize

Salida de ejemplo:

Aquí, Windows PowerShell calcula anchos de columna en función de los datos reales mostrados si especificamos el parámetro AutoSize cuando ejecutamos el comando Format-Table. En resumen, este parámetro hace que las columnas sean legibles.

Sin embargo, el comando anterior solo busca un objeto de equipo de AD único. Por lo tanto, si quisiéramos información sobre todos los equipos en el dominio, podemos reemplazar el Identidad parámetro con Filtro:

Get-ADComputer -Filter * -Properties * | Format-Table Name, Created -Autosize

Vea la salida de muestra:

Obtenemos una tabla con formato simple que contiene solo dos campos: el nombre del equipo y la fecha de creación del objeto. Podemos agregar otras columnas del objeto de equipo de AD a esta tabla agregando propiedades en el Format-Table sección del pipeline.

Básicamente, para obtener información sobre los objetos de equipo en una unidad organizativa (OU) en particular, podemos usar el –SearchBase parámetro:

Get-ADComputer -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Filter * -Properties * | Format-Table Name, Created -Autosize

Además, también podemos ordenar los resultados de la consulta insertando el Sort-Object cmdlet en la canalización:

Get-ADComputer -Filter * -Properties * | Sort-Object Created | Format-Table Name, Created -Autosize

En el comando anterior, el comando Sort-Object ordena los resultados del Get-ADComputer primero por Created y luego lo pasa a Format-Table para su visualización.

Usar filtros de búsqueda con Get-ADComputer

Utilizamos el Get-ADComputer cmdlet’s -Filter argumento para buscar múltiples AD computadoras basadas en criterios específicos. Como se mencionó, podemos usar comodines y operadores de comparación lógica en este caso. Ciertamente, como filtros, solo podemos usar atributos primarios de objetos de computadora.

Igualmente, utilizamos el Where-Object para aplicar filtros de búsqueda en atributos extendidos de la computadora. Los siguientes son ejemplos más prácticos de cómo consultar y buscar objetos de computadora en el dominio utilizando el Get-ADComputer comando.

Obtener el número total de todas las computadoras activas y no bloqueadas en Active Directory:

Buscamos computadoras utilizando múltiples filtros al mismo tiempo. Utilice PowerShell operadores de comparación lógica para lograr esto.

(Get-ADComputer -Filter {Enabled -eq "true"}).Count

Mostrar todos los hosts de Windows Server en el dominio de AD:

Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*' }

Obtener una lista de todas las computadoras en un OU específico cuyos nombres comiencen con DC:

Get-ADComputer -Filter {Name -like "DC*"} -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Properties * | Format-Table Name

Al buscar en el OU, podemos usar el –SearchScope1 parámetro para limitar nuestra búsqueda solo al OU raíz. La -SearchScope2 opción realiza una búsqueda recursiva de computadoras en todos los OUs.

Administrar múltiples computadoras con Get-ADComputer

Debemos usar el Foreach-Object bucle para realizar una acción específica en todas las computadoras de la lista resultante.En este ejemplo, podemos consultar múltiples computadoras de AD de forma remota utilizando Windows Management Instrumentation o Common Information Classes:

Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Foreach-Object {
    Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue |
    Select-Object PSComputerName
}

Evidentemente, en este ejemplo, si queremos una lista de hosts de Windows Server en el dominio, junto con su modelo y fabricante, utilizamos el mismo método de bucle y obtenemos las propiedades de la computadora.

$Computers = Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*'}
Foreach ($Computer in $Computers){
    $Hostname = $Computer.Name
    $ComputerInfo = (Get-WmiObject -Computername $Hostname Win32_ComputerSystem)
    $Manufacturer = $Computer.Manufacturer
    $Model = $Computer.Model
    Write-Output "Name: $Hostname"
    Write-Output "Manufacturer: $Manufacturer"
    Write-Output "Model: $Model"
    Write-Output " "
}

Entonces, la información obtenida de los ejemplos anteriores está disponible de manera inmediata a través de los servicios de dominio ya que estas computadoras forman parte de AD. Sin embargo, no todas las computadoras publican sus propiedades en el dominio. ¿Cómo podemos obtenerlas?

A continuación, hacemos uso del Invoke-Command. Por lo tanto, este cmdlet de PowerShell ejecuta comandos locales en la computadora remota. Por ejemplo, supongamos que necesitamos ejecutar un comando específico en todas las computadoras de un OU en particular. En este ejemplo, usemos el Invoke-Command para ejecutar un comando de actualización de directiva de grupo en todos los servidores:

Get-ADComputer -SearchBase "OU=DC,DC=infrasos,DC=com" -Filter * |
%{ Invoke-Command -Computer $_.Name -ScriptBlock { gpupdate /force } }

Generar informes de AD con Get-ADComputer en PowerShell

En Windows PowerShell, exportamos la salida de nuestros comandos en múltiples formatos de informe. Aquí hay algunos ejemplos a continuación.

Primero, exportamos el resultado del comando Get-ADComputer a un archivo de texto:

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2019*' } -Properties * |
Select Name, OperatingSystem |
Format-Table -AutoSize C:\Temp\2019_servers.txt

En segundo lugar, también obtenemos una lista de todos los equipos y la exportamos a un valor separado por comas(CSV) archivo:

Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Export-CSV All-Computers.csv -NoTypeInformation

En tercer lugar, también podemos exportar nuestro informe y obtener un formato de página web HTML con una lista de todos los equipos y propiedades esenciales:

Get-ADComputer -Filter * -Properties * |
Select-Object Name,OperatingSystem |
ConvertTo-Html |
Out-File C:\ps\ad_all_computers.html

Debería verse algo como esto:

Gracias por leer Crear informes de equipos de Active Directory con PowerShell. Lo concluiremos.

Conclusión de informes de equipos de Active Directory utilizando Powershell

En este artículo, hemos discutido el comando Get-ADComputer de manera exhaustiva. Aprendimos que con este comando, podemos obtener una lista detallada de propiedades e información para una máquina en particular. Además, con una lista exhaustiva, hemos aprendido cómo filtrar estas propiedades solo para obtener la información que necesitamos.

En resumen, también hemos aprendido cómo convertir una consulta cmdlet en un comando más útil que podemos usar para pasar comandos de forma remota. Por último, ahora podemos generar nuestros informes en varios formatos con toda esta información procesada.

Source:
https://infrasos.com/create-active-directory-computer-reports-with-powershell/