Windows リモート管理でのスクリプト作成

WinRM のスクリプト API とそれに付随する C++ 用 COM API は、WS-Management プロトコルの操作を厳密に反映するように設計されています。

Windows リモート管理の WinRM スクリプト API は、1 つを除くすべてのWS-Managementプロトコル操作をサポートします。 イベントへのサブスクリプションは許可されません。 BMC システム イベント ログからイベントをサブスクライブするには、Wecutil または Wevtutil コマンド ライン ツールを使用する必要があります。 詳細については、「イベント」を参照してください。

WinRM スクリプト API は、Visual Basic Scripting Edition (VBScript) で記述されたコマンド ライン ツールである Winrm.vbs によって呼び出されます。 Winrm.vbsでは、 WinRM スクリプト API を使用する方法の例を示します。

WMI スクリプトの使用と比較した WSman の使用

WMI は DCOM を介してリモート コンピューターに接続します。これには、「 リモート コンピューター上の WMI への接続」で説明されている構成が必要です。 WinRM は DCOM を使用してリモート コンピューターに接続しません。 代わりに、WS-Management プロトコルは SOAP メッセージを送信し、サービスは HTTP に 1 つのポートを使用し、HTTPS トランスポートにはポートを使用します。

winrm コマンド ライン ツールとは異なり、スクリプトは、WS-Management プロトコル メッセージに渡すために必要な XML を提供する必要があります。 URI も提供する必要があります。 詳細については、「リソース URI」と「Windows リモート管理と WMI」を参照してください。

WMI スクリプト API は、コンピューター上のリソースを表す Win32_LogicalDiskのインスタンスなどのオブジェクトと連携します。 この WMI クラスは、WMI リポジトリのバイナリ形式で格納される マネージド オブジェクト形式 (MOF) ファイルで定義されています。 WMI では、1 つのリソースに対する 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 リファレンス