Scripting en administración remota de Windows

La API de scripting en WinRM y la API COM complementaria para C++ están diseñadas para reflejar estrechamente las operaciones del protocolo WS-Management.

La API de scripting de WinRM en Administración remota de Windows admite todas las operaciones de protocolo de WS-Management excepto una. No permite suscripciones a eventos. Para suscribirse a eventos del registro de eventos del sistema BMC, debe usar las herramientas de línea de comandos Wecutil o Wevtutil. Para más información, vea Eventos.

La API de scripting winRM se llama mediante Winrm.vbs, una herramienta de línea de comandos, que se escribe en Visual Basic Scripting Edition (VBScript). Winrm.vbs proporciona ejemplos de cómo usar la API de scripting winRM.

Uso de WSman en comparación con el uso de scripting WMI

WMI se conecta a equipos remotos a través de DCOM, que requiere la configuración descrita en Conexión a WMI en un equipo remoto. WinRM no usa DCOM para conectarse a un equipo remoto. En su lugar, el protocolo WS-Management envía mensajes SOAP y el servicio usa un único puerto para HTTP y un puerto para el transporte HTTPS.

A diferencia de la herramienta de línea de comandos winrm , los scripts deben proporcionar el XML necesario para pasar a los mensajes del protocolo WS-Management. También deben proporcionar URI. Para obtener más información, consulte URI de recursos y Administración remota de Windows y WMI.

La API de scripting de WMI funciona con objetos, como instancias de Win32_LogicalDisk, que representan recursos en un equipo. Esta clase WMI se define en archivos de formato de objeto administrado (MOF), que se almacenan en formato binario en el repositorio WMI. En WMI, una operación Get para un único recurso o una consulta para varias instancias devuelve objetos WMI.

Un script winRM no devuelve objetos, sino secuencias de texto XML. Para obtener más información, vea Administración remota de Windows y WMI.

Mostrar la salida XML de los scripts de WinRM

La API de scripting de WinRM obtiene y recibe cadenas XML que describen los recursos. El XML resultante tiene la forma de una secuencia de texto y requiere que se muestre una transformación XML de alguna otra manera.

El siguiente script winRM genera una salida XML sin formato.

Set Wsman = CreateObject("Wsman.Automation")
Set xmlFile = CreateObject( "MSxml.DOMDocument")
Set Session = Wsman.CreateSession
Response = Session.Get("http://schemas.microsoft.com/wbem/wsman/" _
    & "1/wmi/root/cimv2/Win32_Service?Name=Spooler")
xmlFile.LoadXml(Response)
xmlFile.Save( "c:\RawOutput.xml")

El siguiente bloque de texto muestra la salida XML del script WinRM.

<p:Win32_Service xmlns:xsi="https://www.w3.org/2001/XMLSchema-
instance" xmlns:p="http://schemas.microsoft.com/wbem/wsman/1
/wmi/root/cimv2/Win32_Service" xmlns:cim="https://schemas.dmtf
.org/wbem/wsman/1/base" cim:Class="Win32_Service"><p:AcceptP
ause>false</p:AcceptPause><p:AcceptStop>true</p:AcceptStop>
<p:Caption>Print Spooler</p:Caption><p:CheckPoint>0</p:CheckP
oint><p:CreationClassName>Win32_Service</p:CreationClassName>
<p:Description>Loads files to memory for later printing</p:De
scription><p:DesktopInteract>true</p:DesktopInteract><p:Displ
ayName>Print Spooler</p:DisplayName><p:ErrorControl>Normal</p
:ErrorControl><p:ExitCode>0</p:ExitCode><p:InstallDate xsi:ni
l="true"/><p:Name>spooler</p:Name><p:PathName>C:\Windows\Syst
em32\spoolsv.exe</p:PathName><p:ProcessId>1720</p:ProcessId><
p:ServiceSpecificExitCode>0</p:ServiceSpecificExitCode><p:Ser
viceType>Own Process</p:ServiceType><p:Started>true</p:Starte
d><p:StartMode>Auto</p:StartMode><p:StartName>LocalSystem</p:
StartName><p:State>Running</p:State><p:Status>OK</p:Status><p
:SystemCreationClassName>Win32_ComputerSystem</p:SystemCreati
onClassName><p:SystemName>wsplab6-4</p:SystemName><p:TagId>0<
/p:TagId><p:WaitHint>0</p:WaitHint><cim:Location xmlns:cim="h
ttp://schemas.dmtf.org/wbem/wsman/1/base" xmlns:a="https://sc
hemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="https://sche
mas.dmtf.org/wbem/wsman/1/wsman"><a:Address>https://schemas.xm
lsoap.org/ws/2004/08/addressing/role/anonymous</a:Address><a:
ReferenceParameters><w:ResourceURI>https://schemas.microsoft.c
om/wbem/wsman/1/wmi/root/cimv2/Win32_Service</w:ResourceURI><
w:SelectorSet><w:Selector Name="Name">spooler</w:Selector></w
:SelectorSet></a:ReferenceParameters></cim:Location></p:Win32
_Service>

Los scripts pueden usar una transformación XML para que esta salida sea más legible. Para obtener más información, vea Mostrar la salida XML de scripts winRM.

La siguiente versión del script da formato al XML en una salida legible.

Set Wsman = CreateObject("Wsman.Automation")
Set xmlFile = CreateObject( "MSXml.DOMDocument" )
Set xslFile = CreateObject( "MSXml.DOMDocument" )

Set Session = Wsman.CreateSession
Response = Session.Get("http://schemas.microsoft.com/wbem/wsman/" _
    & "1/wmi/root/cimv2/Win32_Service?Name=Spooler")
xmlFile.LoadXml(Response)
xslFile.Load( "WsmTxt.xsl" )
Wscript.Echo xmlFile.TransformNode( xslFile )

La transformación XSL crea la salida siguiente.

Win32_Service
    AcceptPause = false
    AcceptStop = true
    Caption = Print Spooler
    CheckPoint = 0
    CreationClassName = Win32_Service
    Description = Loads files to memory for later printing
    DesktopInteract = true
    DisplayName = Print Spooler
    ErrorControl = Normal
    ExitCode = 0
    InstallDate = null
    Name = Spooler
    PathName = C:\Windows\System32\spoolsv.exe
    ProcessId = 1720
    ServiceSpecificExitCode = 0
    ServiceType = Own Process
    Started = true
    StartMode = Auto
    StartName = LocalSystem
    State = Running
    Status = OK
    SystemCreationClassName = Win32_ComputerSystem
    SystemName = wsplab6-4
    TagId = 0
    WaitHint = 0

Script winRM y salida de Winrm.cmd

La salida de un script WinRM se codifica en Unicode. Si crea un FileSystemObject y escribe un archivo a partir del script, el archivo resultante es Unicode. Sin embargo, si redirige la salida a un archivo, la codificación es ANSI. Si redirige la salida a un archivo XML y hay caracteres Unicode en la salida, el XML no será válido. Tenga en cuenta que la herramienta de línea de comandos de Winrm genera ANSI.

Acerca de la administración remota de Windows

Uso de administración remota de Windows

MSXSL

Referencia de DOM