Windows远程管理中的脚本

WinRM 中的脚本 API 和 C++ 随附的 COM API 旨在密切反映WS-Management协议的操作。

Windows远程管理中的 WinRM 脚本 API 支持除一个协议操作之外的所有WS-Management协议操作。 它不允许订阅事件。 若要订阅 BMC 系统事件日志中的事件,必须使用 Wecutil 或 Wevtutil 命令行工具。 有关详细信息,请参阅事件

WinRM 脚本 API 由 Winrm.vbs(命令行工具)调用,该工具以 Visual Basic Scripting Edition (VBScript) 编写。 Winrm.vbs提供了有关如何使用 WinRM 脚本 API 的示例。

与使用 WMI 脚本相比,使用 WSman

WMI 通过 DCOM 连接到远程计算机,这需要 远程计算机上连接到 WMI 中所述的配置。 WinRM 不使用 DCOM 连接到远程计算机。 相反,WS-Management协议发送 SOAP 消息,服务使用单个端口进行 HTTP 和 HTTPS 传输的端口。

winrm 命令行工具不同,脚本必须提供传递给WS-Management协议消息所需的 XML。 它们还必须提供 URI。 有关详细信息,请参阅资源 URIWindows远程管理和 WMI

WMI 脚本 API 适用于表示计算机上的资源的 Win32_LogicalDisk实例等对象。 此 WMI 类以 托管对象格式 (MOF) 文件定义,这些文件以 WMI 存储库中的二进制形式存储。 在 WMI 中,单个资源的 Get 操作或多个实例的查询返回 WMI 对象。

WinRM 脚本不返回对象,而是返回 XML 文本流。 有关详细信息,请参阅Windows远程管理和 WMI

显示 WinRM 脚本的 XML 输出

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

以下文本块显示 WinRM 脚本的 XML 输出。

<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 转换使此输出更易于阅读。 有关详细信息,请参阅 显示 WinRM 脚本中的 XML 输出

以下版本的脚本将 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 脚本的输出以 Unicode 编码。 如果创建 FileSystemObject 并从脚本写入文件,则生成的文件为 Unicode。 但是,如果将输出重定向到文件,则编码为 ANSI。 如果将输出重定向到 XML 文件,并且输出中有 Unicode 字符,则 XML 将无效。 请注意 ,Winrm 命令行工具输出 ANSI。

关于Windows远程管理

使用 Windows 远程管理

MSXSL

DOM,引用