martes, 10 de febrero de 2026

WINDOWS. PS. Computers - Pcs dias sin conectar al dominio

 Propósito

Localizar los PCs/host que lleven cierto tiempo sin contactar contra nuestro AD, ya sea porque se han perdido, los han robado, se han roto, etc... el tema es que hay que sacarlos porque podrían estar consumiendo licencias, rompiendo nuestras estadísticas de parcheo, los antivirus sin actualizar, etc..

Pasos

Para localizarlos he creado 2 scripts

Script 1:

Descripcion: PCs sin conectar en 90 dias (se puede modificar fácilmente la cantidad de días). La idea sería ejecutarlo una vez al día para estar al corriente de nuestro inventario. Se podría añadir a una tarea programada.

# Parámetros
$DiasSinConectar = 90   # 3 meses aproximados
$FechaLimite = (Get-Date).AddDays(-$DiasSinConectar)

# Nombre del fichero con fecha y hora
$TimeStamp = Get-Date -Format "yyyyMMdd_HHmmss"
$FicheroSalida = "Equipos_NoConectan_Desde_3Meses_$TimeStamp.csv"

# Consulta a AD
Import-Module ActiveDirectory

Get-ADComputer -Filter * -Properties lastLogonTimestamp, Description |
    Select-Object Name,
                  Description,
                  @{Name='UltimoLogon'; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} |
    Where-Object { $_.UltimoLogon -lt $FechaLimite } |
    Export-Csv -Path $FicheroSalida -NoTypeInformation -Encoding UTF8

Write-Host "Proceso finalizado. Archivo generado: $FicheroSalida"

Su salida sería algo así:


Script 2:

Descripcion. PC búsqueda manual, pide en pantalla cuantos días quiere que retroceda para comprobar.


# Cargar módulo de Active Directory
Import-Module ActiveDirectory

# Pedir días por pantalla
$DiasSinConectar = Read-Host "Introduce el número de días que llevan los PCs sin conectar"
$FechaLimite = (Get-Date).AddDays(-[int]$DiasSinConectar)

# Convertir timestamp y filtrar
$Equipos = Get-ADComputer -Filter * -Properties lastLogonTimestamp, Description |
    Select-Object Name,
                  Description,
                  @{Name='UltimoLogon'; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} |
    Where-Object { $_.UltimoLogon -lt $FechaLimite }

# Mostrar por pantalla
Write-Host ""
Write-Host "Equipos encontrados que llevan más de $DiasSinConectar días sin conectar:" -ForegroundColor Cyan
$Equipos | Format-Table -AutoSize
Write-Host ""

# Número de equipos
$Total = $Equipos.Count

# Crear nombre del fichero con fecha/hora y número de PCs
$TimeStamp = Get-Date -Format "yyyyMMdd_HHmmss"
$NombreFichero = "PCs_SinConectar_${DiasSinConectar}dias_${Total}equipos_$TimeStamp.csv"

# Exportar CSV
$Equipos | Export-Csv -Path $NombreFichero -NoTypeInformation -Encoding UTF8

Write-Host "Exportación completada. Archivo generado: $NombreFichero" -ForegroundColor Green

La salida sería algo así


Dejo en tu mano borrarlos!
by GoN | Published: Feb 2026 | Last Updated:

No hay comentarios: