Udostępnij za pośrednictwem


Wykonywanie skryptów w zdalnym zarządzaniu systemem Windows

Interfejs API skryptów w usłudze WinRM i towarzyszący interfejs API com dla języka C++ są zaprojektowane tak, aby ściśle odzwierciedlały operacje protokołu WS-Management.

Interfejs API obsługi skryptów usługi WinRM w zdalnym zarządzaniu systemem Windows obsługuje wszystkie operacje protokołu WS-Management z wyjątkiem jednego. Nie zezwala na subskrypcje wydarzeń. Aby subskrybować zdarzenia z dziennika zdarzeń systemu BMC, należy użyć narzędzi wiersza polecenia Wecutil lub Wevtutil. Aby uzyskać więcej informacji, zobacz Events.

Interfejs API skryptów usługi WinRM jest wywoływany przez bibliotekę Winrm.vbs, narzędzie wiersza polecenia napisane w języku Visual Basic Scripting Edition (VBScript). Plik Winrm.vbs zawiera przykłady używania interfejsu API skryptów usługi WinRM .

Używanie narzędzia WSman w porównaniu z używaniem skryptów usługi WMI

Usługa WMI łączy się z komputerami zdalnymi za pośrednictwem modelu DCOM, co wymaga konfiguracji opisanej w Nawiązywanie połączenia z usługą WMI na komputerze zdalnym. Usługa WinRM nie używa modelu DCOM do nawiązywania połączenia z komputerem zdalnym. Zamiast tego protokół WS-Management wysyła komunikaty PROTOKOŁU SOAP, a usługa używa jednego portu dla protokołu HTTP i portu transportu HTTPS.

W przeciwieństwie do narzędzia wiersza polecenia winrm, skrypty muszą dostarczać XML wymagany do przekazywania wiadomości protokołu WS-Management. Muszą również podać identyfikatory URI. Aby uzyskać więcej informacji, zobacz identyfikatory URI zasobów i zdalnego zarządzania systemem Windows i usługi WMI.

Interfejs skryptowy API WMI współpracuje z obiektami, takimi jak wystąpienia Win32_LogicalDisk, które reprezentują zasoby na komputerze. Ta klasa WMI jest zdefiniowana w plikach Managed Object Format (MOF), które są przechowywane w postaci binarnej w repozytorium WMI. W usłudze WMI operacja Get dla pojedynczego zasobu lub zapytanie dotyczące wielu wystąpień zwraca obiekty WMI.

Skrypt usługi WinRM nie zwraca obiektów, ale raczej strumieni tekstu XML. Aby uzyskać więcej informacji, zobacz Windows Remote Management and WMI.

Wyświetlanie danych wyjściowych XML ze skryptów usługi WinRM

Interfejs API skryptów usługi WinRM pobiera i odbiera ciągi XML opisujące zasoby. Wynikowy kod XML jest w postaci strumienia tekstowego i wymaga przekształcenia XML, aby był wyświetlany w inny sposób.

Poniższy skrypt usługi WinRM generuje nieprzetworzone dane wyjściowe 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")

Poniższy blok tekstu przedstawia dane wyjściowe XML ze skryptu usługi 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>

Skrypty mogą używać przekształcenia XML, aby te dane wyjściowe mogły być bardziej czytelne. Aby uzyskać więcej informacji, zobacz Wyświetlanie danych wyjściowych XML ze skryptów usługi WinRM.

Następująca wersja skryptu formatuje kod XML do danych wyjściowych czytelnych dla człowieka.

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 )

Przekształcenie XSL tworzy następujące dane wyjściowe.

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

Skrypt WinRM i dane wyjściowe WinRM.cmd

Dane wyjściowe skryptu usługi WinRM są kodowane w formacie Unicode. Jeśli utworzysz FileSystemObject i napiszesz plik ze skryptu, wynikowy plik to Unicode. Jednak jeśli przekierowujesz dane wyjściowe do pliku, kodowanie to ANSI. Jeśli przekierowujesz dane wyjściowe do pliku XML i w danych wyjściowych będą znajdować się znaki Unicode, kod XML będzie nieprawidłowy. Należy pamiętać, że narzędzie Winrm do wiersza polecenia zwraca ANSI.

Informacje o zdalnego zarządzania systemem Windows

Korzystanie z usługi Zarządzania Zdalnego systemu Windows

MSXSL

Referencja DOM