Script para enviar mail con equipos de AD < ServicePack deseado
Escrito por xavixaus en February 1st, 2010
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
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:
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.
Artículos relacionados:
- Solución al problema “Acceso denegado” al agregar equipos ya existentes al dominio.
- Preparar bosque y dominio para domain controllers W2k8 R2
- Conceder permisos a root para acceder por SSH en VMware ESX.
- Resolver problema con JRNL_WRAP_ERROR (FRS Event ID 13568 o 13561)
- Parte 1.- Como asignar GPO únicamente a objetos Workstation en AD.