リモート コンピューターからのデータの取得

リモート コンピューターとローカル コンピューターでデータを取得したり、リソースを管理したりできます。 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

ログオン ユーザー名とパスワードを使用してリモート コンピューターに接続するには

  1. 完全修飾ドメイン名または IP アドレスを使用してターゲット コンピューターを指定し、これを定数に割り当てます。 IPv6 アドレスを指定する場合は、アドレスを角かっこで囲む必要があります。

    Const RemoteComputer = "ComputerName.domain.com"
    
  2. WSMan オブジェクトを作成します。

    Set objWsman = CreateObject("WSMan.Automation")
    
  3. トランスポート、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

別のアカウントを使用してリモート コンピューターに接続するには

  1. 完全修飾ドメイン名または IP アドレスを使用してターゲット コンピューターを指定し、これを定数に割り当てます。 IPv6 アドレスを指定する場合は、アドレスを角かっこで囲む必要があります。

    Const RemoteComputer = "ComputerName.domain.com"
    
  2. WSMan オブジェクトを作成します。

    Set objWsman = CreateObject("Wsman.Automation")
    
    
  3. WSMan.CreateConnectionOptions メソッドを呼び出して ConnectionOptions オブジェクトを作成します。 リモート コンピューターのアカウントは、ローカル コンピューター管理者グループのメンバーである必要があります。

    Set objConnectionOptions = objWsman.CreateConnectionOptions
    objConnectionOptions.UserName = "Username"
    objConnectionOptions.Password = "Password"
    
  4. WSman.CreateSession 呼び出しで、flags パラメーターに適切なセッション接続フラグを指定します。 詳細については、「 セッション定数」を参照してください。 完全修飾コンピューター名または IP アドレスとトランスポート (http または https) を使用してターゲット コンピューターを指定します。 このスクリプトは、リモート WinRM サービスから Kerberos 認証を要求します。

    WMI スクリプトとは異なり、WinRM スクリプトではいくつかの認証方法を使用できます。 詳細については、「 リモート接続の認証」を参照してください。

    iFlags = objWsman.SessionFlagUseKerberos Or _
      objWsman.SessionFlagCredUserNamePassword
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer, _
      iFlags, objConnectionOptions)
    
  5. セッション オブジェクトを使用できるようになったら、任意の 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

Windows リモート管理について

Windows リモート管理の使用

Windows リモート管理リファレンス