Get-ADComputer: busque los detalles del equipo en Active Directory con PowerShell

Puede usar el cmdlet de PowerShell Get-ADComputer para obtener información diversa sobre los objetos de la cuenta de la computadora (servidores y estaciones de trabajo) del dominio de Active Directory. Este es uno de los cmdlets más útiles para buscar equipos de AD según varios criterios (para obtener información sobre las cuentas de usuario de AD, se usa otro cmdlet: Get-ADUser).

Contenido:

  • Get-ADComputer – Sintaxis de cmdlet
  • Get-ADComputer – Ejemplos

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.

Antes de usar el cmdlet Get-ADComputer, debe importar Módulo de Active Directory para Windows PowerShell con el comando:

Import-Module activedirectory

Consejo. En PowerShell 3.0 (introducido en Windows Server 2012) o posterior, este módulo se importa de forma predeterminada, si el siguiente componente está instalado: Herramientas de administración de servidor remoto -> Herramientas de administración de roles -> Herramientas de AD DS y AD LDS -> Módulo de Active Directory para Windows PowerShell. Para usar el cmdlet Get-ADComputer en los sistemas operativos de escritorio (Windows 10, 8.1 o Windows 7), debe descargar e instalar el RSAT para su versión del sistema operativo y habilitar el módulo AD-Powershell desde el Panel de control o usando el comando:

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

habilitar el módulo de anuncios para powershell

Get-ADComputer – Sintaxis de cmdlet

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

Get-Help Get-ADComputer

Ayuda sobre la sintaxis del cmdlet Get-ADComputer

Para obtener información de AD mediante los cmdlets del módulo AD para PowerShell, no es necesario tener privilegios de administrador de dominio. Es suficiente que la cuenta con la que se ejecuta el cmdlet sea miembro de la Usuarios de dominio / Usuarios autenticados grupo.

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

Get-ADComputer -Identity SRV-DB01

Get-ADComputer -Identity

DistinguishedName : CN=SRV-DB01,OU=Servers,OU=London,OU=UK,DC=woshub,DC=com
DNSHostName       : SRV-DB01.woshub.com
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 devolvió solo 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 el resultado del comando anterior. Puede enumerar todas las propiedades disponibles de este objeto de equipo desde Active Directory:

Get-ADComputer -Identity SRV-DB01 -Properties *

Todas las propiedades de la computadora AD

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 última fecha de inicio de sesión de esta computadora a la red se especifica en el atributo de la computadora LastLogonDate – 21/09/2015 0:20:17.

El cmdlet Get-ADComputer le permite mostrar cualquiera de las propiedades del equipo en los resultados del comando. Elimina toda la información innecesaria dejando solo valores de Nombre y LastLogonDate atributos.

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

Get-ADComputer LastLogonDate

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 todos los equipos del dominio. Para hacerlo, reemplace -Identidad a –Filtro *:

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

LastLogonDate de las computadoras AD - vista de tabla

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

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

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

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

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

Ordenar por LastLogonDate

Entonces, tenemos la lista de computadoras y la fecha en que iniciaron sesión por última vez en el dominio de Active Directory. Ahora queremos deshabilitar las cuentas de computadora que no se usaron durante 120 días o más.

Utilizando Obtener la fecha 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 un 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

Por eso, hemos creado una lista de cuentas de computadoras inactivas que no se han registrado en la red durante más de 120 días. Utilizar el Disable-ADAccount o Set-ADComputadora comando para deshabilitarlos.

Consejo. Por primera vez, es mejor probar los resultados del comando con el -Y si switch, que permite ver qué sucede si el comando se ha ejecutado sin cambios en el sistema.

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. También puede obtener una lista de equipos y usuarios de dominio bloqueados, desactivados e inactivos mediante un cmdlet Search-ADAccount independiente.

Get-ADComputer – Ejemplos

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

Calcule la cantidad de instancias de Windows Server en el dominio de AD:

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

Get-ADComputer cuenta objetos de servidor o de escritorio en el anuncioObtenga una lista de equipos en una unidad organizativa específica cuyos nombres comienzan con LonPC:

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

Al buscar en la unidad organizativa, puede utilizar el parámetro adicional -SearchScope 1, lo que significa que solo debe buscar en la raíz de la unidad organizativa. La -SearchScope 2 La opción indica 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 la lista de servidores en el dominio con la versión del sistema operativo, el Service Pack instalado y la 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 hermosa con una lista de Windows Server en el AD:

lista de get-ad-computers con la versión del sistema operativo y la dirección IP

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

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

Encuentre todas las computadoras deshabilitadas en una OU de Active Directory específica:

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

Para eliminar todas las cuentas de computadora que no han 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

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

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2008*' } -Properties OperatingSystem | Select DNSHostName, OperatingSystem | Format-Table -AutoSize C:Scriptserver_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 archivo de 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:psad_computers_list.html

informe html de objetos de equipo publicitario

Para realizar una acción específica con todos los equipos de la lista resultante, debe utilizar el Para cada círculo. En este ejemplo, queremos crear una lista de servidores en el dominio y solicitar información específica de cada servidor (el archivo de resultados debe contener el nombre del servidor, el fabricante y el modelo del servidor).

$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:PSServersInfo.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, quiero ejecutar un comando de actualización de política de grupo en todos los servidores):

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

Con Get-AdComputer y el script de inicio de PowerShell, puede controlar varias configuraciones de la computadora. Por ejemplo, superviso el estado del agente (servicio) de SCCM en las computadoras de los usuarios. Se ejecuta un pequeño script de inicio de sesión en cada computadora durante el inicio, lo que guarda el ccmexec estado del servicio a un atributo de equipo no utilizado – extensionAttribute10.

Luego, usando el siguiente comando, puedo encontrar computadoras en las que el servicio CCMExec falta o no se está ejecutando.

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

obtener el estado del servicio en las computadoras publicitarias

 

Artículos Interesantes