¡Hola, chicos del scripting!

Bienvenido a la columna TechNet en la cual, por medio de Microsoft Scripting Guy, se abordan las preguntas frecuentes acerca de las secuencias de comandos para la administración de sistemas. ¿Tiene alguna pregunta sobre las secuencias de comandos para la administración de sistemas? Envíe un correo electrónico a scripter@microsoft.com. No podemos garantizarle que seremos capaces de responder todas las preguntas que nos lleguen, pero haremos todo lo posible.

Y no se olvide de consultar el Archivo de ¡Hola, chicos del scripting!.

Pregunta del día: ¿cómo puedo saber cuáles de nuestros equipos con Windows Server 2003 ejecutan R2?


¿Cómo puedo saber cuáles de nuestros equipos con Windows Server 2003 ejecutan R2?

P

¡Hola, chicos del scripting! En nuestra organización, contamos con una gran cantidad de equipos con Windows Server 2003. Algunos ejecutan Windows Server 2003 R2 y otros no. ¿Cómo puedo saber cuáles de ellos ejecutan R2?

TX

R

Hola TX. ¿Sabe? La humanidad lleva cientos y cientos de años intentando dar respuesta a esa pregunta: ¿cómo puedo saber si un equipo ejecuta Windows Server 2003 R2 o no? Y conste que no estamos exagerando: si no, recuerde las últimas palabras que pronunció Julio César: “¿Tú también, Bruto, hijo mío?”. (Nota: juego de palabras que hace referencia al sonido de R2 en inglés como Are (You) Too, tú también.)

Bien, si ni siquiera Julio César podía saber si un equipo ejecuta o no Windows Server 2003 R2, ¿por qué iba nadie a pensar que los chicos del scripting pueden conseguir lo que no logró el mismísimo César? Debemos admitir que César tenía riqueza, poder y astucia para las tácticas militares, pero no tenía WMI:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
 
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objItem in colItems
    If InStr(objItem.OtherTypeDescription, "R2") Then
        WScript.Echo "This computer is running Windows Server 2003 R2."
    Else
        WScript.Echo "This computer is not running Windows Server 2003 R2."
    End If
Next

Sí, lo sabemos: quizás esta secuencia de comandos debería ser un poco más elegante, ¿verdad? Pero a pesar de todo cumplirá con su objetivo; dentro de un momento explicaremos cómo y por qué.

La secuencia comienza como la mayoría de las secuencias de comandos de WMI: simplemente realiza una conexión con el servicio WMI en el equipo local. (Y, como la mayoría de las secuencias de comandos de WMI, se puede modificar fácilmente para ejecutarse en un equipo remoto: basta con asignar a la variable strComputer el nombre de dicho equipo remoto.) Posteriormente utilizamos esta línea de código para recuperar información sobre el sistema operativo que se utiliza actualmente en el equipo:

Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

Y ahora llegamos a la parte que hará que la gente cante alabanzas de los chicos del scripting mucho después de que el nombre de Julio César haya caído en el olvido. La clase Win32_OperatingSystem contiene una propiedad denominada OtherTypeDescription. Esta propiedad siempre ha devuelto un valor Null. (Pruébelo en un equipo con Windows 2000 Server o Windows XP o en el antiguo Windows Server 2003. Siempre obtendrá el mismo valor: Null.) Sin embargo, en un equipo con Windows Server 2003 R2, esta propiedad que devuelve un valor. Y no sólo eso, sino que ese valor incluye la cadena R2. Así es cómo se determina si un equipo ejecuta R2 o no: basta con comprobar si se puede encontrar la cadena R2 en la propiedad OtherTypeDescription.

Así pues, no es necesario decirlo, eso es lo que hacemos con el resto de la secuencia de comandos. Configuramos un bucle For Each para que recorra toda la colección de sistemas operativos que devuelve nuestra consulta. (Aunque sólo existirá un sistema operativo, aún deberemos utilizar un bucle For Each, algo que no sería necesario con Windows Vista (en inglés).) A continuación, usamos la función InStr para comprobar si está presente la cadena R2 en la propiedad OtherTypeDescription:

If InStr(objItem.OtherTypeDescription, "R2") Then

Si InStr devuelve un valor True, sabremos que el equipo ejecuta R2; de lo contrario, el equipo no ejecuta R2. Eso es todo lo que debemos hacer.

Así pues, ¿es ésta la secuencia de comandos más importante que se haya escrito nunca? Bueno, no diríamos tanto. Por otra parte, Julio César no conocía la propiedad OtherTypeDescription y ya ve lo que le ocurrió. Así que pensándolo bien...


Para más Información

Consulte el Archivo de ¡Hola, chicos del scripting!.

Arriba Arriba