SWbemLocator.ConnectServer メソッド

SWbemLocator オブジェクトの ConnectServer メソッドでは、strServer パラメーターで指定したコンピューター上の名前空間に接続します。 ターゲット コンピューターはローカルでもリモートでもかまいませんが、WMI がインストールされている必要があります。 接続の例とモニカーの種類との比較については、「WMI スクリプトの作成」を参照してください。

Windows Vista 以降、SWbemLocator.ConnectServer では、strServer パラメーターの IPv6 アドレスを使用して IPv6 を実行しているコンピューターに接続できます。 詳細については、「WMI での IPv6 と IPv4 のサポート」を参照してください。

この構文の説明については、「スクリプト API のドキュメントの表記規則」を参照してください。

構文

objwbemServices = .ConnectServer( _
  [ ByVal strServer ], _
  [ ByVal strNamespace ], _
  [ ByVal strUser ], _
  [ ByVal strPassword ], _
  [ ByVal strLocale ], _
  [ ByVal strAuthority ], _
  [ ByVal iSecurityFlags ], _
  [ ByVal objwbemNamedValueSet ] _
)

パラメーター

strServer [in、省略可能]

接続先のコンピューター名。 リモート コンピューターがログインするユーザー アカウントとは異なるドメインにある場合は、完全修飾コンピューター名を使用します。 このパラメーターを指定しない場合、呼び出しは既定でローカル コンピューターに設定されます。

例: server1.network.fabrikam

このパラメーターで IP アドレスを使用することもできます。 IP アドレスが IPv6 形式の場合、ターゲット コンピューターは IPv6 を実行している必要があります。 IPv4 のアドレスは 123.123.123.123 のようになります

IPv6 形式の IP アドレスは 2010:836B:4179::836B:4179 のようになります

DNS と IPv4 の詳細については、「解説」セクションを参照してください。

strNamespace [in、省略可能]

ログオン先の名前空間を指定する文字列。 たとえば、root\default 名前空間にログオンするには、root\default を使用します。 このパラメーターを指定しない場合、スクリプト作成の既定の名前空間として構成されている名前空間が既定で設定されます。 詳細については、「WMI アプリケーションまたはスクリプトの作成」を参照してください。

例: "root\CIMV2"

strUser [in、省略可能]

接続に使用するユーザー名。 文字列は、ユーザー名または Domain\Username のいずれかの形式にすることができます。 現在のセキュリティ コンテキストを使用する場合は、このパラメーターを空白のままにします。 strUser パラメーターは、リモート WMI サーバーへの接続でしか使用できません。 ローカル WMI 接続に strUser を指定しようとすると、接続試行は失敗します。 Kerberos 認証が使用されている場合、strUserstrPassword で指定されたユーザー名とパスワードをネットワーク上でインターセプトすることはできません。 UPN 形式を使用して strUser を指定できます。

例: "DomainName\UserName"

注意

ドメインが strAuthority で指定されている場合は、ここでドメインを指定しないでください。 両方のパラメーターでドメインを指定すると、無効なパラメーター エラーが発生します。

strPassword [in、省略可能]

接続時に使用するパスワードを指定する文字列。 現在のセキュリティ コンテキストを使用する場合は、このパラメーターを空白のままにします。 strPassword パラメーターは、リモート WMI サーバーへの接続でしか使用できません。 ローカル WMI 接続に strPassword を指定しようとすると、接続試行は失敗します。 Kerberos 認証が使用されている場合、strUserstrPassword で指定されたユーザー名とパスワードをネットワーク上でインターセプトすることはできません。

strLocale [in、省略可能]

ローカライズ コードを指定する文字列。 現在のロケールを使用する場合は、空白のままにします。 空白でない場合、このパラメーターは、情報を取得する必要がある目的のロケールを示す文字列である必要があります。 Microsoft ロケール識別子の文字列の形式は "MS_xxxx" です。ここで xxxx には、LCID を示す 16 進数形式の文字列が入ります。 たとえば、アメリカ英語は "MS_409" と表示されます。

strAuthority [in、省略可能]

""

このパラメーターは省略可能です。 ただし、指定されている場合は、Kerberos または NTLMDomain のみを使用できます。

Kerberos:

strAuthority パラメーターが文字列 "Kerberos:" で始まる場合は、Kerberos 認証が使用とされ、このパラメーターには Kerberos プリンシパル名が含まれます。 Kerberos プリンシパル名は、Kerberos:fabrikam のように、Kerberos:domain として指定され、ここで、fabrikam は接続先のサーバを指しています。

例: "Kerberos:DOMAIN"

NTLMDomain:

NT Lan Manager (NTLM) 認証を使用するには、NTLMDomain:fabrikam のように、NTLMDomain:domain として指定する必要があります。ここでfabrikam はドメインの名前です。

例: "NTLMDomain:DOMAIN"

このパラメーターを空白のままにすると、オペレーティング システムは COM とネゴシエートして、NTLM 認証と Kerberos 認証のどちらを使用するかを判断します。 このパラメーターは、リモート WMI サーバーへの接続でしか使用できません。 ローカル WMI 接続に機関を指定しようとすると、接続試行は失敗します。

注意

ドメインが、推奨場所である strUser で指定されている場合は、ここで指定しないでください。 両方のパラメーターでドメインを指定すると、無効なパラメーター エラーが発生します。

iSecurityFlags [in、省略可能]

ConnectServer にフラグ値を渡すために使用します。

0 (0x0)

このパラメーターの値が 0 の場合、サーバーへの接続が確立された後にのみ ConnectServer の呼び出しが返されます。 これにより、接続を確立できない場合、プログラムが無期限に応答を停止する可能性があります。

wbemConnectFlagUseMaxWait (128 (0x80))

ConnectServer 呼び出しは、2 分以内に戻る保証があります。 このフラグを使用して、接続を確立できない場合にプログラムが無期限に応答を停止しないようにします。

objwbemNamedValueSet [in、省略可能]

通常、これは未定義です。 そうでない場合、これは SWbemNamedValueSet オブジェクトであり、その要素は、要求を処理しているプロバイダーが使用できるコンテキスト情報を表します。 このような情報をサポートする、または必要とするプロバイダーは、認識された値名、値のデータ型、許可された値、セマンティクスを文書化する必要があります。

戻り値

成功した場合、WMI は、strServer で指定されたコンピューター上の strNamespace で指定された名前空間にバインドされている SWbemServices オブジェクトを返します。

エラー コード

ConnectServer メソッドの完了後に、Err オブジェクトに次の一覧のいずれかのエラー コードが含まれる場合があります。

wbemErrAccessDenied - 2147749891 (0x80041003)

現在の、または指定されたユーザー名とパスワードが無効であるか、接続を確立する権限がありませんでした。

wbemErrFailed - 2147749889 (0x80041001)

未定義のエラーが発生しました。

wbemErrInvalidNamespace - 2147749902 (0x8004100E)

指定した名前空間がサーバーに存在しませんでした。

wbemErrInvalidParameter - 2147749896 (0x80041008)

無効なパラメーターが指定されたか、名前空間を解析できませんでした。

wbemErrOutOfMemory - 2147749894 (0x80041006)

操作を完了させるための十分なメモリがありません。

wbemErrTransportFailure - 2147749909

ネットワーク エラーが発生して、通常の操作が妨げられていました。

解説

ConnectServer メソッドは、モニカー文字列で別のパスワードを指定できないため、リモート コンピューターで別のユーザー名とパスワードの資格情報を持つアカウントに接続するときによく使用されます。 詳細については、「リモート コンピューター上の WMI への接続」を参照してください。

IPv4 アドレスを使用してリモート サーバーに接続すると、予期しない動作が発生する可能性があります。 原因として考えられるのは、環境内の DNS エントリが古い場合です。 このような状況では、コンピューターに古い PTR エントリが使用され、予期しない結果が引き起こされます。 この動作を回避するには、ConnectServer を呼び出す前に IP アドレスにピリオド (".") を追加します。 これにより、逆引き DNS 参照は失敗しますが、ConnectServer 呼び出しが正しいコンピューターで成功する可能性があります。

次の VBScript コード例では、リモート コンピューターに接続して Win32_IP4RouteTable データを取得する方法について説明します。 strDomain で指定されたドメイン名は、strAuthority で使用されます。

Const intMin = 3600
strComputer = "RemoteComputer" 
strDomain = "DomainName"  
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine 
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
Wscript.Echo

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _ 
                                                  "root\CIMV2", _ 
                                                  strUser, _ 
                                                  strPassword, _ 
                                                  "MS_409", _ 
                                                  "NTLMDomain:" + strDomain) 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_IP4RouteTable",,48) 
For Each objItem in colItems
    WScript.Echo "Age in Minutes: " & int(objItem.Age/intMin) & VBNewLine _
               & "Description:    " & objItem.Description & VBNewLine _
               & "Destination:    " & objItem.Destination & VBNewLine _
               & "InterfaceIndex: " & objItem.InterfaceIndex & VBNewLine _
               & "Mask:           " & objItem.Mask & VBNewLine _
               & "Metric1:        " & objItem.Metric1 & VBNewLine _
               & "Metric2:        " & objItem.Metric2 & VBNewLine _
               & "Metric3:        " & objItem.Metric3 & VBNewLine _
               & "Metric4:        " & objItem.Metric4 & VBNewLine _
               & "Metric5:        " & objItem.Metric5 & VBNewLine _
               & "Name:           " & objItem.Name & VBNewLine _
               & "NextHop:        " & objItem.NextHop & VBNewLine _
               & "Protocol:       " & objItem.Protocol & VBNewLine _
               & "Type: " & objItem.Type
    WScript.Echo
   </example>
Next

次の PowerShell スニペットでは、リモート サーバーにアクセスし、使用可能な WMI クラスの一覧を示しています。

$NameSpace = 'root\ccm'
$ComputerName = 'sccm.company.com'
$WbemLocator = New-Object -ComObject "WbemScripting.SWbemLocator"
$WbemServices = $WbemLocator.ConnectServer($ComputerName, $Namespace)
$WbemClasses = $WbemServices.SubclassesOf()
$WbemClasses

要件

要件
サポートされている最小のクライアント
Windows Vista
サポートされている最小のサーバー
Windows Server 2008
Header
Wbemdisp.h
タイプ ライブラリ
Wbemdisp.tlb
[DLL]
Wbemdisp.dll
CLSID
CLSID_SWbemLocator
IID
IID_ISWbemLocator

関連項目

SWbemLocator

SWbemServices

リモート コンピューター上の WMI への接続

WMI スクリプトの作成