
Soy nuevo en este puesto y encuentro que su estructura AD necesita una limpieza seria. Hay más del doble de cuentas de computadora que empleados, sin tener en cuenta los servidores. Me gustaría poder saber cuáles de ellos siguen vigentes y cuáles se pueden eliminar sin repercusiones.
Encontré la herramienta de Joeware, OldComp, parece bastante útil, pero supongo que solo necesito comprender un poco más lo que está mirando... cuando busca computadoras con más de 90 días, ¿eso significa que tienen 90 días? ¿Días desde que se conectó a la red? La razón detrás de esto es que no quiero desconectar inadvertidamente una computadora portátil de una oficina de campo que puede estar en un estante como respaldo, pensando que es una computadora "vieja" cuando en realidad simplemente no está enchufada ni en uso actualmente. Sin embargo, tal vez no valga la pena preocuparse por la rara posibilidad de que eso suceda...
De todos modos, si alguien conoce alguna otra forma o tiene un buen ejemplo de la mejor manera de lograrlo, agradecería alguna idea. El resultado final es que simplemente me gustaría poder deshacerme de las cuentas de computadora que ya no se utilizan. Gracias.
Respuesta1
Oldcmp
es bien conocido por lo que hace y funcionará bien por primera vez y en una limpieza ocasional.
Si, con el tiempo, desea un proceso automatizado, puede utilizar Powershell (muy recomendable) para escribir un proceso automatizado para ello. Por ejemplo, nuestro script actual hace lo siguiente:
- Localiza cuentas antiguas según
lastLogonTimeStamp
el usoget-ADcomputer
- los desactiva después de 60 días
- los elimina después de 90 días
- Registra todo lo que hace
Además, utilizamos el indicador ProtectFromAccidencialDeletion en la cuenta si no queremos que se elimine.
Respuesta2
No existe ningún método que pueda distinguir entre una máquina que ya no existe y que ya no existe y una que está en un estante sin usar, así que use OldComp para hacer la limpieza y ocuparse de las cosas puntuales si y cuando aparecen.
Respuesta3
¿Por qué no PowerShell?
$Computers = ([ADSISearcher]"(&(objectCategory=computer)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))").FindAll()
$Computers = $Computers | ForEach { $_.Path }
$Age = $(Get-Date).AddDays(-90)
$StaleComputerAccounts = @()
$NeverUsedComputerAccounts = @()
ForEach ($Computer in $Computers) {
$ComputerObj = [ADSI]$Computer
if ($ComputerObj.lastLogon) {
$LastLogon = [DateTime]::FromFileTime($ComputerObj.ConvertLargeIntegerToInt64($ComputerObj.lastlogon[0]))
if ( $LastLogon -lt $Age ) {
$StaleComputerAccounts += $Computer
}
}
else {
$NeverUsedComputerAccounts += $Computer
}
}
Deberías terminar con una lista $StaleComputerAccounts
que $NeverUsedComputerAccounts
luego podrás manipular con más PowerShell. Me gusta hacer algo como esto:
$TargetOU = "OU=Computers,OU=Disabled,OU=,DC=CONTOSO,DC=com"
$OUObj = [ADSI]"LDAP://$TargetOU"
ForEach ($Computer in $StaleComputerAccounts) {
$ComputerObj = [ADSI]$Computer
$ComputerObj.PSBase.MoveTo($OUObj)
$ComputerObj.InvokeSet("accountDisabled", $True)
$ComputerObj.SetInfo()
}
No existe una forma mágica de distinguir mediante programación entre una computadora que ha sido desmantelada incorrectamente (nadie la eliminó de Active Directory cuando estaba desconectada) y una computadora portátil que se encuentra en el escritorio de algún ejecutivo. Si desea actuar con cuidado, puede desactivar la cuenta y enviarla a una unidad organizativa específica como lo hago yo.