Создание скриптов в удаленном управлении 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.
Связанные темы