Создание скриптов в удаленном управлении Windows

API скриптов в WinRM и сопутствующий COM-API для C++ предназначены для точного отражения операций протокола WS-Management.

API скриптов WinRM в удаленном управлении Windows поддерживает все операции протокола WS-Management, кроме одной. Он не разрешает подписки на события. Чтобы подписаться на события из журнала системных событий BMC, необходимо использовать программы командной строки Wecutil или Wevtutil. Дополнительные сведения см. в статье Events (Visual Basic) (События в Visual Basic).

API скриптов WinRM вызывается с помощью программы командной строки Winrm.vbs, написанной в Visual Basic Scripting Edition (VBScript). Winrm.vbs приведены примеры использования API скриптов WinRM.

Сравнение использования WSman со скриптами WMI

WMI подключается к удаленным компьютерам через DCOM, для чего требуется конфигурация, описанная в разделе Подключение к WMI на удаленном компьютере. WinRM не использует DCOM для подключения к удаленному компьютеру. Вместо этого протокол WS-Management отправляет сообщения SOAP, а служба использует один порт для HTTP и порт для транспорта HTTPS.

В отличие от программы командной строки winrm , скрипты должны предоставлять XML-код, необходимый для передачи WS-Management сообщений протокола. Они также должны предоставлять универсальные коды ресурса (URI). Дополнительные сведения см. в разделах URI ресурсов и удаленное управление Windows и WMI.

API скриптов WMI работает с объектами, такими как экземпляры Win32_LogicalDisk, которые представляют ресурсы на компьютере. Этот класс WMI определяется в MOF-файлах , которые хранятся в двоичной форме в репозитории WMI. В WMI операция Get для одного ресурса или запрос для нескольких экземпляров возвращают объекты WMI.

Скрипт WinRM возвращает не объекты, а потоки XML-текста. Дополнительные сведения см. в статье Удаленное управление Windows и WMI.

Отображение выходных данных XML из скриптов WinRM

API скриптов WinRM получает и получает XML-строки, описывающие ресурсы. Результирующий XML-код имеет форму текстового потока и требует, чтобы преобразование XML отображалось каким-то другим способом.

Следующий скрипт WinRM создает необработанные выходные данные XML.

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

В следующем блоке текста показаны выходные данные XML скрипта 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>

Скрипты могут использовать xml-преобразование, чтобы сделать эти выходные данные более удобочитаемыми. Дополнительные сведения см. в разделе Отображение выходных данных XML из скриптов WinRM.

Следующая версия скрипта форматирует XML в удобочитаемые выходные данные.

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 )

Преобразование XSL создает следующие выходные данные.

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

Скрипт WinRM и выходные данные Winrm.cmd

Выходные данные скрипта WinRM кодируются в Юникоде. Если вы создаете FileSystemObject и записываете файл из скрипта, результирующий файл будет в Юникоде. Однако если вы перенаправляете выходные данные в файл, кодировка будет ANSI. Если вы перенаправляете выходные данные в XML-файл и в выходных данных есть символы Юникода, XML-код будет недопустимым. Имейте в виду, что программа командной строки Winrm выводит ANSI.

Сведения об удаленном управлении Windows

Использование удаленного управления Windows

MSXSL

Справочник по модели DOM