WMI での委任
リモート システムからデータを取得するローカル システムでスクリプトを実行する際、WMI はリモート システム上のデータのプロバイダーに資格情報を提供します。 この場合、必要なネットワーク ホップは 1 つだけなので、必要となるのは偽装レベルを Impersonate にすることだけです。 ただし、スクリプトがリモート システム上の WMI に接続し、追加のリモート システムでログ ファイルを開こうとした場合は、偽装レベルが Delegate でなとスクリプトが失敗します。 複数のネットワーク ホップが発生する操作では、Delegate 偽装レベルが必要となります。 WMI での DCOM セキュリティの詳細については、「クライアント アプリケーション プロセスのセキュリティの設定」を参照してください。 2 台のコンピューター間での 1 ネットワーク ホップ接続について詳しくは、「リモート コンピューター上の WMI への接続」を参照してください。
委任を使用して別のコンピューター経由でコンピューターに接続するには
ドメイン コントローラーで、Active Directory での委任を有効にします ([コントロール パネル][管理タスク] の [Active Directory ユーザーとコンピューター])。 リモート システム上のアカウントは、[委任に対して信頼されました] としてマークする必要があります。ローカル システム上のアカウントは、[アカウントは重要なので委任できない] としてマークしないでください。 ローカル システム、リモート システム、およびドメイン コントローラーは、同じドメインまたは信頼されたドメインのメンバーである必要があります。
注 委任を使用すると、直接の制御下にないプロセスが資格情報を使用できるようになるので、セキュリティ上のリスクが発生します。
コードを次のように変更して、委任を使用する意思を示します。
-
PowerShell
-
WMI コマンドレットの -Impersonation パラメーターを Delegate に設定します。
-
VBScript
-
モニカー文字列の SWbemLocator.ConnectServer または Delegate の呼び出しで、impersonationLevel パラメーターを Delegate に設定します。 SWbemSecurity オブジェクトで偽装を設定することもできます。
-
C++
-
CoInitializeSecurity または CoSetProxyBlanket の呼び出しで、偽装レベル パラメーターを RPC_C_IMP_LEVEL_DELEGATE に設定します。 これらの呼び出しをいつ行うかについて詳しくは、「WMI アプリケーション用の COM の初期化」を参照してください。
C++ でリモート COM サーバーにクライアント ID を渡すには、CoSetProxyBlanket の呼び出しでクローキングを設定します。 詳細については、「クローキング」を参照してください。
-
例
次のコード例は、偽装を Delegate に設定するモニカー文字列を示したものです。 権限を Kerberos に設定する必要があることに注意してください。
set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")
次のコード例は、SWbemLocator.ConnectServer を使用して、偽装を Delegate (値 4) に設定する方法を示したものです。
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(Computer_B, _
"Root\CIMv2", _
AdminAccount, _
MyPassword, _
"kerberos:Domain\Computer_B")
objWMIService.Security_.ImpersonationLevel = 4
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示