Administración remota de Windows y WMI
La administración remota de Windows se puede usar para recuperar los datos expuestos por Instrumental de administración de Windows (WMI y MI). Puede obtener datos de WMI con scripts o aplicaciones que usan la API de scripting winRM o a través de la herramienta de línea de comandos de Winrm .
WinRM admite la mayoría de las operaciones y clases WMI conocidas, incluidos los objetos incrustados. WinRM puede aprovechar WMI para recopilar datos sobre recursos o administrar recursos en un sistema operativo basado en Windows. Esto significa que puede obtener datos sobre objetos como discos, adaptadores de red, servicios o procesos de su empresa a través del conjunto existente de clases WMI. También puede acceder a los datos de hardware que están disponibles desde el proveedor de IPMI de WMI estándar.
Identificación de un recurso WMI
Puede hacer referencia a una clase WMI como un recurso en WinRM y en el protocolo WS-Management: un tipo de entidad administrada, como un servicio o un disco.
Una clase o método WMI se identifica mediante un URI, igual que cualquier otro recurso cuando se usa el protocolo WS-Management. El URI puede especificar un recurso WMI (clase), una acción WMI (método) o identificar una instancia específica de una clase en los mensajes enviados a través de una red. Para más información, consulte URI de recursos.
Construcción del prefijo de URI para clases WMI
El prefijo URI contiene una parte fija y el espacio de nombres WMI. Por ejemplo, el prefijo URI de Windows Server que contiene la parte fija del prefijo es: http://schemas.microsoft.com/wbem/wsman/1/wmi/<WmiNamespace>
. Esto permite generar el prefijo de URI para cualquier espacio de nombres WMI. Por ejemplo, para acceder al espacio de nombres root\default de WMI, use el siguiente prefijo de URI: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/default/
.
La mayoría de las clases WMI para la administración están en el espacio de nombres root\cimv2 . Para acceder a clases e instancias del espacio de nombres root\cimv2 , use el prefijo URI: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
. Para más información, consulte URI de recursos.
Generación de un URI completo para clases WMI
El URI que se proporciona, ya sea a la herramienta de línea de comandos de Winrm o a un script, consta del prefijo más la especificación de recursos.
En el procedimiento siguiente se describe cómo generar un URI de recurso para obtener una clase WMI o para usarla en una operación de enumeración.
Para generar un URI de recurso para una clase WMI
Comience con el prefijo que indica que se debe usar el esquema del protocolo WS-Management.
https://schemas.microsoft.com/wbem/wsman/1
El prefijo de URI de recursos para las clases WMI siempre es el mismo. Para obtener más información, consulte Prefijos de URI.
Agregue el espacio de nombres WMI al prefijo.
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
Agregue el nombre de clase.
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
Para establecer el valor de una propiedad o para invocar un método específico, agregue el valor de clave o los valores necesarios para la clase .
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt
Si deja el valor de clave en blanco, no modificará el valor de propiedad original.
Nota:
Si se deja el valor de clave en blanco, el valor de la propiedad se establece en NULL.
Búsqueda de un recurso WMI con WinRM
Puede obtener datos de WMI a través de la herramienta de línea de comandos, Winrm o mediante un script de Visual Basic que use la API de scripting winRM. No se usa una ruta de acceso WMI para buscar un recurso. En su lugar, convierta el espacio de nombres y la jerarquía de WMI en un URI.
El URI de WinRM para una clase WMI contiene dos partes: el prefijo URI y la clase a la que desea acceder.
Por ejemplo, se puede proporcionar el siguiente URI al método Session.Enumerate para enumerar todos los servicios de un equipo. El prefijo URI es http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
y la clase es Win32_Service.
strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
En WMI, enumere los datos de todas las instancias de un recurso o clase de varias maneras:
Consulta para todas las instancias de ese recurso.
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service")
Una llamada a SWbemServices.InstancesOf o SWbemObject.Instances_.
Set colServices = InstancesOf("Win32_Service")
En WinRM, hay una manera de enumerar todas las instancias de un recurso: Session.Enumerate.
strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"
Set colServices = objSession.Enumerate( strResource )
Buscar una instancia específica de un recurso WMI
En WMI, puede designar una instancia determinada de una clase especificando valores para las propiedades de clave o consultando para una instancia que coincida con una lista de valores de propiedad. Las propiedades de clave tienen el calificador de clave WMI.
Puede obtener una instancia específica de una clase de varias maneras:
Una llamada a Session.Enumerate con los parámetros de filtro y dialecto para crear una consulta.
RemoteComputer = "servername.domain.com" strDialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL" strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*" Set objWsman = CreateObject("Wsman.Automation") Set objSession = objWsman.CreateSession("https://" & RemoteComputer) strFilter = "SELECT * FROM Win32_Share WHERE Name='Admin$'" Set objResultSet = objSession.Enumerate(strResource, strFilter, strDialect)
Una llamada a SWbemServices.Get. Para Session.Get, debe proporcionar uno o varios valores de clave específicos, precedidos por un signo de interrogación (?).
El formato del URI de una instancia específica es
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/WMI_Class?Key1=Value
.strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=winmgmt"
Una clase WMI puede tener más de una clave. Los pares nombre-valor de clave están separados por un signo "+". En ese caso, el formato es:
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Key1=Value1+Key2=Value2
.La sintaxis de WinRM para obtener un objeto WMI singleton es diferente de WMI. Un singleton es una clase WMI definida para que solo se permita una instancia. Win32_CurrentTime o Win32_WMISetting son ejemplos de una clase singleton de WMI.
La sintaxis de WMI para singletons se muestra en el siguiente ejemplo de código de VBScript.
Set TimeObject = objWMIService.Get("Win32_CurrentTime=@")
En el ejemplo siguiente se muestra la sintaxis singleton de WinRM que no usa "@".
strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
Agregar un selector a un objeto ResourceLocator o IWSManResourceLocator .
En el siguiente ejemplo de código de VBScript se muestra cómo usar un selector para obtener una instancia específica de Win32_Processor.
strUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Processor" Set objWsman = CreateObject("Wsman.Automation") Set Session = objWsman.CreateSession Set Locator = objWsman.CreateResourceLocator(strUri) Locator.AddSelector "DeviceID", "CPU0"