Skripterstellung in der Windows-Remoteverwaltung

Die Skript-API in WinRM und die zugehörige COM-API für C++ sind so konzipiert, dass sie die Vorgänge des WS-Management-Protokolls genau widerspiegeln.

Die WinRM-Skript-API in der Windows-Remoteverwaltung unterstützt alle WS-Management Protokollvorgänge mit Ausnahme eines. Abonnements für Ereignisse sind nicht zulässig. Um Ereignisse aus dem BMC-Systemereignisprotokoll zu abonnieren, müssen Sie die Befehlszeilentools Wecutil oder Wevtutil verwenden. Weitere Informationen finden Sie unter Ereignisse.

Die WinRM-Skript-API wird von Winrm.vbs aufgerufen, einem Befehlszeilentool, das in Visual Basic Scripting Edition (VBScript) geschrieben ist. Winrm.vbs bietet Beispiele für die Verwendung der WinRM-Skript-API.

Verwenden von WSman im Vergleich zur Verwendung von WMI-Skripts

WMI stellt über DCOM eine Verbindung mit Remotecomputern her, was die unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer beschriebene Konfiguration erfordert. WinRM verwendet DCOM nicht, um eine Verbindung mit einem Remotecomputer herzustellen. Stattdessen sendet das WS-Management-Protokoll SOAP-Nachrichten, und der Dienst verwendet einen einzelnen Port für HTTP und einen Port für den HTTPS-Transport.

Im Gegensatz zum Winrm-Befehlszeilentool müssen Skripts den XML-Code bereitstellen, der für die Übergabe an die WS-Management Protokollnachrichten erforderlich ist. Außerdem müssen sie URIs bereitstellen. Weitere Informationen finden Sie unter Ressourcen-URIs und Windows-Remoteverwaltung und WMI.

Die WMI-Skript-API funktioniert mit Objekten, z. B. Instanzen von Win32_LogicalDisk, die Ressourcen auf einem Computer darstellen. Diese WMI-Klasse wird in MOF-Dateien (Managed Object Format) definiert, die in binärer Form im WMI-Repository gespeichert werden. In WMI gibt ein Get-Vorgang für eine einzelne Ressource oder eine Abfrage für mehrere Instanzen WMI-Objekte zurück.

Ein WinRM-Skript gibt keine Objekte zurück, sondern Datenströme mit XML-Text. Weitere Informationen finden Sie unter Windows-Remoteverwaltung und WMI.

Anzeigen der XML-Ausgabe aus WinRM-Skripts

Die WinRM-Skript-API ruft XML-Zeichenfolgen ab und empfängt diese, die Ressourcen beschreiben. Der resultierende XML-Code ist in Form eines Textstreams und erfordert, dass eine XML-Transformation auf andere Weise angezeigt wird.

Das folgende WinRM-Skript erzeugt eine unformatierte XML-Ausgabe.

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

Der folgende Textblock zeigt die XML-Ausgabe des WinRM-Skripts.

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

Ihre Skripts können eine XML-Transformation verwenden, um diese Ausgabe lesbarer zu machen. Weitere Informationen finden Sie unter Anzeigen der XML-Ausgabe von WinRM-Skripts.

Die folgende Version des Skripts formatiert den XML-Code in eine für Menschen lesbare Ausgabe.

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 )

Die XSL-Transformation erstellt die folgende Ausgabe.

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-Skript und Winrm.cmd-Ausgabe

Die Ausgabe eines WinRM-Skripts ist in Unicode codiert. Wenn Sie ein FileSystemObject erstellen und eine Datei aus dem Skript schreiben, ist die resultierende Datei Unicode. Wenn Sie die Ausgabe jedoch in eine Datei umleiten, ist die Codierung ANSI. Wenn Sie die Ausgabe in eine XML-Datei umleiten und unicode-Zeichen in der Ausgabe vorhanden sind, ist der XML-Code ungültig. Beachten Sie, dass das Winrm-Befehlszeilentool ANSI ausgibt.

Informationen zur Windows-Remoteverwaltung

Verwenden der Windows-Remoteverwaltung

MSXSL

DOM-Referenz