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 を出力していることに注意してください。
関連トピック