Finally the help of IT is here

Blog de soluciones informaticas.

Script para enviar mail con equipos de AD < ServicePack deseado

Escrito por Xavier Xaus Nadal on febrero 1st, 2010

Save pagePDF pageEmail pagePrint page

Hoy un poco de Active Directory desde línea de comandos.

Dirigido a la gente que no cree en el poder de la CMDLINE.

Recuerdo hace años que modificaba los ficheros AUTOEXEC.BAT y CONFIG.SYS para conseguir la máxima memoria posible (Recuerdo haber realizado competiciones por ello) (Seguro que muchos de los que me conocéis y habéis estado en mi mundillo os traerá gratos recuerdos).

Pues después de los años seguimos por ese camino. También la gran Microsoft con su PowerShell, Core version, etc..

Siguiendo con la tanda de artículos de WSUS os muestro un script que he realizado para sacar un listado numerado y por sistema operativo de los equipos de Active Directory que no dispongan de un Service Pack especifico, este listado se enviará por mail a una dirección de correo.

Requisitos previos:

1.- Herramientas de administración de Active Directory. (Windows 7, Vista x64, XP)

2.- Blat.exe (Programa para enviar mails por SMTP desde línea de comandos).

Inicio –> Ejecutar –> notepad c:\ServicePackList.cmd

Insertad el siguiente texto:

@ECHO OFF

ECHO Listado de todos los equipos de AD desde consulta LDAP según criterios Service Pack.
ECHO By Xavi Xaus.
ECHO 01.02.2010.

SET TXT=c:\ServicePackList.txt

ECHO ***             Listado servidores  a fecha %date%       **** > %TXT%
ECHO *** Listado equipos Windows Server 2003 sin SP2 **** >> %TXT%
ECHO. >> %TXT%
dsquery * -limit 5000 -filter “(&(objectCategory=computer)(objectClass=computer)(operatingSystem=*2003*)(!operatingSystemServicePack=Service\20Pack\202))” | find /n “CN” >> %TXT%
ECHO. >> %TXT%
ECHO *** Listado equipos Windows Server 2000 sin SP4 **** >> %TXT%
ECHO. >> %TXT%
dsquery * -limit 5000 -filter “(&(objectCategory=computer)(objectClass=computer)(operatingSystem=*2000\20*server*)(!operatingSystemServicePack=Service\20Pack\204))” | find /n “CN” >> %TXT%
ECHO. >> %TXT%
ECHO ***     Listado equipos Workstation      **** >> %TXT%
ECHO *** Listado equipos Windows 2000 sin SP4 **** >> %TXT%
ECHO. >> %TXT%
dsquery * -limit 5000 -filter “(&(objectCategory=computer)(objectClass=computer)(operatingSystem=Windows\202000\20Pro*)(!operatingSystemServicePack=Service\20Pack\204))” | find /n “CN” >> %TXT%
ECHO. >> %TXT%
ECHO *** Listado equipos Windows XP sin SP3 **** >> %TXT%
ECHO. >> %TXT%
dsquery * -limit 5000 -filter “(&(objectCategory=computer)(objectClass=computer)(operatingSystem=Windows\20XP*)(!operatingSystemServicePack=Service\20Pack\203))” | find /n “CN” >> %TXT%
ECHO. >> %TXT%
ECHO *** Listado equipos Windows Vista sin SP2 **** >> %TXT%
ECHO. >> %TXT%
dsquery * -limit 5000 -filter “(&(objectCategory=computer)(objectClass=computer)(operatingSystem=*Vista*)(!operatingSystemServicePack=Service\20Pack\202))” | find /n “CN” >> %TXT%
ECHO. >> %TXT%

notepad %TXT%

Inicio –> Ejecutar –> c:\ServicePackList.cmd

ConsultaLDAP_0

Y como no podría ser de otra forma os voy a explicar un poquillo que hemos hecho con este script.

SET TXT=c:\ServicePackList.txt

Esta línea guarda en la variable TXT el valor c:\ServicePackList.txt

ECHO ***               Listado servidores            **** > %TXT%

Esta línea crea un fichero c:\ServicePackList.txt  con el contenido: ***               Listado servidores            ****

ECHO. >> %TXT%

Esta línea realiza en el fichero c:\ServicePackList.txt una línea en blanco.

dsquery * -limit 5000 -filter “(&(objectCategory=computer)(objectClass=computer)(operatingSystem=*2003*)(!operatingSystemServicePack=Service\20Pack\202))”

Esta línea realiza una consulta LDAP mediante el comando dsquery limitando el listado a un máximo de 5000 valores y filtrando la consulta de la siguiente forma (Buscame todos los objeto computer que tengan un sistema operativo que contenga el texto 2003 y que el campo service pack no sea Service Pack 2.

Esta consulta también la podéis usar en la consola de Active Directory:

ConsultaLDAP_1

En la misma línea del script podemos observar que termina con un filtro | find /n “CN”

Esto muestra el número de línea de la búsqueda que contenga la frase “CN” y como la consulta LDAP devuelve un objeto CN pues ya tenemos un contador hecho.

Juntando la consulta con el filtro obtenemos el resultado [1] “CN=equipo, …””

Creo que con esto termina la explicación.

Ahora cambiad la línea notepad %TXT% por BLAT %TXT% -server correo.megacrack.es -f ServicePack@megacrack.es -s “Listado Equipos con Service Pack menor a esperado” –t “xavixaus@megacrack.es”

Funciona del siguiente modo BLAT <fichero a enviar> -server <servidor correo> -f <emisor> -s “<Asunto>” –t “<destinatario>” y tendremos en nuestro email el resultado de nuestro script.

Ahora ya podemos ejecutar esto como una tarea programada para que nos llegue un mail por ejemplo diario con el resultado deseado.

Hasta pronto.

Si tenéis cualquier duda ya sabéis, en comentarios seréis bienvenidos. No temáis en preguntar lo que sea, que no todo el mundo tiene por que entender pizca de este artículo.

Related Posts Plugin for WordPress, Blogger...
Etiquetas: , , , , , , , , , ,


Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>