| |
|
|
| |
-
Windows Script Host - VBScript - Componentes - WMI (Windows Management Instrumentation)
-
WMI es el mayor de los componente, el más poderoso, extenso y complejo para Windows scripting.
WMI es el punto de partida para el acceso a informaciones del sistema y la red. Hace posible el acceso a diversas fuentes, como el registry, el
sistema de archivos y el registro de sucesos, los cuales son cubiertos por otros componentes. Mientras que WMI ofrece las ventajas de la uniformidad,
la utilización, en casos concretos, de otros componentes, puede resultar mucho más simple. No obstante, hay muchas funciones, las cuales
solo son posible implementar con WMI.
WMI es la implementación de Microsoft de la WBEM (Web Based Enterprise Mangement), la cual, a su vez, es un estándar de DMTF (Desktop
Management Task Force) para la administración de sistemas y redes.
WBEM fue desarrollado por BMC Software, Cisco Systems, Compaq, Intel y Microsoft y posteriormente integrado en DMTF.
WBEM es una arquitectura con interfaces para la programación.
Instalación
WMI existe en diversas versiones:
Sistema operativo
|
Versión disponible (está incluida en la instalación estándar del Sistema Operativo) |
Windows 2000
|
WMI 1.5
|
Windows XP
|
WMI 5.1
|
Windows Server 2003
|
WMI 5.2
|
Windows Vista
|
WMI 6.0
|
Provider
Para los diversos sistema operativos, existen provider WMI específicos. Para cada provider WMI hay un archivo "dll".
WMI puede ser utilizado para el acceso a un ordenador remoto. Condición para ello es que WMI esté instalado en ambos ordenadores.
WMI está implementado en el archivo ejecutable "WinMgmt.exe". Este corre en sistemas basados en Windows NT como un servicio, bajo en
nombre "WinMgmt (Instrumentación de la administración de Windows)".
Antes de utilizar WMI, debe comprobar que el servicio esté iniciado.
Clases
WMI contiene alrededor de 4,5 miles de clases. Con la instalación de productos adicionales, como Microsoft Office por ejemplo, se instalan
docenas más de clases.
Las clases WMI comienzan, generalmente, con el prefijo "Win32" o "CIM". Además, WMI cuenta con algunos objetos auxiliares,
Clase
|
Acceso
|
Descripción |
SWbemLocator
|
CreateObject("WbemScripting.
SWbemLocator")
|
Esta clase ofrece una
posibilidad (entre muchas)
para establecer una
conexión con otro
ordenador mediante WMI.
Esta clase puede
instanciarse con
"WbemScripting.
SWbemLocator".
|
SWbemServices
|
GetObject("WinMgmts://
COMPUTERNAME") o con
el método ConnectServer
("COMPUTERNAME") del
objeto SWbemLocator
|
Un objeto "SWbemServices" representa un espacio de nombre (namespace) WMI.
|
Selección de objetos
WMI utiliza fundamentalmente, el comando "GetObject( )". Este comando exige una cadena de caracteres en una forma especial, el path WMI.
Está conformado de la forma siguiente:
WinMgmts:\\Computadora\espacio de nombre:clase.llave='valor'
Significado de los elementos:
- "WinMgmts" es la palabra clave con la cual indica
a WSH que ha de utilizarse WMI.
- "Computadora" está para indicar el nombre del ordenador a que se refiere.
Cuando el script se refiere al ordenador local, se
utiliza un punto entre comillas (".").
- "espacio de nombre:" WMI contiene muchas clases, las cuales están
estructuradas en una jerarquía. El path en esa jerarquía se denomina nombre de espacio.
- "clase" es el nombre de la clase que se hace referencia.
- Con llave='valor' se determina la instancia de la clase a que se refiere. La
"llave" es el nombre del atributo de la clase y el 'valor' el valor del atributo de la instancia.
La siguiente tabla muestra ejemplos del acceso a objetos WMI con ejemplos de la clase "Win32_LogicalDisk", la cual representa un disco.
La clase se encuentra en la estructura jerárquica en el espacio de nombre "\root\cimv2". Como puede apreciarse en la tabla, muchas
Objeto
|
Path |
| La instancia de la clase "Win32_LogicalDisk" del espacio de nombre "\root\cimv2" con el nombre
"C:" en el ordenador local. |
GetObject("WinMgmts:\\root\cimv2:
Win32_LogicalDisk.DeviceID='C:'") |
| La instancia de la clase "Win32_LogicalDisk" del espacio de nombre "\root\cimv2" con el nombre
"C:" en el ordenador ServidorPC005 |
GetObject("WinMgmts:\\ServidorPC005 root\cimv2:Win32_LogicalDisk.DeviceID='C:'")
|
| La instancia de la clase "Win32_LogicalDisk" del espacio de nombre estandar con el nombre "C:" en
el ordenador local |
GetObject("WinMgmts:
Win32_LogicalDisk.DEviceID='C:'") |
En el caso que no se haga referencia al espacio de nombre, se asumirá el estandar, el cual está especificado en el registry
(HKEY_Local_Machine\Software\Microsoft\WBEM\Scripting\Defaul Namespace). La configuración estándar es "\root\cimv2". Esta
configuración no debe modificarse.
El siguiente ejemplo cambia el nombre de una unidad de disco. Es importante la llamada del método "Put_( )". Las modificaciones en
el objeto WMI ocurre tras la llamada del método.
' wmi_objeto.vbs
' ===============
Const NOMBRECOMPUTADORA = "ServidorPC0005"
Set Unidad = GetObject("WinMgmts:\\" & NOMBRECOMPUTADORA & _
"root\cimv2:Win32_LogicalDisk='C:'")
WScript.Echo "Nombre anterior: " & Unidad.VolumeName
Unidad.VolumeName = "Unidad C"
Unidad.Put_
WScript.Echo "Modificación ejecutada"
WScript.Echo "Nombre posterior: " & Unidad.VolumeName
Conjunto de acceso: todas las instancias
Una particularidad de WMI es la posibilidad de acceder no solo a un objeto, sino a todas las instancias de una clase o una parte de ellas.
Para esto se nombra en "GetObject( )" solo "WinMgmts" y los nombres de las computadoras de referencia. Al objeto devuelto, se
le llama con "InstancesOf( )", nombrando la clase. Con "For … Each" puede listarse todas las instancias.
' wmi_conjunto.vbs
' ==============
Set COMPUTADORA = GetObject("WinMgmts:\\NOMBRECOMPUTADORA")
Set conjunto = Computadora.InstancesOf("Win32_LogicalDisk")
For Each o In conjunto
WScript.Echo o.name & " Tamaño:" o.size
Next
Con Windows Vista es posible acceder a un elemento del conjunto de objetos WMI sobre el atributo "ItemIndex( )". Ejemplo:
"conjunto.ItemIndex(2)", se refiere al tercer elemento, dado que se comienza a contar en 0.
Conjunto de acceso: instancias seleccionadas (utilización de WQL)
De pretenderse limitar el conjunto de instancias seleccionadas, debe modificarse una línea.
De utilizarse "ExecQuery( )" en lugar de "InstancesOf( )" es posible determinar las instancias que se deseen, utilizando el lenguaje
WMI Query Language, un dialecto de SQL (Structured Query Language).
SELECT Lista de atributos FROM clase WHERE condiciones
Clase, se refiere a cualquier clase WMI. La lista de atributos puede estar representado por un "*" (para todos los atributos) o una lista
de atributos separados por comas, los cuales devienen de una clase.
El conjunto de referencia puede limitarse con el nombre de los atributos y la utilización de la clausura "FROM". No se apoya la
ón de las palabras claves.
Consulta WQL
|
Descripción |
SELECT * FROM Win32_Service
WHERE state='running' and startmode='manual'
|
Todos los servicios NT que corren, pero que son iniciados manualmente
|
SELECT IPAdress
FROM Win32_NetworkAdapterConfiguration
WHERE IPEnabled=TRUE
|
El atributo IPAddress de una tarjeta de red, la cual se corresponda con el protocolo IP
|
SELECT RecordNumber, Message
FROM Win32_NTLogEvent
WHERE Logfile='Application'
|
Número de registro y mensage de todos los asentamientos del registro de eventos
|
El siguiente ejemplo lista todas las unidades, las cuales no sean A o B. De cada unidad se consignará su tamaño
' wmi_conjunto2.vbs
' ================
Set Computadora = GetObject("WinMgmts:\\ServidorPC005")
Set conjunto = Computadora.ExecQuery("SELECT + FROM Win32_LogicalDisk WHERE
Name>'b:'")
For Each o In conjunto
WScript.Echo o.name & "Tamaño:" & o.size
Netxt
Medios auxiliares
WMI cuenta con una herramienta para observar los objetos e indagar el sistema de objetos en su estructura jerarquizada para encontrar objetos y
atributos apropiadas para los scriptings. La herramienta se llama "WMI Object Browser" y funciona en el Internet Explorar.
El "WMI
Object Browser" es una herramienta gratuita de Microsoft.
 |
|
Ultima actualisación: Tue, 24 ▪ May ▪ 2011
|
|
|
|