Partilhar via


Criação de Scripts na Gestão Remota do Windows

A API de Script no WinRM e a API COM para C++ que a acompanha são projetadas para refletir de perto as operações do protocolo WS-Management.

A API de Script do WinRM no Gerenciamento Remoto do Windows oferece suporte a todas as operações de protocolo WS-Management, exceto uma. Não permite subscrições para eventos. Para subscrever eventos do Log de Eventos do Sistema BMC, deve usar as ferramentas de linha de comando Wecutil ou Wevtutil. Para obter mais informações, consulte Eventos.

A API de script do WinRM é chamada pelo Winrm.vbs, uma ferramenta de linha de comando, que é escrita em Visual Basic Scripting Edition (VBScript). Winrm.vbs fornece exemplos de como usar o WinRM Scripting API.

Usando o WSman em comparação com o uso de scripts WMI

O WMI se conecta a computadores remotos por meio do DCOM, que requer a configuração descrita em Conectando-se ao WMI em um computador remoto. WinRM não usa DCOM para se conectar a um computador remoto. Em vez disso, o protocolo WS-Management envia mensagens SOAP e o serviço usa uma única porta para HTTP e uma porta para transporte HTTPS.

Ao contrário da ferramenta de linha de comando winrm, os scripts devem fornecer o XML necessário para passar para as mensagens de protocolo WS-Management. Eles também devem fornecer URIs. Para obter mais informações, consulte URIs de recursos e Gerenciamento Remoto do Windows e WMI.

A API de script WMI funciona com objetos, como instâncias de Win32_LogicalDisk, que representam recursos em um computador. Essa classe WMI é definida em arquivosManaged Object Format (MOF), que são armazenados em formato binário no repositório WMI. No WMI, uma operação Get para um único recurso ou uma consulta para várias instâncias retorna objetos WMI.

Um script WinRM não retorna objetos, mas fluxos de texto XML. Para obter mais informações, consulte Gerenciamento Remoto do Windows e WMI.

Exibindo saída XML de scripts WinRM

A API de script do WinRM obtém e recebe cadeias de caracteres XML que descrevem recursos. O XML resultante está na forma de um fluxo de texto e requer que uma transformação XML seja exibida de alguma outra maneira.

O script WinRM a seguir produz saída XML bruta.

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")

O bloco de texto a seguir mostra a saída XML do 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>

Seus scripts podem usar uma transformação XML para tornar essa saída mais legível. Para obter mais informações, consulte Exibindo saída XML de scripts do WinRM.

A seguinte versão do script formata o XML em saída legível por humanos.

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 )

A transformação XSL cria a seguinte saída.

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 e saída Winrm.cmd

A saída de um script WinRM é codificada em Unicode. Se você criar um FileSystemObject e gravar um arquivo a partir do script, o arquivo resultante será Unicode. No entanto, se você redirecionar a saída para um arquivo, a codificação será ANSI. Se você redirecionar a saída para um arquivo XML e houver caracteres Unicode na saída, o XML será inválido. Lembre-se de que a ferramenta de linha de comando Winrm gera ANSI.

Sobre o Gerenciamento Remoto do Windows

Usando o Gerenciamento Remoto do Windows

MSXSL

Referência DOM