Archive

Archive for the ‘Windows’ Category

Instalacion IIS, falta el fichero iisadmin.mfl o iisadmin.mf_ en I386

March 10th, 2010 Roberto Clemente No comments

Hola:

El escenario es el siguiente, tras instalar una máquina con el CD de windows 2003 server standard, se instalan todas las actualizaciones al último nivel (incluidos service packs).

Tras tenerla en el ultimo nivel de parches, intentas instalar el IIS (appwiz.msc, añadir componentes de windows, servidor de aplicación etc) y pide un archivo (iisadmin.mfl o iisadmin.mf_) Este archivo lo buscas en el cd original, carpeta I386, pero no lo localiza.

Esto se debe a que se añadió en un service pack por lo que no existia en el cd que tenemos. Para solucionarlo, puedes indicarle al instalador que busque en la siguiente ruta:

%windir%\ServicePackFiles\i386\

Es posible que tengas que utilizar esa ruta y la carpeta I386 alternativamente hasta que concluya la instalación de forma satisfactoria.

Al finalizar, volver a actualizar al último nivel de parches.

Este problema también lo puedes solucionar instalando el IIS antes de realizar la instalación de los service packs.

Espero que os sea de ayuda!

Saludos

Digilux Administrators Team

Categories: Windows Tags: , , ,

Recuperación del error de NTFRS: JRNL_WRAP_ERROR con el valor del registro: Enable Journal Wrap Automatic Restore

February 26th, 2010 Roberto Clemente No comments

Si En algun momento el servicio de replicación de archivs, NTFRS, NT File Replication Service falla con un error JRNL_WRAP_ERROR, tan solo deberemos actuar de la siguiente manera:

1.- Abrir el registro e ir a la rama:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NtFrs\Parameters\
2.- Añadir el valor DWORD (o actualizarlo si ya existe):
“Enable Journal Wrap Automatic Restore”
3.- Asignar valor: 1
4.- Ejecutar desde la linea de comandos:
net stop ntfrs
net start ntfrs
Esperar unos 20 segundos y volver a fijar el valor del registro a 0
5.- Monitorizar el visor de eventos hasta ver que lo ha eliminado del set de replica y lo ha vuelto a añadir. Desde ese punto recuperaremos el DC en su operación habitual.

Saludos,

Categories: Windows Tags: , ,

Como compilar un .exe a partir de un script VB sin Visual Studio con vbc.exe

August 18th, 2009 Roberto Clemente No comments

Para compilar un .exe a partir de un script, necesitamos un compilador, el problema aparece cuando no tenemos disponible ninguno comercial, con un interface amigable etc.

Desde que .Net Framework apareció, tenemos una posibilidad gratuita para poder compilar, eso sí, no todo el mundo conoce como hacerlo funcionar, Intentaré explicarlo paso a paso.
Read more…

Categories: Windows, scripting Tags: , ,

Colecciones VBS, Ejemplos de diccionarios para scripting

August 18th, 2009 Roberto Clemente No comments

Hola:

El articulo de hoy es muy sencillo, se trata de un tipo de objeto muy potente que almacenará colecciones de pares de datos. Veremos como utilizarlo y posibles aplicaciones.

Los que tengais experiencia con perl, es parecido a un array asociativo, es decir asocia pares nombre-valor n veces. Es muy útil cuando estamos trabajando scripting, ya que para tareas repetitivas y no demasiado complejas, no es necesario utilizar una DB para almacenar los pares.
Read more…

Listar propiedades de un proceso o servicio de sistema operativo

July 31st, 2009 Roberto Clemente 2 comments

Hola,

Hoy veremos un script muy sencillo escrito en VBS que consulta por WMI a un proceso. La lógica del script es muy sencilla y se puede adaptar a vuestras necesidades con pocas modificaciones.

 '################
' BindToProcessWmi.vbs
'
' Author: Roberto Clemente Bustamante - Digilux Admin Team
'################

'Declaración de variables y constantes
dim objfile
dim objdestination
dim strline

CONST WTER ="processCPUperc.txt"       'NOMBRE FICHERO PARA ESCRIBIR
'Inicializacion objeto FSO y fichero de log
set objfile = createobject("scripting.filesystemobject")
set objdestination = objfile.opentextfile(WTER,8,true)

'Recuperar procesos que estén en uso en la CPU

for each Process in GetObject("winmgmts:{impersonationLevel=impersonate}//localhost").ExecQuery("Select name,PercentProcessorTime,IDProcess from Win32_PerfFormattedData_PerfProc_Process where PercentProcessorTime > 0")' where IDProcess=" & strproc)

'Descarte del total y del no utilizado
if (process.name = "_Total" or process.name = "Idle") then
'Aqui se puede introducir código para cuando se cumpla la condicion
else
'Volcado al log
objdestination.writeline day(now)& "-" & month (now)& "-" & year(now)& ":" & Hour(now) & ":"& Minute(now) & " - " & process.name & " - %: " & process.percentprocessortime & " - ID:" & process.idprocess

end if

Read more…

Los grupos protegidos del directorio activo.

June 23rd, 2009 Roberto Clemente No comments

Comprendiendo el funcionamiento de los grupos protegidos del directorio Activo. Como son y como funcionan: Propagador SD, FixUpInheritance, AdminSDHolder, SDPRO, AdminSDProtectFrequency, Problemas con la delegación de privilegios en Active Directory

Si has llegado hasta este artículo, probablemente tengas algún tipo de noción de directorio activo, y es probable que, lo que aquí contemos, lo sepas o por lo menos lo intuyas.

Tras varios años dando soporte a infraestructuras de directorio activo, han aparecido en varias ocasiones problemas relacionados con los grupos protegidos. Por lo tanto, la pregunta, a priori, es muy sencilla… ¿Porqué se elimina lo que configuro en las ACL’s de ciertos objetos del directorio, si he asignado que reciban los privilegios por herencia? según aclaremos conceptos iremos complicando el escenario para entender el alcance de todos estos conceptos y como se combinan unos con otros.

¿Qué son los grupos protegidos del directorio activo?

Los grupos protegidos del directorio activo son aquellos grupos sensibles de tener delegados ciertos privilegios especiales, y por tanto sus miembros no están sujetos a las mismas normas que otros usuarios. Mas adelante veremos el detalle de cuales son

¿Qué efectos tiene la membresía a grupos protegidos del directorio activo?

Cuando un objeto del AD pertenece a un grupo protegido, este objeto recibirá cada vez que ocurra una propagación SD (por defecto cada 60 minutos) la herencia de las entradas ACL’s de seguridad explícitamente indicadas en la ACL de AdminSDHolder

Clarito, verdad? Volvamos hacia atrás.

¿Qué es una propagación SD, SD Propagador?
Read more…

Extraer información de un log extremadamente grande. Usa Notepad.exe y VBS!

¿Como puedo extraer información de un log demasiado grande para excel sin ninguna herramienta?

En muchas ocasiones, la respuesta sería, utiliza logparser! o… cargalo en una base de datos y luego ejecutas una query y sacas lo que necesites!!

¿y si no puedo?

Un administrador en una emergencia hay muchas veces que no tiene nada a mano en el host donde es necesario, y cualquier movimiento de un log de bastantes MB puede resultar bastante incomodo, sobre todo si hay lentitud en la red, reglas en los firewalls etc.

‘ExtractLines.vbs By Roberto Clemente Bustamante. Digilux Admins Team
dim objfile
dim objsource
dim objdestination
dim strline

CONST RDER =”ex040221.log” ‘NOMBRE FICHERO PARA LEER
CONST WTER =”resultados.txt” ‘NOMBRE FICHERO PARA ESCRIBIR
CONST SCODE =”SMTP” ‘CADENA DE TEXTO A EXTRAER

‘Option Compare Text

set objfile = createobject(”scripting.filesystemobject”)

set objsource = objfile.opentextfile(RDER,1)
set objdestination = objfile.opentextfile(WTER,2)

do until objsource.atendofstream

strline = trim (objsource.readline())

if (instr (1, strline , SCODE)) then

objdestination.writeline (strline)

end if

loop

set objsource = nothing
set objdestination = nothing
set objfile = nothing

Este es uno de mis scripts mas sencillos y útiles. Voy a explicaros los diferentes usos que yo personalmente le doy.

1.- Ejemplo de “Lector y escritor” :

Cuando estudias programación, el algoritmo del lector y el escritor te lo explican de forma teórica y se vé en algún ejemplo. Básicamente el script hace esto, lee de un origen, y escribe en un destino. Para reutilizar código, lo he utilizado cientos de veces. Un programador, además de programar, debe saber reciclar código, y este script lo he abierto centenares de veces como el típico ejemplo de lector y escritor

2.- Parser, extractor, reductor… :
Otro uso es, que como arriba están declaradas las constantes (fichero de entrada, fichero de salida y SCODE (Search code o código de busqueda) en menos de 2 minutos podemos preparar un script que hará el trabajo tedioso por nosotros. Por ejemplo, supongamos que hay un fichero con mas de 66000 lineas (mas que suficiente para “reventar” lo que te acepta el Excel y por lo tanto no poder utilizarlo) Pues bien, abrir el notepad con este archivo, según en qué servidor es tarea de alto riesgo, quiero decir, si estamos muy justitos, no podemos cargarlo en memoria si no queremos comprometer según qué máquina…

Pues bíen, ponemos el script, parametrizamos lo que queramos extraer, por ejemplo “error” o “warning” o la ip de ese host que sospechamos que puede no tener demasiadas buenas intenciones en el SCODE. El fichero de entrada de log y el nombre del fichero de salida. Comprobamos que al menos tengamos tanto espacio libre como ocupa el fichero original, ejecutamos, esperamos unos minutos y et voila! tenemos el fichero de resultados.

3.- Adaptalo a tus necesidades: Las posibilidades de adaptación de este script son fantásticas, por ejemplo, cambiando la condicional del strline y el orden de los bucles podemos reutilizarlo para extraer los comentarios de un fichero de configuración tipo main.cf (como los de postfix) que están repletos de comentarios y mas comentarios y no se sabe donde está la config y donde el comentario … :-)

4.- ¿Que mas quieres? : En realidad, el script es bastante de perogrullo, y simplemente hay que tener algo de originalidad en su uso, pero os garantizo de que mi biblioteca particular es uno de esos pilares que siempre sabes que tienes a mano para casi cualquier cosa!!

Nota:

Por cierto, hice un copiar y pegar directamente desde esta página porque no tenia mi biblioteca a mano, y si os falla, es por las comillas, simples y dobles, que cuando las pega en el notepad las cambia por otras…. Recordad modificarlo, todo en el script que aparece con dobles comillas son dobles comillas (de las de mayusculas + 2) y todas las comillas simples, son comillas simples (de las de la derecha del 0)

Categories: Windows, scripting Tags: , , ,

Como ejecutar un script VBS bajo otras credenciales con runas.

Una de las cosas que siempre eché en falta en VBS fué que cuando seleccionaba un script, si le pulsaba al botón derecho buscando “ejecutar como” o “run as”, al tratarse de un fichero VBS no lo mostraba. ¿Queria esto decir que no podia ejecutar el script bajo unas credenciales diferentes?.

El caso es que no, en realidad el problema es que un script no es un ejecutable. En el caso de VBScript, en realidad lo que ocurre cuando hacemos doble click sobre el mismo, al estar la extension .vbs asociada al interprete (cscript o wscript) se llama al ejecutable y al usuario nos hace “transparente” la operacion, ya sabeis, los chicos de MS procuran siempre hacertelo cómodo,  aún cuando lo que consiguen es añadir una capa más a entender si quieres estar al tanto de qué está ocurriendo…

Bueno, la respuesta es sencilla ahora, ¿como ejecutamos un script bajo otras credenciales? Si abrimos una consola de comandos, podemos usar una sentencia de este tipo:

runas /profile /user:DOMINIO\USUARIO “cscript.exe c:\scripts\test.vbs”

esto funcionará, pero… hay otro problema, ¿que ocurre si hay espacios en la ruta? es decir, en el caso anterior, funciona porque no hay espacios en c:\scripts\test.vbs, pero y si fuera c:\mis scripts\test.vbs ? La respuesta es que fallaria.

Ahora explicaré algo sobre los carácteres de escape… bajo comando, debes escapar las comillas con \” , de esta forma, no lo considera el final del entrecomillado, es decir, para que el espacio sea considerado, puedes poner:

runas /profile /user:DOMINIO\USUARIO “cscript.exe \”c:\mis scripts\test.vbs”\”

De esta forma, considera un bloque la ruta al script, y otro bloque el comando cscript y la ruta como argumento.

Ahora que ya está explicado, voy a aprovechar para explicar como saber el dominio del usuario que está ejecutando el script con vbs. Lo primero, voy a explicar que es el RootDSE. A partir de LDAP 3.0 , rootdse es la raiz del arbol de directorio en un servidor de directorio LDAP, es decir, rootdse no es parte de ningun espacio de nombres, solo hace referencia a la raiz. En un directorio activo, por tanto, coincide en la mayoria de los casos con el nombre del directorio. Por ejemplo, si yo tengo un dominio miempresa.local , su DN (Distinguished Name) sería dc=miempresa,dc=local . Pues bién, esto coincide con el defaultNamingContext (atributo de rootDSE).

Explicado esto, este script nos dará el dato que necesitamos:

Set objRootDSE = GetObject(”LDAP://RootDSE“)
strDNSDomain = objRootDSE.Get(”defaultNamingContext”)

strdnsdomain = replace(strdnsdomain,”DC=”,”")
strdnsdomain = replace(strdnsdomain,”,”,”.”)

msgbox strdnsdomain

Ya sabeis, cualquier duda que surja, dejarla en comentarios y lo vemos!

Saludos,

Nota:

Por cierto, hice un copiar y pegar directamente desde la página porque no tenia mi biblioteca a mano, y si os falla, es por las comillas, simples y dobles, que cuando las pega en el notepad las cambia por otras…. Recordad modificarlo, todo en el script que aparece con dobles comillas son dobles comillas (de las de mayusculas + 2) y todas las comillas simples, son comillas simples (de las de la derecha del 0)

WMI – Windows Management Intrumentation. A vista de pajaro

April 28th, 2009 Roberto Clemente No comments

¿Que es WMI (Windows Management Instrumentation) y para que sirve?

WMI es la forma que ha tenido microsoft para implementar el concepto de Web-based enterprise management (WBEM), que a su vez es un tipo de estandar tecnológico para facilitar el acceso a la información relativa a la administración IT en un entorno corporativo o empresarial. Existe un modelo comun de información (CIM – Common information model) que es standard para representar sistemas, aplicaciones, redes, dispositivos y otros componentes administrados, en el contexto de una infraestructura de IT. CIM es desarrollado y mantenido por la DMTF (Distributed MAnagement Task Force http://www.dmtf.org/standards/wsman )

Dejando a un lado las definiciones y acercando el concepto al administrador desde un punto de vista útil, WMI nos permite tratar de una forma homogenea y simplificada cualquier tarea de administración desde un punto de vista programático. Esto nos permite la administración remota de máquinas, por ejemplo, teniendo la certeza que el efecto y comportamiento en los diferentes nodos sea exactamente el mismo, con independencia de su ubicación, su hardware, etc.

WMI, dispone de proveedores (WMI Providers http://msdn.microsoft.com/en-us/library/aa394570(VS.85).aspx) y clases (WMI Classes http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx)

Uno de los problemas más frecuentes a la hora de entender qué puede hacer WMI por nosotros es que dado el nivel de abstracción necesario para entender su utilidad, no hay muchas herramientas totalmente gráficas que permitan acercar su uso al administrador, y en gran parte quedan ocultas tras interfaces modo comando (Como por ejemplo wmic)

El concepto no obstante es muy sencillo, WMI es un repositorio de información de lectura y escritura que no solo permite embeber en un framework la administración, sino que incluso permite modificarla (Si es aplicable en el caso). Además, la forma de utilizarla es común para todos los proveedores y clases WMI, por lo que aprendiendo a manejar con algun proveedor o clase, nos abrirá un mundo infinito de posibilidades.

¿Como puedo utilizar WMI?

Personalmente os recomiendo acercaros a WMI primero con una herramienta en modo comando llamada wmic, para entender el concepto general, en un solo host, pero, sin lugar a dudas, la mejor manera de utilizar WMI es integrarlo en nuestros scripts de administración, para poder retocar el alcance cada vez que sea necesario.

¿Qué lenguajes pueden hacer uso de WMI?

En realidad, actualmente casi todos los lenguajes pueden atacar a WMI para recuperar o fijar información. De todos ellos, me inclino por VBScript, ASP, o incluso powershell (Que ya hablaremos en otra ocasión de él)

¿Como hago una consulta WMI?

Como avanzabamos anteriormente, deberás aprender a manejar las clases y hay un lenguaje muy similar a SQL, llamado WQL http://msdn.microsoft.com/en-us/library/aa392902(VS.85).aspx que te permitirán manejar sin problemas las consultas y enumeraciones de los objetos WMI

He comenzado a utilizar WMI, pero como saber qué cosas puedo preguntar a WMI? de qué me vale tantas posibilidades, me pierdo y a menudo no encuentro como hacer las preguntas adecuadas.

Lo primero, no te preocupes, al principio es normal perderse en la abstracción del modelo, una vez te habitues te será mas sencillo. Mi consejo en este punto es que utilices la referencia WMI de microsoft para empezar: http://msdn.microsoft.com/en-us/library/aa394572(VS.85).aspx

En esta referencia, tienes disponibles las clases y proveedores de uso mas comun en tecnologias MS, Tomaremos a modo de ejemplo la clases Win32 :

http://msdn.microsoft.com/en-us/library/aa394084(VS.85).aspx

Dentro de cada una de ella verás la definición de la clase, continuando con un ejemplo práctico, tomaremos la Win32_Volume Class: http://msdn.microsoft.com/en-us/library/aa394102(VS.85).aspx

En cada clase, podemos encontrar propiedades y métodos. Los métodos son “funciones” que no devuelven valor, pero que permiten realizar una acción en el objetivo sobre el que se llaman. Hemos escogido esta clase, puesto que es bastante sencillo de entender el alcance de los datos que vamos a recuperar, así como de los métodos que se pueden utilizar.

Ejemplos de métodos en esta clase pueden ser:

chkdsk (Que permite ejecutar un chequeo de disco usando wMI)
AddMountPoint (Añadir punto de montaje)
Format (Formatear el volumen sobre el que se hace la llamada)
Defrag (Defragmentar)
Dismount (Desmontar)
mount (Montar)
[...]

Sin embargo, las propiedades son piezas de información interesantes desde un punto de vista de administración, por ejemplo y manteniendonos en la clase Win32_Volume, podemos recuperar valores como:

Capacity (Tamaño del volumen en Bytes)
Caption (Etiqueta del volumen)
Compressed (Si el volumen estuviese comprimido)
DriveLetter (letra de la unidad)
DriveType:
Value Meaning
0-Unknown
1-No Root Directory
2-Removable Disk
3-Local Disk
4-Network Drive
5-Compact Disk
6-RAM Disk

[...]

WMI Dispone del siguiente API:

http://msdn.microsoft.com/en-us/library/aa393260(VS.85).aspx

Para ejemplos, en la MSDN podras encontrar ayuda:

http://msdn.microsoft.com/en-us/library/aa394585(VS.85).aspx

Hasta la próxima entrega!

Categories: Windows Tags: , ,