Vous êtes sur la page 1sur 6

Windows PowerShell La conexin WMI

Don Jones

Una de las tecnologas con la que en gran medida pude contar


en el mundo de VBScript fue el instrumental de administracin
de Windows, o WMI. Curiosamente, Windows PowerShell tiene
fuertes conexiones con WMI, y no slo en un sentido tcnico.
Jeffrey Snover, quin diseo Windows PowerShell, tambin fue
un integrante clave en la creacin de
Wmic.exe, una herramienta de lnea de comandos de la poca de Windows Server 2003 usada para
trabajar con WMI. En muchos aspectos, Wmic.exe anunci Windows PowerShell ya que funcion en una
forma algo similar. (Para obtener ms informacin sobre WMIC, consulte el artculo de John Kelbley en el
nmero de septiembre de 2006 de TechNet Magazine, disponible en lnea en
microsoft.com/technet/technetmag/issues/2006/09/WMIData).

Windows PowerShell es compatible con WMI que se entrega de la misma manera, coherente y basada
en objetos que obtiene con el resto de las capacidades del shell. Esto hace que WMI sea infinitamente
ms fcil de aprender y usar, especialmente en situaciones ad hoc, que tecnologas anteriores, como
VBScript.

Conceptos bsicos de WMI


Si lee libros y artculos sobre secuencias de comandos, es muy difcil no ver a WMI mencionado. Sin
embargo, es fcil quedar atascado en el uso de WMI y olvidar cmo est construido por dentro; y saber
cmo est construido es especialmente importante para entender cmo funciona en Windows
PowerShell.
WMI es principalmente un sistema de clases organizadas que representan la informacin de
administracin del sistema operativo Windows y de otros productos de hardware y software basados
en Windows. Una clase en realidad no es nada ms que una descripcin abstracta de las propiedades y
capacidades que poseen algunos componentes de software o hardware determinados. Por ejemplo, es
posible que la clase de un disco lgico describa un dispositivo que tiene un nmero de serie, una
capacidad fija de almacenamiento, una cantidad de espacio disponible, etctera. Mientras tanto, es
posible que una clase que describe un servicio de Windows especifique que el servicio tiene un nombre,
que se puede iniciar y detener, su estado actual, etc.
En WMI, las clases representan todas las cosas que esa WMI puede administrar. Si WMI no tiene una
clase para algo, no puede administrar ese componente. Microsoft documenta las clases centrales de
Windows WMI en msdn2.microsoft.com/aa394554.aspx; otros productos, como por ejemplo, Internet
Information Services y SQL Server, documentan sus clases WMI por separado.
Debido a que existen tantas clases, WMI las organiza en una jerarqua de espacios de nombres. Por
ejemplo, el espacio de nombres que contiene las clases centrales del sistema operativo Windows se
llama root\cimv2, mientras que Microsoft IIS 6.0 almacena sus clases en root\MicrosoftIISv2.
Afortunadamente, el espacio nombres de root\cimv2 es tambin el espacio de nombres
predeterminado de WMI, una configuracin compartida por Windows PowerShell, lo que facilita el
trabajo con estas clases centrales.
Una "instancia" es una aparicin real de una clase. Si, por ejemplo, el equipo tiene dos discos lgicos,
tendr dos instancias de la clase Win32_LogicalDisk. Si en el equipo se ejecutan 50 servicios, WMI ver
50 instancias de la clase Win32_Service. El trabajo con WMI es esencialmente una cuestin de pedir a

WMI que ofrezca una o ms instancias y, a continuacin, examinar sus propiedades en bsqueda de la
informacin de administracin que se necesita o para ejecutar los mtodos de esas instancias para
hacer cambios de administracin, como por ejemplo iniciar o detener un servicio.
WMI usa una arquitectura cliente-servidor. Cada versin de Windows desde Windows 2000 incluy WMI
integrado (las versiones posteriores han ampliado el nmero de clases disponibles), lo que significa que
se dispone con facilidad de software cliente y software servidor de WMI. Al usar WMI, enva en realidad
una solicitud al servicio WMI que se ejecuta en cualquier equipo deseado. Ese servicio WMI recupera las
instancias WMI que especifica y las devuelve para que pueda trabajar con ellas. Es all donde Windows
PowerShell entra en escena, simplifica el proceso de solicitar instancias, recuperarlas y trabajar con ellas.

Obtencin de un objeto WMI


Generalmente, a las instancias de una clase WMI se les denomina objetos, de modo que tiene sentido
que la manera de recuperar esas instancias en Windows PowerShell sea el cmdlet Get-WMIObject. Este
cmdlet tiene un alias ms cmodo, gwmi, que usar en la mayor parte de mis ejemplos. En su forma
ms simple, especifica slo el nombre de la clase WMI que desea recuperar y, a continuacin, se relaja y
analiza los resultados (consulte la figura 1). Cuando ejecut gwmi win32_service, Windows PowerShell
se conect al servicio WMI en el equipo local (debido a que no especifiqu otro equipo) y se conect al
espacio de nombres root\cimv2 (porque no especifiqu un espacio de nombres diferente). Windows
PowerShell recuper todas las instancias de la clase especificada y, como no le indiqu que hiciera algo
ms con ellas, las convirti en una representacin textual. En otras palabras, Windows PowerShell tom
esos objetos y produjo un texto para que yo, como mero ser humano, los pudiera leer.

Figura 1 Al ejecutar gwmi win32_service, Windows PowerShell devuelve todas las instancias de la
clase especificada en un formato legible de texto
Especficamente, Windows PowerShell convierte objetos WMI en texto cuando lee y muestra los
nombres y valores de las propiedades de la clase seleccionada. Para la clase Win32_Service, seleccion
un conjunto de seis propiedades.
En realidad, Windows PowerShell convierte cualquier objeto a texto de este modo. La mayora de las
veces, las propiedades que elige mostrar se definen en un conjunto de archivos .format.ps1xml que se
encuentran en la carpeta de instalacin de Windows PowerShell. Estos archivos de definicin de
formato llevan la firma digital de Microsoft. Se recomienda no cambiar estos archivos, aunque puede
proporcionar sus propios archivos de formato. (Este es un tema que analizar con ms detalle en una
futura columna).
El cmdlet gwmi puede ayudarle a explorar el equipo para averiguar qu clases estn disponibles. Por
ejemplo, al ejecutar gwmi namespace "root\cimv2" list, se puede obtener una lista completa de clases
en ese espacio de nombres. No obstante, recuerde que las clases en el equipo slo son importantes
cuando se administra el equipo; si administra un equipo remoto, querr conocer las clases disponibles
en ese sistema. Para ello, puede usar el parmetro -computer de gwmi para conectarse a un equipo

remoto. Por ejemplo, gwmi namespace "root\cimv2" list computer ServerA incluir una lista de todas
las clases en el espacio de nombres root\cimv2 del equipo remoto denominado ServerA.

WMI remoto
En la versin 1.0 de Windows PowerShell, gwmi es prcticamente el nico cmdlet que admite
directamente la administracin remota. Esto se debe principalmente al hecho de que ese control
remoto est integrado en la arquitectura WMI subyacente. Y como Windows PowerShell usa la
arquitectura existente, est sujeto a las caractersticas de seguridad de esa arquitectura. A continuacin
se muestra un ejemplo:
Copiar cdigo
C:\> gwmi -namespace root\cimv2 -computer
mediaserver -list
Get-WmiObject : Access is denied. (Exception
from HRESULT: 0x80070005 (E_ACCESSDENIED))
At line:1 char:5
+ gwmi <<<< -namespace root\cimv2 -computer
mediaserver -list
PS C:\>

En esta instancia, intento conectarme a un equipo remoto llamado Media-Server para el que no tengo
permiso de acceso. Como administrador, debera tener permiso para trabajar con el servicio WMI de
este equipo, pero es probable que mis credenciales de la estacin de trabajo local no sean suficientes.
Por ejemplo, es posible que haya iniciado sesin en un dominio diferente que no sea de confianza o
iniciado sesin con una cuenta con menos privilegios. Afortunadamente, gwmi es compatible con el
parmetro -credential que permite especificar un conjunto alternativo de credenciales de usuario para
la conexin de WMI. A continuacin, puede ver un ejemplo muy sencillo:
Copiar cdigo
gwmi win32_service credential mydomain\administrator computer mediaserver
Mi credencial, ms concretamente, mi nombre de usuario, se proporciona en el formato Dominio\Nombre
de usuario.

Tenga en cuenta que no existe ningn lugar donde pueda escribir una contrasea, Windows PowerShell
me la solicitar. En forma intencional, Windows PowerShell no ofrece una manera de escribir una
contrasea en la lnea de comandos porque de esa manera permitira codificar contraseas en archivos
de secuencias de comandos, lo cual es un riesgo de seguridad absoluto. Sin embargo, existe otra
manera de trabajar con el parmetro -credential; crear con antelacin una especie de objeto de
credencial, llamado PSCredential. La clave es el cmdlet Get-Credential:
Copiar cdigo
$cred = get-credential mydomain\administrator
Cuando lo ejecuto, todava me solicita la contrasea de confirmacin. Sin embargo, esta vez el objeto de
credencial que se crea se almacena en la variable $cred. Si miro el contenido de $cred, podr ver el
nombre pero no la contrasea:

Copiar cdigo

PS C:\> $cred

UserName
-------mydomain\adminstrator
De esta manera puedo volver a usar ese objeto de credencial todas las veces que desee:

Copiar cdigo
gwmi win32_service credential $cred computer mediaserver
Esto simplifica las conexiones repetidas de WMI a un equipo remoto al predefinir un objeto de credencial
que se puede volver a usar. Cabe destacar, no obstante, que actualmente el cmdlet Get-WMIObject no es
compatible con la especificacin de niveles de autenticacin (tambin conocidos como suplantacin) de la
misma manera que VBScript la admite. Consulte msdn2.microsoft.com/aa389290.aspx para obtener
informacin adicional.

Deteccin automtica
Para m, uno de los aspectos favoritos de Windows PowerShell es que no baja el nivel de las cosas. Le
mostr cmo Windows PowerShell seleccion slo un conjunto de propiedades de la clase
Win32_Service que consult. No obstante, el shell todava tiene acceso a todas las propiedades, e
incluso puede indicarle cules son. Para ello, simplemente canalice el objeto (o los objetos) al cmdlet
Get-Member (o a su alias, gm), tal como se muestra en la figura 2.

Figura 2 Canalizar un objeto al cmdlet Get-Member le indica a qu mtodos y propiedades puede


usted tener acceso. (Hacer clic en la imagen para ampliarla)
Adems de propiedades, el shell tambin muestra los mtodos disponibles, lo que significa que no se
requiere necesariamente la documentacin para averiguar lo que una clase es capaz de hacer. Puedo
observar que la clase en s misma ofrece los medios para cambiar una configuracin de la instancia,
poner en pausa un servicio, detener un servicio, etc.

Para usar estos mtodos o mostrar otras propiedades, a menudo es ms fcil poner las instancias en
una variable:
Copiar cdigo
$server = gwmi win32_operatingsystem
$server.reboot()
Este ejemplo recupera la nica instancia disponible de la clase Win32_OperatingSystem (esta clase slo
tiene una instancia por equipo) y la guarda en la variable $server. A continuacin, usar la variable
$server para tener acceso al mtodo Reboot de la instancia, reiniciando el equipo. Cuidado con esto!

Lenguaje enriquecido para consultas


Si usa WMI con VBScript u otra tecnologa, probablemente est acostumbrado a recuperar instancias de
la clase WMI con una consulta escrita en WQL, el lenguaje de consulta de WMI. Su sintaxis parecida a
SQL hace que sea ms fcil recuperar instancias especficas (por ejemplo, un servicio especfico) en lugar
de todas las instancias de una clase dada. Afortunadamente, gwmi tambin permite especificar una
consulta, de la siguiente manera:
Copiar cdigo
gwmi query select * from win32_service where name=alerter

Esta sintaxis de gwmi, que se agreg poco antes que Windows PowerShell se lanzara oficialmente al
mercado, es increblemente til y hace muy pero muy fcil la tarea de migrar consultas complejas de
WMI que posiblemente haya desarrollado para otros propsitos. Y, como siempre, Windows PowerShell
devolver objetos enriquecidos con sus propias propiedades y mtodos, permitindole tener un acceso
total al poder de administracin de WMI.

Adelantndose con WMI


WMI contina su desarrollo para futuras versiones de Windows, agregando nuevas clases y
capacidades. Adems, se contina incorporando a los nuevos productos de Microsoft. Aunque la
mayora de los productos de Microsoft todava no han lanzado al mercado versiones especficamente
integradas con Windows PowerShell, uno de sus beneficios ms grandes es la capacidad de conectarse
a WMI, que hoy lo hacen tan til.
Habl superficialmente de lo que WMI es capaz de hacer. An as espero que le inspire para explorar
Windows PowerShell y descubrir por su cuenta qu capacidades estn disponibles.

Vous aimerez peut-être aussi