sábado, 14 de marzo de 2026

WINDOWS. PS. Hosts sin conectar al dominio.

 Propósito

Una opción más para mantener nuestro Active Directory al día es asegurarnos de que no existan equipos que ya no estén en uso. Deberíamos procurar que los PCs estén lo más actualizados posible: últimas actualizaciones, parches, configuraciones de seguridad (GPOs), patrones de antivirus, etc. Además, un equipo que no se conecta o que ya no está activo sigue consumiendo licencias innecesariamente.

Para tener un control mínimo, he preparado este script que se ejecuta una vez por semana y informa de los equipos que llevan más de 30 y 60 días sin contactar con nuestro AD.

Pasos

# ==========================

#  VARIABLES DEL USUARIO

# ==========================

$SMTPServer = "smtp.com"

$SMTPPort   = 25

$From       = "HelpDesk@Miempresa.com"

$To         = "alertas@Miempresa.com"

$Subject    = "OU Computers que llevan tiempo sin conectar"

 # ==========================

#  CONFIGURACIÓN

# ==========================

Import-Module ActiveDirectory

 

$Hoy = (Get-Date)

$Dias30 = $Hoy.AddDays(-30)

$Dias60 = $Hoy.AddDays(-60)

 # ==========================

#  OBTENER EQUIPOS AD

# ==========================

$Equipos = Get-ADComputer -Filter * -Properties Description, LastLogonTimestamp, CanonicalName |

    Select-Object Name,

                  Description,

                  @{Name="OU";Expression={($_.CanonicalName -replace "^[^/]+/","")}},

                  @{Name="LastLogon";Expression={[DateTime]::FromFileTime($_.LastLogonTimestamp)}}

 # ==========================

#  FILTRADOS

# ==========================

$Entre30y60 = $Equipos | Where-Object { $_.LastLogon -le $Dias30 -and $_.LastLogon -gt $Dias60 }

$Mas60      = $Equipos | Where-Object { $_.LastLogon -le $Dias60 }

 # ==========================

#  GENERAR TABLAS HTML

# ==========================

function Convert-ToHtmlTable {

    param($Data, $Titulo)

 

    if ($Data.Count -eq 0) {

        return "<h3>$Titulo</h3><p>No hay equipos en este rango.</p>"

    }

 

    $Data | Select-Object Name, Description, OU, LastLogon |

        ConvertTo-Html -Fragment -PreContent "<h3>$Titulo</h3>"

}

 $Html30_60 = Convert-ToHtmlTable -Data $Entre30y60 -Titulo "Equipos sin conectar entre 30 y 60 dias"

$Html60    = Convert-ToHtmlTable -Data $Mas60 -Titulo "Equipos sin conectar mas de 60 dias"

 # ==========================

#  EMAIL HTML

# ==========================

$Body = @"

<html>

<head>

<style>

table { border-collapse: collapse; width: 100%; }

th, td { border: 1px solid #999; padding: 6px; text-align: left; }

th { background-color: #f2f2f2; }

h3 { font-family: Arial; }

</style>

</head>

<body>

<h2>Informe de equipos que llevan tiempo sin conectar</h2>

<p>Generado desde SRVDC04 $(Get-Date -Format "dd/MM/yyyy HH:mm")</p>

 

$Html30_60

<br>

$Html60

 

</body>

</html>

"@

 # ==========================

#  ENVÍO DEL EMAIL

# ==========================

Send-MailMessage -From $From -To $To -Subject $Subject -Body $Body -BodyAsHtml `

    -SmtpServer $SMTPServer -Port $SMTPPort


El resultado vendría a ser un email así: 



by GoN | Published: Mar 2026 | Last Updated:

 

No hay comentarios: