Поделиться через


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

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

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

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

WinRM API обрабатывает и принимает 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