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

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