Como podemos detectar y quitar las cuentas de equipos inactivos de nuestro Active Directory {HowTo}

Broom_icon_svgHoy vamos a ver como podemos detectar y quitar las cuentas de equipos inactivos, aquellos que por alguna razón quedaron obsoletos en nuestro Active Directory.

Tengo que hacer una salvedad en cuanto al procedimiento que hoy vamos a ver, hace unas semanas escribí una nota en donde explicaba Como deshabilitar los cambios de contraseña de cuenta de maquina automática {HowTo}; si aplicamos dicha nota este procedimiento no sirve y vamos a tener que utilizar otro script para ver que equipo esta obsoleto y cual no.

Esto se debe a que como parte de seguridad de Windows NT, las contraseñas de cuenta de equipo se cambian cada siete días. El proceso que veremos hoy, justamente se basa en en la edad de la contraseña de cuenta de equipo para determinar su validez. Entonces, si existe la posibilidad que un administrador haya deshabilitado los cambios de contraseña de cuentas de equipo automático, entonces no tiene sentido todo este proceso.

Aclarado esto, les paso los scripts que utilizaremos:

Oldms.bat

@echo off
if "%1"=="" goto nodomain
set dom=%1
set deloldms=
netdom /d:%1 bdc | find "Found PDC" > temp4.txt
for /f "tokens=3" %%a in (temp4.txt) do set pdc=%%a
if exist ms2.txt del ms2.txt
if exist output.txt del output.txt
if exist out2.txt del out2.txt
if exist temp4.txt del temp4.txt
echo.
echo Generating Server List of Member Servers and Workstations
echo.
echo Please Wait…
netdom /d:%1 /noverbose member > MS.TXT
for /F "delims=\\ tokens=1" %%a in (ms.txt) do echo %%a >> MS2.TXT
cls
echo.
echo Generating List of Member Servers and Workstations – Done
echo.
echo List Generated.  Checking Password Ages.
echo.
echo Please Wait…
for /F "tokens=1" %%a in (ms2.txt) do call oldms2.bat %%a %dom% %pdc%
sort < output.txt > out2.txt
del output.txt
echo Machine account ages for domain: %dom% >> output.txt
echo ———————————————— >> output.txt
type out2.txt >> output.txt
if exist ms.txt del ms.txt
if exist out2.txt del out2.txt
if exist temp3.txt del temp3.txt
if exist ms2.txt del ms2.txt
if exist temp.txt del temp.txt
if exist temp4.txt del temp4.txt
if exist total.txt del total.txt
if exist working.txt del working.txt
FOR /F "SKIP=2 tokens=1,2,3" %%A IN (OUTPUT.TXT) DO echo %%A %%B
%%C>>working.txt
type working.txt|find " " /c>total.txt
for /f "tokens=1" %%A in (total.txt) do set deloldms=%%A
echo.
Echo List Complete
echo.
Echo %deloldms% machine accounts found.
echo.
if exist total.txt del total.txt
if exist working.txt del working.txt
goto end
:nodomain
echo Specify the target domain on the command line
echo EXAMPLE: oldms MyDomainName
:end

OldMS2.bat

rem %1 = member server
rem %2 = domain
rem %3 = pdc
nltest /server:%3 /user:%1$ | find "PasswordLastSet" > temp.txt
for /F "delims== tokens=2" %%a in (temp.txt) do oldms3.bat %%a %1

OldMS3.bat

rem %1 = date
rem %2 = time
rem %3 = member server
echo %1 > temp3.txt
for /F "delims=/ tokens=1,2,3" %%a in (temp3.txt) do oldms4.bat %%a
%%b %%c %2 %3

OldMS4.bat

rem %1 = month
rem %2 = day
rem %3 = year
rem %4 = time
rem %5 = member server
echo %3/%1/%2 %4 %5 >> output.txt
              

DelOldMS.bat

@echo off
set dom=
set deloldms=
if exist total.txt del total.txt
if exist working.txt del working.txt
FOR /F "SKIP=2 tokens=1,2,3" %%A IN (OUTPUT.TXT) DO echo %%A %%B %%C>>working.txt
type working.txt|find " " /c>total.txt
for /f "tokens=1" %%A in (total.txt) do set deloldms=%%A
cls
echo.
Echo NOTICE: %deloldms% machine accounts found in OUTPUT.TXT, ready for deletion
Echo Press Ctrl + C to abort or..
echo.
pause
FOR /f "tokens=6" %%a in (output.txt) do set dom=%%a
if "%dom%"=="" goto nodomain
FOR /F "SKIP=2 TOKENS=3" %%A IN (OUTPUT.TXT) DO CALL BAT2 %%A
if exist total.txt del total.txt
if exist working.txt del working.txt
goto end
:nodomain
echo Domain Name Missing from OUTPUT.TXT
Echo Re-run OLDMS.BAT
:end

Bat2.bat

NETDOM /d:%dom% MEMBER %1 /DELETE

Bueno, hechos los scripts veremos el orden y como utilizarlos. Como pueden ver en ellos, utilizamos varios scripts que a su vez utilizan herramientas del Resource Kit, como puede ser el NetDom.exe.

Con ellos, podremos crear una lista de cuentas de equipo ordenados según la última vez que la contraseña de la cuenta de equipo se actualizó. Con dicha lista, podremos examinarla para luego quitar todas cuentas de equipo que consideramos activas, dejando sólo las cuentas de equipo antiguas en la lista restante. Con esta lista restante, por medio de un script se eliminaran sistemáticamente las cuentas de equipo antiguas utilizando herramientas del kit de recursos de Windows.

  • Tenemos que ejecutar el script Oldms.bat desde línea de comando, recordemos ejecutarlo como administrador. La sintaxis es la siguiente:
    OLDMS.BAT NombreDeDominio
  • Abrimos el archivo output.txt con un editor de texto y eliminamos todas las líneas que contienen las cuentas de equipo que son validos, que estan activos, dejando solo las que queremos eliminas.  Entonces, el archivo output.txt deben contener sólo cuentas de equipo que se eliminarán.
  • Ahora ejecutamos el archivo Deloldms.bat. Este archivo lee el archivo Output.txt y elimina cada cuenta de equipo con la linea de comando Netdom.exe.

Espero que les sea de utilidad. Saludos, Roberto Di Lello.

Mas Información:

Roberto Di Lello

Acerca del autor: Roberto Di Lello

Hola, soy Roberto Di Lello trabajo como Consultor Senior en Infraestructura, especializado en Tecnologias Microsoft con mas de 25 años en la industria. He sido galardonado como MS-MVP en Active Directory-Enterprise Mobility por 10 años, y actualmente soy MVP Windows Insider, ademas de poseer otras certificaciones de Microsoft. He trabajado en distintos projectos que involucran Migraciones, Implementaciones, y soporte de Active Directory y Microsoft Exchange, y en los ultimos años me he desempeñado armando equipos de trabajo para diferentes paises y areas de sistemas, he planificado a distintas migraciones a datacenters (ambiente cloud y mixtos). He tenido la oportunidad de participar como miembro del staff de Microsoft en eventos internacionales como ser TechEd NorteAmerica y MS Ignite (NA) al ser Trainer Certificado por Microsoft (MCT).

You May Also Like

4 Comments

  1. Hola Robeto,

    Le queria hacer una consulta, el windows server backup de la version w2k8 R2, al realizar los respaldos programados del sistema, la primera copia me la hace con un tamaño de 7 Gigas, pero las posteriores de 150 megas, 100 megas, entiendo que se me esta haciendo un backup diferencail o incremental pero deseo que sea uno completo del sistema diario, y no encuentro la forma de realizarlo completo.

    ¿Donde puede estar el problema?

  2. Estimado,

    Junto con agradecer y felicitarte por tu blog queria hacerte una consulta, dado que no encontre una información clara al respecto SOBRE:

    Migracion de Active Directory Windows 2003 a Windows 2008.

  3. Patrico Avila, muchas gracias por participar del blog y ayudar a que siga creciendo. Busca en el Blog que tienes mucho material sobre migraciones de Active Directory, con videos y todo.

    Saludos.

  4. Alberto. muchas gracias por participar del blog y ayudar a que siga creciendo. Verifica cuando armas el Job de backup, ahi tienes la opcion para realizar un FULL Backup.

    Saludos.

Comments are closed.