{"id":1470,"date":"2011-12-01T11:32:24","date_gmt":"2011-12-01T14:32:24","guid":{"rendered":"http:\/\/www.radians.com.ar\/blog\/?p=1470"},"modified":"2011-12-01T11:32:24","modified_gmt":"2011-12-01T14:32:24","slug":"como-podemos-detectar-y-quitar-las-cuentas-de-equipos-inactivos-de-nuestro-active-directory-howto","status":"publish","type":"post","link":"https:\/\/www.radians.com.ar\/blog\/?p=1470","title":{"rendered":"Como podemos detectar y quitar las cuentas de equipos inactivos de nuestro Active Directory {HowTo}"},"content":{"rendered":"<p align=\"justify\"><a href=\"http:\/\/www.radians.com.ar\/Articulos\/Images\/81f1a1d39172_8BF1\/Broom_icon_svg.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"Broom_icon_svg\" border=\"0\" alt=\"Broom_icon_svg\" align=\"left\" src=\"http:\/\/www.radians.com.ar\/Articulos\/Images\/81f1a1d39172_8BF1\/Broom_icon_svg_thumb.png\" width=\"240\" height=\"240\" \/><\/a><font size=\"2\">Hoy vamos a ver como podemos detectar y quitar las cuentas de equipos inactivos, aquellos que por alguna raz\u00f3n quedaron obsoletos en nuestro Active Directory.<\/font><\/p>\n<p align=\"justify\"><font size=\"2\">Tengo que hacer una salvedad en cuanto al procedimiento que hoy vamos a ver, hace unas semanas escrib\u00ed una nota en donde explicaba <\/font><a href=\"http:\/\/www.radians.com.ar\/blog\/?p=1464\"><font size=\"2\">Como deshabilitar los cambios de contrase\u00f1a de cuenta de maquina autom\u00e1tica {HowTo}<\/font><\/a><font size=\"2\">; 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.<\/font><\/p>\n<p align=\"justify\"><font size=\"2\">Esto se debe a que como parte de seguridad de Windows NT, las contrase\u00f1as de cuenta de equipo se cambian cada siete d\u00edas. El proceso que veremos hoy, justamente se basa en en la edad de la contrase\u00f1a de cuenta de equipo para determinar su validez. Entonces, si existe la posibilidad que un administrador haya deshabilitado los cambios de contrase\u00f1a de cuentas de equipo autom\u00e1tico, entonces no tiene sentido todo este proceso.<\/font><\/p>\n<p align=\"justify\"><font size=\"2\">Aclarado esto, les paso los scripts que utilizaremos:<\/font><\/p>\n<h2>Oldms.bat<\/h2>\n<p><font color=\"#ff0000\" face=\"OCR A Extended\">@echo off     <br \/>if &quot;%1&quot;==&quot;&quot; goto nodomain      <br \/>set dom=%1      <br \/>set deloldms=      <br \/>netdom \/d:%1 bdc | find &quot;Found PDC&quot; &gt; temp4.txt      <br \/>for \/f &quot;tokens=3&quot; %%a in (temp4.txt) do set pdc=%%a      <br \/>if exist ms2.txt del ms2.txt      <br \/>if exist output.txt del output.txt      <br \/>if exist out2.txt del out2.txt      <br \/>if exist temp4.txt del temp4.txt      <br \/>echo.      <br \/>echo Generating Server List of Member Servers and Workstations      <br \/>echo.      <br \/>echo Please Wait&#8230;      <br \/>netdom \/d:%1 \/noverbose member &gt; MS.TXT      <br \/>for \/F &quot;delims=\\\\ tokens=1&quot; %%a in (ms.txt) do echo %%a &gt;&gt; MS2.TXT      <br \/>cls      <br \/>echo.      <br \/>echo Generating List of Member Servers and Workstations &#8211; Done      <br \/>echo.      <br \/>echo List Generated.&#160; Checking Password Ages.      <br \/>echo.      <br \/>echo Please Wait&#8230;      <br \/>for \/F &quot;tokens=1&quot; %%a in (ms2.txt) do call oldms2.bat %%a %dom% %pdc%      <br \/>sort &lt; output.txt &gt; out2.txt      <br \/>del output.txt      <br \/>echo Machine account ages for domain: %dom% &gt;&gt; output.txt      <br \/>echo &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &gt;&gt; output.txt      <br \/>type out2.txt &gt;&gt; output.txt      <br \/>if exist ms.txt del ms.txt      <br \/>if exist out2.txt del out2.txt      <br \/>if exist temp3.txt del temp3.txt      <br \/>if exist ms2.txt del ms2.txt      <br \/>if exist temp.txt del temp.txt      <br \/>if exist temp4.txt del temp4.txt      <br \/>if exist total.txt del total.txt      <br \/>if exist working.txt del working.txt      <br \/><\/font><font color=\"#ff0000\" face=\"OCR A Extended\">FOR \/F &quot;SKIP=2 tokens=1,2,3&quot; %%A IN (OUTPUT.TXT) DO echo %%A %%B     <br \/>%%C&gt;&gt;working.txt      <br \/>type working.txt|find &quot; &quot; \/c&gt;total.txt      <br \/>for \/f &quot;tokens=1&quot; %%A in (total.txt) do set deloldms=%%A      <br \/>echo.      <br \/>Echo List Complete      <br \/>echo.      <br \/>Echo %deloldms% machine accounts found.      <br \/>echo.      <br \/>if exist total.txt del total.txt      <br \/>if exist working.txt del working.txt      <br \/>goto end      <br \/>:nodomain      <br \/>echo Specify the target domain on the command line      <br \/>echo EXAMPLE: oldms MyDomainName      <br \/>:end<\/font><\/p>\n<h2>OldMS2.bat<\/h2>\n<p><font color=\"#ff0000\" face=\"OCR A Extended\">rem %1 = member server     <br \/>rem %2 = domain      <br \/>rem %3 = pdc      <br \/>nltest \/server:%3 \/user:%1$ | find &quot;PasswordLastSet&quot; &gt; temp.txt      <br \/>for \/F &quot;delims== tokens=2&quot; %%a in (temp.txt) do oldms3.bat %%a %1<\/font><\/p>\n<h2>OldMS3.bat<\/h2>\n<p><font color=\"#ff0000\" face=\"OCR A Extended\">rem %1 = date     <br \/>rem %2 = time      <br \/>rem %3 = member server      <br \/>echo %1 &gt; temp3.txt      <br \/><\/font><font color=\"#ff0000\" face=\"OCR A Extended\">for \/F &quot;delims=\/ tokens=1,2,3&quot; %%a in (temp3.txt) do oldms4.bat %%a      <br \/>%%b %%c %2 %3<\/font><\/p>\n<h2>OldMS4.bat <\/h2>\n<p><font color=\"#ff0000\" face=\"OCR A Extended\">rem %1 = month     <br \/>rem %2 = day      <br \/>rem %3 = year      <br \/>rem %4 = time      <br \/>rem %5 = member server      <br \/>echo %3\/%1\/%2 %4 %5 &gt;&gt; output.txt<\/font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/p>\n<h2>DelOldMS.bat<\/h2>\n<p><font color=\"#ff0000\" face=\"OCR A Extended\">@echo off     <br \/>set dom=      <br \/>set deloldms=      <br \/>if exist total.txt del total.txt      <br \/>if exist working.txt del working.txt      <br \/><\/font><font color=\"#ff0000\" face=\"OCR A Extended\">FOR \/F &quot;SKIP=2 tokens=1,2,3&quot; %%A IN (OUTPUT.TXT) DO echo %%A %%B %%C&gt;&gt;working.txt     <br \/>type working.txt|find &quot; &quot; \/c&gt;total.txt      <br \/>for \/f &quot;tokens=1&quot; %%A in (total.txt) do set deloldms=%%A      <br \/>cls      <br \/>echo.      <br \/>Echo NOTICE: %deloldms% machine accounts found in OUTPUT.TXT, ready for deletion      <br \/>Echo Press Ctrl + C to abort or..      <br \/>echo.      <br \/>pause      <br \/>FOR \/f &quot;tokens=6&quot; %%a in (output.txt) do set dom=%%a      <br \/>if &quot;%dom%&quot;==&quot;&quot; goto nodomain      <br \/>FOR \/F &quot;SKIP=2 TOKENS=3&quot; %%A IN (OUTPUT.TXT) DO CALL BAT2 %%A      <br \/>if exist total.txt del total.txt      <br \/>if exist working.txt del working.txt      <br \/>goto end      <br \/>:nodomain      <br \/>echo Domain Name Missing from OUTPUT.TXT      <br \/>Echo Re-run OLDMS.BAT      <br \/>:end<\/font><\/p>\n<h2>Bat2.bat<\/h2>\n<p><font color=\"#ff0000\" face=\"OCR A Extended\">NETDOM \/d:%dom% MEMBER %1 \/DELETE<\/font><font color=\"#ff0000\" face=\"OCR A Extended\"><\/font><\/p>\n<p align=\"justify\"><font size=\"2\">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 <font color=\"#ff0000\" face=\"OCR A Extended\">NetDom.exe<\/font>.<\/font><\/p>\n<p align=\"justify\"><font size=\"2\">Con ellos, podremos crear una lista de cuentas de equipo ordenados seg\u00fan la \u00faltima vez que la contrase\u00f1a de la cuenta de equipo se actualiz\u00f3. Con dicha lista, podremos examinarla para luego quitar todas cuentas de equipo que consideramos activas, dejando s\u00f3lo las cuentas de equipo antiguas en la lista restante. Con esta lista restante, por medio de un script se eliminaran sistem\u00e1ticamente las cuentas de equipo antiguas utilizando herramientas del kit de recursos de Windows. <\/font><\/p>\n<ul>\n<li>\n<div align=\"justify\"><font size=\"2\">Tenemos que ejecutar el script <font color=\"#ff0000\" face=\"OCR A Extended\">Oldms.bat <\/font>desde l\u00ednea de comando, recordemos ejecutarlo como administrador. La sintaxis es la siguiente:           <br \/><font color=\"#ff0000\" face=\"OCR A Extended\">OLDMS.BAT <font color=\"#ff0000\" face=\"OCR A Extended\">NombreDeDominio <\/font><\/font><\/font><\/div>\n<\/li>\n<li>\n<div align=\"justify\"><font size=\"2\">Abrimos el archivo <font color=\"#ff0000\" face=\"OCR A Extended\">output.txt <\/font>con un editor de texto y eliminamos todas las l\u00edneas que contienen las cuentas de equipo que son validos, que estan activos, dejando solo las que queremos eliminas.&#160; <strong>Entonces, el archivo <font color=\"#ff0000\" face=\"OCR A Extended\">output.txt <\/font>deben contener s\u00f3lo cuentas de equipo que se eliminar\u00e1n.<\/strong> <\/font><\/div>\n<\/li>\n<li>\n<div align=\"justify\"><font size=\"2\">Ahora ejecutamos el archivo <font color=\"#ff0000\" face=\"OCR A Extended\">Deloldms.bat<\/font>. Este archivo lee el archivo <font color=\"#ff0000\" face=\"OCR A Extended\">Output.txt <\/font>y elimina cada cuenta de equipo con la linea de comando <font color=\"#ff0000\" face=\"OCR A Extended\">Netdom.exe<\/font>.<\/font> <\/div>\n<\/li>\n<\/ul>\n<p>Espero que les sea de utilidad. Saludos, Roberto Di Lello.<\/p>\n<h2>Mas Informaci\u00f3n:<\/h2>\n<ul>\n<li><a href=\"http:\/\/support.microsoft.com\/kb\/154501\/EN-US\">KB154501 &#8211; C\u00f3mo deshabilitar los cambios de contrase\u00f1a de cuenta de equipo autom\u00e1ticas<\/a> <\/li>\n<li><a href=\"http:\/\/support.microsoft.com\/kb\/158148\/EN-US\">KB158148 &#8211; Dominio Secure Channel Utility&#8211;Nltest.exe<\/a><\/li>\n<li><a title=\"http:\/\/support.microsoft.com\/default.aspx?scid=kb;EN-US;197478\" href=\"http:\/\/support.microsoft.com\/kb\/197478\">KB197478<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Hoy vamos a ver como podemos detectar y quitar las cuentas de equipos inactivos, aquellos&#8230;<\/p>\n","protected":false},"author":1,"featured_media":4291,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[12],"tags":[],"class_list":["post-1470","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-2003-r2"],"_links":{"self":[{"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1470","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1470"}],"version-history":[{"count":0,"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1470\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=\/wp\/v2\/media\/4291"}],"wp:attachment":[{"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1470"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1470"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.radians.com.ar\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1470"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}