リモート コンピューターからのデータの取得
リモート コンピューターとローカル コンピューターでデータを取得したり、リソースを管理したりできます。 Windows リモート管理スクリプトでリモート コンピューターに接続することは、ローカル接続を行うのとよく似ています。 WMI インスタンス データを使用でき、リモート コンピューターに WS-Management プロトコルを使用して通信できる BMC ハードウェアがある場合は、 インテリジェント プラットフォーム管理インターフェイス (IPMI) データも使用できます。 詳細については、「 Windows リモート管理と WMI」および 「 リモート ハードウェア管理」を参照してください。
ログオンに要求される認証の種類に関する情報を指定するには、 ConnectionOptions オブジェクトの作成が必要になる場合があります。
リモート コンピューターのアカウントのログオン ユーザー名とパスワードが同じである場合、必要な追加情報はトランスポート、ドメイン名、コンピューター名のみです。 ユーザー アカウント制御 (UAC) により、リモート アカウントはドメイン アカウントとリモート コンピューター管理者グループのメンバーである必要があります。 アカウントが Administrators グループのローカル コンピューター メンバーである場合、UAC は WinRM サービスへのアクセスを許可しません。 ワークグループ内のリモート WinRM サービスにアクセスするには、次の DWORD レジストリ エントリを作成し、その値を 1 に設定することで、ローカル アカウントの UAC フィルター処理を無効にする必要があります: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] LocalAccountTokenFilterPolicy。
ログオン ユーザー名とパスワードを使用してリモート コンピューターに接続するには
完全修飾ドメイン名または IP アドレスを使用してターゲット コンピューターを指定し、これを定数に割り当てます。 IPv6 アドレスを指定する場合は、アドレスを角かっこで囲む必要があります。
Const RemoteComputer = "ComputerName.domain.com"
WSMan オブジェクトを作成します。
Set objWsman = CreateObject("WSMan.Automation")
トランスポート、HTTP、HTTPS を指定し、ターゲット コンピューターを表す定数と連結して、セッションを作成します。
Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
次の VBScript コード例は、完全なスクリプトを示しています。 このスクリプトには、生の XML から人間が判読できる形式にデータを変換するサブルーチンが含まれています。 詳細については、「 WinRM スクリプトからの XML 出力の表示」を参照してください。
Const RemoteComputer = "ComputerName.domain.com"
Set objWsman = CreateObject("WSMan.Automation")
Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" & _
"wmi/root/cimv2/Win32_OperatingSystem"
Set objResponse = objSession.Enumerate(strResource)
While Not objResponse.AtEndOfStream
DisplayOutput(objResponse.ReadItem)
Wend
'****************************************************
' Displays WinRM XML message using built-in XSL
'****************************************************
Sub DisplayOutput(strWinRMXml)
Dim xmlFile, xslFile
Set xmlFile = CreateObject("MSXml.DOMDocument")
Set xslFile = CreateObject("MSXml.DOMDocument")
xmlFile.LoadXml(strWinRMXml)
xslFile.Load("WsmTxt.xsl")
Wscript.Echo xmlFile.TransformNode(xslFile)
End Sub
別のアカウントを使用してリモート コンピューターに接続するには
完全修飾ドメイン名または IP アドレスを使用してターゲット コンピューターを指定し、これを定数に割り当てます。 IPv6 アドレスを指定する場合は、アドレスを角かっこで囲む必要があります。
Const RemoteComputer = "ComputerName.domain.com"
WSMan オブジェクトを作成します。
Set objWsman = CreateObject("Wsman.Automation")
WSMan.CreateConnectionOptions メソッドを呼び出して ConnectionOptions オブジェクトを作成します。 リモート コンピューターのアカウントは、ローカル コンピューター管理者グループのメンバーである必要があります。
Set objConnectionOptions = objWsman.CreateConnectionOptions objConnectionOptions.UserName = "Username" objConnectionOptions.Password = "Password"
WSman.CreateSession 呼び出しで、flags パラメーターに適切なセッション接続フラグを指定します。 詳細については、「 セッション定数」を参照してください。 完全修飾コンピューター名または IP アドレスとトランスポート (http または https) を使用してターゲット コンピューターを指定します。 このスクリプトは、リモート WinRM サービスから Kerberos 認証を要求します。
WMI スクリプトとは異なり、WinRM スクリプトではいくつかの認証方法を使用できます。 詳細については、「 リモート接続の認証」を参照してください。
iFlags = objWsman.SessionFlagUseKerberos Or _ objWsman.SessionFlagCredUserNamePassword Set objSession = objWsman.CreateSession("https://" & RemoteComputer, _ iFlags, objConnectionOptions)
セッション オブジェクトを使用できるようになったら、任意の Session オブジェクト メソッドを呼び出して、リソースのデータを取得できます。 セッションが実行されているコンピューターで使用可能なすべてのリソースのデータを取得できます。 詳細については、「 ローカル コンピューターからデータを取得する」を参照してください。
次の VBScript コード例は、完全なスクリプトを示しています。 このスクリプトには、生の XML から人間が判読できる形式にデータを変換するサブルーチンが含まれています。 詳細については、「 WinRM スクリプトからの XML 出力の表示」を参照してください。 スクリプトは Kerberos 認証を指定しますが、リモート コンピューターがドメインではなくワークグループ内にある場合、Kerberos を指定するとエラーが生成されます。
Const RemoteComputer = "ComputerName.domain.com"
Set objWsman = CreateObject("Wsman.Automation")
Set objConnectionOptions = objWsman.CreateConnectionOptions
objConnectionOptions.UserName = "Username"
objConnectionOptions.Password = "Password"
iFlags = objWsman.SessionFlagUseKerberos Or _
objWsman.SessionFlagCredUserNamePassword
Set objSession = objWsman.CreateSession("https://" & RemoteComputer, _
iFlags, objConnectionOptions)
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" & _
"wmi/root/cimv2/Win32_OperatingSystem"
Set objResponse = objSession.Enumerate(strResource)
While Not objResponse.AtEndOfStream
DisplayOutput(objResponse.ReadItem)
Wend
'****************************************************
' Displays WinRM XML message using built-in XSL
'****************************************************
Sub DisplayOutput(strWinRMXml)
Dim xmlFile, xslFile
Set xmlFile = CreateObject("MSXml2.DOMDocument.3.0")
Set xslFile = CreateObject("MSXml2.DOMDocument.3.0")
xmlFile.LoadXml(strWinRMXml)
xslFile.Load("WsmTxt.xsl")
Wscript.Echo xmlFile.TransformNode(xslFile)
End Sub
関連トピック