Búsqueda de sitios web

Get-ADComputer: encuentre las propiedades de la computadora en Active Directory con PowerShell


Puede usar el cmdlet de PowerShell Get-ADComputer para obtener información diversa sobre objetos de cuentas de equipos (servidores y estaciones de trabajo) en un dominio de Active Directory. Este es uno de los cmdlets más útiles para buscar equipos AD según varios criterios

Suponga que su tarea es encontrar todas las computadoras inactivas en Active Directory que no se han registrado en un dominio durante más de 120 días y deshabilitar estas cuentas de computadora.

Antes de poder usar el cmdlet Get-ADComputer, debe instalar e importar el módulo de Active Directory para Windows PowerShell.

Import-Module activedirectory

Consejo. En la versión PowerShell 3.0 (introducida en Windows Server 2012) o posterior, este módulo se importa de forma predeterminada si está instalado el siguiente componente: Herramientas de administración remota del servidor -> Herramientas de administración de funciones -> Herramientas AD DS y AD LDS -> Módulo Active Directory para Windows PowerShell. Para usar el cmdlet Get-ADComputer en los clientes de escritorio (Windows 11 u 11), debe descargar e instalar el RSAT y habilitar el módulo AD-Powershell desde el Panel de control o usando el comando:

Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Mostrar propiedades de objetos de equipo con Get-ADComputer

Puede obtener ayuda sobre los parámetros del cmdlet Get-ADComputer como de costumbre con el comando Get-Help:

Get-Help Get-ADComputer

Para obtener información de AD utilizando los cmdlets del módulo AD para PowerShell, no necesita tener privilegios de administrador de dominio. Es suficiente utilizar una cuenta de usuario normal que sea miembro del grupo Usuarios del dominio o Usuarios autenticados.

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

Get-ADComputer -Identity SRV-DB01

DistinguishedName : CN=SRV-DB01,OU=Servers,OU=London,OU=UK,DC=a-d,DC=com
DNSHostName       : SRV-DB01.a-d.site
Enabled           : True
Name              : SRV-DB01
ObjectClass       : computer
ObjectGUID        : 87654321-1234-5678-0000-123412341234
SamAccountName    : SRV-DB01$
SID               : S-1-5-21-123456780-1234567890-0987654321-1234
UserPrincipalName :

El cmdlet Get-ADComputer solo devolvió las propiedades básicas del objeto Computer de AD. Estamos interesados en la hora del último registro de la computadora en el dominio AD, pero esta información no se muestra en la salida del comando anterior. Puede enumerar todas las propiedades disponibles de este objeto de equipo desde Active Directory:

Get-ADComputer -Identity SRV-DB01 -Properties *

Esta lista de atributos de equipo también está disponible en la consola Usuarios y equipos de Active Directory (dsa.msc) en la pestaña Editor de atributos.

Usando Get-Member, puede obtener una lista de todas las propiedades de la clase Computer en AD

Get-ADComputer -Filter * -Properties * | Get-Member

Como puede ver, la hora del último inicio de sesión de esta computadora en la red se especifica en el atributo de la computadora LastLogonDate - 6/2/2022 3:53:50 AM.

El cmdlet Get-ADComputer le permite mostrar cualquiera de las propiedades de la computadora en los resultados del comando. Elimine toda la información innecesaria, dejando solo los valores de los atributos Name y LastLogonDate en la salida.

Get-ADComputer -identity SRV-DB01 -Properties * | FT Name, LastLogonDate -Autosize

Entonces, recibimos datos sobre la última vez que se registró en el dominio para una sola computadora. Luego, debe modificar el comando para que muestre la información sobre la hora del último registro de red para todas las computadoras en el dominio. Para hacerlo, reemplace -Identity to -Filter *:

Get-ADComputer -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Obtuvimos una tabla simple que contiene solo 2 campos: nombre de la computadora y fecha LastLogonData. Puede agregar otros campos del objeto Equipo de AD a esta tabla.

Para mostrar información sobre los objetos de la computadora en una unidad organizativa (OU) en particular, use el parámetro -SearchBase:

Get-ADComputer -SearchBase ‘OU=Paris,DC=a-d,DC=loc’ -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Ordene los resultados de la consulta por la fecha del último inicio de sesión mediante el cmdlet Ordenar:

Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

Entonces, tenemos una lista de computadoras de dominio y la fecha en que se conectaron por última vez a la red de Active Directory. Ahora queremos deshabilitar las cuentas de equipo que no se han utilizado durante más de 20 días.

Usando Get-Date podemos obtener el valor de la fecha actual en la variable y reducirlo a 120 días:

$date_with_offset= (Get-Date).AddDays(-120)

La variable de fecha resultante se puede utilizar como filtro de la consulta Get-ADComputer en el campo LastLogonDate:

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset } | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

Así que tenemos una lista de cuentas de computadora inactivas que no se han registrado en la red de dominio durante más de 120 días. Use el comando Disable-ADAccount o Set-ADComputer para deshabilitar estas cuentas.

Consejo. Por primera vez, es mejor probar los resultados del comando con el interruptor -WhatIf, que permite ver qué sucede si el comando se ejecutó sin cambios en los objetos de AD.

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonData -lt $date_with_offset } | Set-ADComputer -Enabled $false -whatif

Ahora puede deshabilitar todas las cuentas de computadora inactivas:

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonData -lt $datecutoff} | Set-ADComputer -Enabled $false

Nota. Además, puede obtener una lista de computadoras y usuarios de dominio bloqueados, deshabilitados e inactivos mediante el cmdlet Search-ADAccount.

Uso de filtros de búsqueda con Get-ADComputer

Puede usar el argumento -Filter del cmdlet Get-ADComputer para buscar varios equipos de Active Directory según criterios específicos. Aquí puede utilizar comodines y operadores de comparación lógica. Solo se pueden utilizar como filtros los atributos básicos de los objetos informáticos.

Si necesita usar filtros de búsqueda en atributos de computadora extendidos, se pueden especificar a través de la canalización Where-Object. Hay varios ejemplos en la siguiente sección de este artículo.

A continuación se muestran algunos ejemplos más útiles del uso del cmdlet Get-ADComputer para consultar y buscar objetos de equipo en el dominio según criterios específicos.

Obtenga el número total de todas las computadoras activas (desbloqueadas) en Active Directory:

(Get-ADComputer -Filter {enabled -eq "true"}).count

Puede usar múltiples filtros para buscar computadoras por varios parámetros a la vez. Para ello, utilice los operadores de comparación lógica de PowerShell (-and, -eq, -ne, -gt, -ge, -lt, -le, -like, -notlike, -and, -or, etc.).

Cuente la cantidad de hosts de Windows Server en el dominio AD:

(Get-ADComputer -Filter {enabled -eq "true" -and OperatingSystem -Like '*Windows Server*' }).count

Obtenga una lista de equipos en una unidad organizativa específica cuyos nombres comiencen con LonPC:

Get-ADComputer -Filter {Name -like "LonPC*"} -SearchBase ‘OU=London,DC=a-d,DC=com’  -Properties IPv4Address | Format-table Name,DNSHostName,IPv4Address | ft -Wrap -Auto

Al buscar en la unidad organizativa, puede usar el parámetro adicional -SearchScope 1, lo que significa que necesita buscar solo en la unidad organizativa raíz. La opción -SearchScope 2 implica una búsqueda recursiva de equipos en todas las unidades organizativas anidadas.

Para encontrar todas las estaciones de trabajo que ejecutan Windows 10:

Get-ADComputer -Filter {OperatingSystem -like '*Windows 10*'}

Obtenga una lista de servidores en el dominio con la versión del sistema operativo, Service Pack instalado. y dirección IP:

Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -Properties  Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack,IPv4Address | Sort-Object -Property Operatingsystem | Select-Object -Property Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address| ft -Wrap -Auto

El resultado fue una tabla tan limpia con una lista de Windows Server en AD:

Consulta de usuarios de Active Directory con Get-ADComputer: ejemplos

Los siguientes son algunos ejemplos más útiles del uso del cmdlet Get-ADComputer para seleccionar equipos en un dominio según ciertos criterios.

El atributo -LDAPFilter le permite utilizar varias consultas LDAP como parámetro del cmdlet Get-ADComputer, por ejemplo:

Get-ADComputer -LDAPFilter "(name=*db*)"|ft

Encuentre todos los objetos de la computadora deshabilitados en una unidad organizativa específica de Active Directory:

Get-ADComputer -filter * -SearchBase ‘OU=Computers,OU=London,DC=a-d,dc=com’ | Where-Object {$_.enabled -eq $False}

Para eliminar todas las cuentas de computadora que no hayan iniciado sesión en el dominio durante más de 6 meses, puede usar el comando:

Get-ADComputer -properties lastLogonDate -filter * | where { $_.lastLogonDate -lt (get-date).addmonths(-6) } | Remove-ADComputer

Muestra la hora en que se cambió por última vez la contraseña de la computadora en Active Directory. De manera predeterminada, la computadora debe cambiar automáticamente la contraseña una vez cada 30 días. Si la contraseña de la computadora no coincide con la contraseña en AD, se romperá la relación de confianza de la computadora con el dominio:

Get-ADComputer -Identity MUNPC321 -Properties PasswordLastSet

El resultado del comando Get-ADComputer se puede exportar a un archivo de texto sin formato:

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2016*' } -Properties OperatingSystem | Select DNSHostName, OperatingSystem | Format-Table -AutoSize C:\Script\server_system.txt

También puede obtener una lista de computadoras y exportarla a un archivo CSV:

Get-ADComputer -Filter * -Property * | Select-Object Name,OperatingSystem,OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8

O obtenga un informe HTML con una lista de equipos y propiedades necesarias:

Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server 2012*' } -Properties * | Select-Object Name,OperatingSystem | ConvertTo-Html | Out-File C:\ps\ad_computers_list.html

Puede consultar de forma remota las computadoras AD a través de WMI o CIM. Por ejemplo, para mostrar los números de serie de todos los servidores del dominio:

Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' | Select-Object Name | Foreach-Object {Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue | Select-Object PSComputerName,SerialNumber}

Para realizar una acción específica con todos los equipos de la lista resultante, debe utilizar el bucle Foreach. En este ejemplo, queremos obtener una lista de hosts de Windows Server en el dominio con modelo y fabricante.

$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-Host "Name: $Hostname"
Write-Host "Manufacturer: $Manufacturer"
Write-Host "Model: $Model"
Write-Host " "
$Content = "$Hostname;$Manufacturer;$Model"
Add-Content -Value $Content -Path "C:\PS\ServersInfo.txt"
}

Puede utilizar una sintaxis de bucle más corta. Suponga que necesita ejecutar un comando específico en todas las computadoras en una unidad organizativa específica. En este ejemplo, usaré Invoke-Command para ejecutar un comando de actualización de políticas de grupo en todos los servidores:

get-adcomputer -SearchBase "OU=Servers,DC=a-d,DC=com" -Filter * | %{ Invoke-Command -Computer $_.Name -ScriptBlock {gpupdate /force} }

De la misma manera, puede obtener diversa información útil de todos los equipos del dominio:

  • Verifique el estado de activación de Windows en las computadoras del dominio

  • Comprobar el espacio libre en disco

  • Comprobar y actualizar la versión de PowerShell

  • Recopile configuraciones de red de todas las computadoras

  • Obtener nombres de usuario registrados actuales

Con los scripts de inicio de Get-ADComputer y PowerShell, puede controlar varias configuraciones de la computadora o almacenar diversa información útil en los atributos de la computadora en AD (por ejemplo, puede agregar un nombre de usuario a la descripción de la computadora).

Por ejemplo, superviso el estado del agente SCCM en las computadoras de los usuarios. Cuando cada computadora arranca, ejecuta una pequeña secuencia de comandos de inicio de sesión que guarda el estado del servicio ccmexec en un atributo de computadora no utilizado: extensionAttribute10. Luego, usando el siguiente comando, puedo encontrar computadoras en las que falta el servicio CCMExec o no se está ejecutando.

get-adcomputer -filter {extensionAttribute10 -ne "SCCM Agent:Running"} -SearchBase “OU=Compters,OU=London,DC=a-d,DC=com” -properties dNSHostName,extensionAttribute10,LastLogonDate  |select-object dNSHostName,extensionAttribute10,LastLogonDate

Puede obtener información de las cuentas de usuario de Active Directory mediante el cmdlet Get-ADUser.

Artículos relacionados