SWbemLocator.ConnectServer メソッド
SWbemLocator オブジェクトの ConnectServer メソッドは、strServer パラメーターで指定されているコンピューター上の名前空間に接続します。 ターゲット コンピューターはローカルコンピューターでもリモートコンピューターでもかまいませんが、WMI がインストールされている必要があります。 接続のモニカーの種類の例と比較については、「 WMI スクリプトの作成」を参照してください。
Windows Vista 以降、SWbemLocator.ConnectServer は、strServer パラメーターの IPv6 アドレスを使用して IPv6 を実行しているコンピューターに接続できます。 詳細については、「 WMI での IPv6 および IPv4 サポート」を参照してください。
この構文の説明については、「 Scripting API のドキュメント規則」を参照してください。
構文
objwbemServices = .ConnectServer( _
[ ByVal strServer ], _
[ ByVal strNamespace ], _
[ ByVal strUser ], _
[ ByVal strPassword ], _
[ ByVal strLocale ], _
[ ByVal strAuthority ], _
[ ByVal iSecurityFlags ], _
[ ByVal objwbemNamedValueSet ] _
)
パラメーター
-
strServer [in, optional]
-
接続先のコンピューター名。 リモート コンピューターがログインするユーザー アカウントとは異なるドメインにある場合は、完全修飾コンピューター名を使用します。 このパラメーターを指定しない場合、呼び出しは既定でローカル コンピューターに設定されます。
例:
server1.network.fabrikam
また、このパラメーターで IP アドレスを使用することもできます。 IP アドレスが IPv6 形式の場合は、ターゲット コンピューターが IPv6 を実行している必要があります。 IPv4 のアドレスは次のようになります。
123.123.123.123
IPv6 形式の IP アドレスは次のようになります。
2010:836B:4179::836B:4179
DNS と IPv4 の詳細については、「解説」セクションを参照してください。
-
strNamespace [in, optional]
-
ログオンする名前空間を指定する文字列。 たとえば、root\default 名前空間にログオンするには、root\default を使用します。 このパラメーターを指定しない場合、スクリプトの既定の名前空間として構成されている名前空間が既定値になります。 詳細については、「 WMI アプリケーションまたはスクリプトの作成」を参照してください。
例: "root\CIMV2"
-
strUser [in, optional]
-
接続に使用するユーザー名。 文字列は、ユーザー名または Domain\Username の形式にすることができます。 現在のセキュリティ コンテキストを使用するには、このパラメーターを空白のままにします。 strUser パラメーターは、リモート WMI サーバーへの接続でのみ使用する必要があります。 ローカル WMI 接続に strUser を 指定しようとすると、接続の試行は失敗します。 Kerberos 認証が使用されている場合、 strUser と strPassword で指定されたユーザー名とパスワードをネットワーク上でインターセプトすることはできません。 UPN 形式を使用して strUser を指定できます。
例: "DomainName\UserName"
Note
ドメインが strAuthority で指定されている場合は、ここでドメインを指定しないでください。 両方のパラメーターでドメインを指定すると、無効なパラメーター エラーが発生します。
-
strPassword [in, optional]
-
接続時に使用するパスワードを指定する文字列。 現在のセキュリティ コンテキストを使用するには、パラメーターを空白のままにします。 strPassword パラメーターは、リモート WMI サーバーへの接続でのみ使用する必要があります。 ローカル WMI 接続に strPassword を指定しようとすると、接続の試行は失敗します。 Kerberos 認証が使用されている場合、 strUser と strPassword で指定されたユーザー名とパスワードをネットワーク上でインターセプトすることはできません。
-
strLocale [in, optional]
-
ローカライズ コードを指定する文字列。 現在のロケールを使用する場合は、空白のままにします。 空白でない場合、このパラメーターは、情報を取得する必要がある目的のロケールを示す文字列である必要があります。 Microsoft ロケール識別子の場合、文字列の形式は "MS_xxxx" です。xxxx は LCID を示す 16 進形式の文字列です。 たとえば、アメリカ英語は "MS_409" と表示されます。
-
strAuthority [in, optional]
-
""
-
このパラメーターは省略可能です。 ただし、指定した場合は、Kerberos または NTLMDomain のみを使用できます。
-
Kerberos:
-
strAuthority パラメーターが文字列 "Kerberos:" で始まる場合は、Kerberos 認証が使用され、このパラメーターには Kerberos プリンシパル名が含まれている必要があります。 Kerberos プリンシパル名は Kerberos:domain として指定されます (接続先のサーバーがどこに
fabrikam
あるかなどKerberos:fabrikam
)。例: "Kerberos:DOMAIN"
-
NTLMDomain:
-
NT Lan Manager (NTLM) 認証を使用するには、NTLMDomain:domain (ドメインの名前など) として
NTLMDomain:fabrikam
fabrikam
指定する必要があります。例: "NTLMDomain:DOMAIN"
このパラメーターを空白のままにすると、オペレーティング システムは COM とネゴシエートして、NTLM 認証と Kerberos 認証のどちらを使用するかを判断します。 このパラメーターは、リモート WMI サーバーへの接続でのみ使用する必要があります。 ローカル WMI 接続の権限を設定しようとすると、接続の試行は失敗します。
Note
ドメインが推奨される場所である strUser で指定されている場合は、ここで指定しないでください。 両方のパラメーターでドメインを指定すると、無効なパラメーター エラーが発生します。
iSecurityFlags [in, optional]
ConnectServer にフラグ値を渡すために使用されます。
0 (0x0)
このパラメーターの値が 0 の場合、サーバーへの接続が確立された後にのみ ConnectServer への呼び出しが返されます。 これにより、接続を確立できない場合、プログラムが無期限に応答を停止する可能性があります。
wbemConnectFlagUseMaxWait (128 (0x80))
ConnectServer 呼び出しは、2 分以内に返されます。 このフラグを使用して、接続が確立できない場合にプログラムが無期限に応答できないようにします。
objwbemNamedValueSet [in, optional]
通常、これは未定義です。 それ以外の場合は、要求を処理しているプロバイダーが使用できるコンテキスト情報を表す要素を持つ 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 |
|
タイプ ライブラリ |
|
[DLL] |
|
CLSID |
CLSID_SWbemLocator |
IID |
IID_ISWbemLocator |