Académique Documents
Professionnel Documents
Culture Documents
Don Jones
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.
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.
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.
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!
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.