Scripts no Gerenciamento Remoto do Windows
A API de Script no WinRM e a API COM que acompanha o C++ foram projetadas para refletir de perto as operações do protocolo WS-Management.
A API de Script WinRM no Gerenciamento Remoto do Windows dá suporte a todas as operações de protocolo WS-Management, exceto uma. Ele não permite assinaturas para eventos. Para assinar eventos do Log de Eventos do Sistema BMC, você deve usar as ferramentas de linha de comando Wecutil ou Wevtutil. Para obter mais informações, consulte Eventos.
A API de Script WinRM é chamada pelo Winrm.vbs, uma ferramenta de linha de comando, que é escrita no Visual Basic Scripting Edition (VBScript). Winrm.vbs fornece exemplos de como usar a API de Script WinRM.
Usando o WSman em comparação com o uso de scripts WMI
O WMI se conecta a computadores remotos por meio do DCOM, o que requer a configuração descrita em Conectar-se ao WMI em um computador remoto. O WinRM não usa o 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 arquivos MOF (Formato de Objeto Gerenciado), 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 sim fluxos de texto XML. Para obter mais informações, consulte Gerenciamento Remoto do Windows e WMI.
Exibindo a saída XML de scripts WinRM
A API de Script 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 uma 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 a saída XML de scripts WinRM.
A versão a seguir 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 saída a seguir.
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 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.
Tópicos relacionados