シナリオ ガイド: WMI 接続とアクセスに関する問題のトラブルシューティング
この記事では、Windows Management Instrumentation (WMI) の構成を確認する方法と、WMI 接続またはアクセスの問題を診断してトラブルシューティングする方法について説明します。
WMI の構成または接続に関する問題の例を次に示します。 この問題は、WMI を使用または依存するさまざまな製品やアプリケーションからの問題です。
クラスターの作成ウィザードは、リモート コンピューター (クラスター ノード) への接続を試みますが、データの取得に失敗します。
Active Directory ロール インストーラーがホスト コンピューターとの通信を試みると、Active Directory Domain Services構成ウィザードが失敗し、次のエラーが発生します。
Adprep は、Windows Management Instrumentation (WMI) を使用してサーバー
testbox.contoso.com
からデータを取得できませんでした。ローカル WMI クエリで PowerShell コマンドレットの使用が
Get-WmiObject
失敗し、"アクセスが拒否されました" というエラーが表示されます。
接続フロー
WMI 接続には、複数のコンポーネントとレイヤーが関係しています。 次のコンポーネントは、大まかに関係しています。
WMI 接続またはクエリを開始するクライアントまたは管理アプリケーション
ローカルおよびリモートのプロセス間通信 (IPC) に使用されるコンポーネント オブジェクト モデル (COM) または分散コンポーネント オブジェクト モデル (DCOM) コンポーネント
トランスポートまたはネットワーク レイヤー (リモート プロシージャ コール (RPC))
WMI リポジトリと WMI サービス
WMI プロバイダー
マネージド オブジェクト
問題を特定する
エラーまたはエラーが発生した場所、またはエラーを返すコンポーネントに基づいて、問題は次のように分類できます。
- 接続の問題
- アクセスの問題
- コア WMI プロバイダーのエラー コード
接続の問題
WMI インフラストラクチャへの接続をローカルまたはリモートで確立する前に発生する WMI 接続エラーは、接続の問題と見なされます。
問題またはエラーは、COM/DCOM アーキテクチャによってローカルまたはリモート、トランスポート層 (RPC)、またはファイアウォールによって返されます。 接続の問題ではさまざまなエラーが発生する可能性がありますが、最も一般的なエラーは次のとおりです。
-
0x800706ba
HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE) -
0x80041015
通常の操作を妨げるネットワーク エラーが発生しました。
アクセスの問題
アクセスの問題は、アクセスエラーまたは 1 つ以上の WMI コンポーネントのアクセス許可がないために WMI 接続またはクエリが失敗した場合に発生します。
つまり、WMI インフラストラクチャ内には COM/DCOM、WMI 名前空間、WMI リポジトリ、プロバイダーなど、複数の領域があり、ユーザーはそれらにアクセス、使用、または操作するための適切なアクセス許可が必要です。 アクセス許可または制限がない場合、WMI 接続エラーが発生し、次のエラーが発生する可能性があります。
-
0x80070005
E_ACCESS_DENIED
DCOM セキュリティによって拒否されたアクセス -
0x80041003
WBEM_E_ACCESS_DENIED
プロバイダーによって拒否されたアクセス
コア WMI プロバイダーのエラー コード
WMI への接続に成功し、適切なアクセス許可を持った後でも、クエリの基になる問題、プロバイダーから返されたエラー、無効なクラス、または無効な名前空間が原因で、WMI クエリまたは接続が失敗する可能性があります。
この問題はさまざまな理由によって発生する可能性があり、エラーは主に WMI サービスによって返されます。
このような場合、返されるエラー コードは問題を理解するのに役立ちます。 いくつかのエラー コードを次に示します。
-
0x80041002 - WBEM_E_NOT_FOUND
-
0x80041004 - WBEM_E_PROVIDER_FAILURE
-
0x80041062 - WBEM_E_PRIVILEGE_NOT_HELD
-
0x8004100E - WBEM_E_INVALID_NAMESPACE
-
0x80041010 - WBEM_E_INVALID_CLASS
-
0x80041011 - WBEM_E_PROVIDER_NOT_FOUND
-
0x80041012 - WBEM_E_INVALID_PROVIDER_REGISTRATION
-
0x80041013 - WBEM_E_PROVIDER_LOAD_FAILURE
WMI インフラストラクチャによって返されるエラーの完全な一覧は、 WMI エラー定数に記載されています。
構成を確認する
返されたエラーまたはエラーに基づいて問題が接続またはアクセスの問題であることを確認できる場合は、WMI の既存の構成をチェックするか、ユーザーに適切なアクセス許可があることを確認します。
- 既定では、 管理者 グループのメンバーのみが WMI 名前空間にリモートでアクセスできます。
- WMI を使用してリモート コンピューターに接続するには、接続に対して正しい DCOM 設定と WMI 名前空間のセキュリティ設定が有効になっていることを確認します。
- WMI には、リモート接続のターゲット コンピューターに必要な既定の偽装、認証、認証サービス (NTLM または Kerberos) 設定があります。 ローカル コンピューターでは、ターゲット システムが受け入れない異なる既定値を使用する場合があります。 これらの設定は、接続呼び出しで変更できます。
- ローカル コンピューター上の WMI へのConnectionsの既定の
PktPrivacy
認証レベルは です。 - WMI リモート接続は、ユーザー アカウント制御 (UAC) と Windows ファイアウォールの影響を受けます。
管理者以外のユーザーがコンピューターにリモートでアクセスできるように DCOM セキュリティを設定する
WMI の DCOM 設定を構成するには、コントロール パネルの管理ツールにある DCOM 構成ユーティリティ (DCOMCnfg.exe) を使用します。
このユーティリティは、特定のユーザーが DCOM を介してリモートでコンピューターに接続できるようにする設定を公開します。 このユーティリティを使用すると、WMI サービスを開始、アクセス、および構成するようにセキュリティを設定できます。
次の手順では、特定のユーザーとグループに DCOM リモート起動とアクティブ化のアクセス許可を付与する方法について説明します。
コンピューター A がコンピューター B にリモートで接続している場合は、コンピューター B でこれらのアクセス許可を設定して、コンピューター B の Administrators グループに属していないユーザーまたはグループがコンピューター B で DCOM の起動とアクティブ化の呼び出しを実行できるようにします。
DCOM リモート起動とアクティブ化のアクセス許可をユーザーまたはグループに手動で付与するには、次の手順に従います。
- [Start Run]\(実行の開始\>) を選択し、「DCOMCNFG」と入力し、[OK] を選択します。
- [ コンポーネント サービス ] ウィンドウで、[ コンポーネント サービス>コンピューター] を展開します。 [マイ コンピューター] を右クリックし、[プロパティ] を選択します。
- [ マイ コンピューターのプロパティ ] ダイアログで、[ COM セキュリティ ] タブを選択します。
- [ 起動とアクティブ化のアクセス許可] で、[ 制限の編集] を選択します。
- [起動とアクティブ化のアクセス許可] ダイアログで、名前またはグループが [グループ名] または [ユーザー名] の一覧に表示されない場合は、[追加] を選択します。 [ ユーザー、コンピューター、またはグループの選択 ] ダイアログで、[ 選択するオブジェクト名を入力 します] ボックスに自分の名前とグループを追加し、[OK] を選択 します。
- [ 起動とアクティブ化のアクセス許可 ] ダイアログで、[グループまたはユーザー名] の一覧で ユーザーとグループを 選択します。 [ユーザーまたはグループ>の <Permissions] で、[リモート起動とリモート アクティブ化のアクセス許可を許可する] をチェックし、[OK] を選択します。
次の手順では、特定のユーザーとグループに DCOM リモート アクセス許可を付与する方法について説明します。 コンピューター A がコンピューター B にリモートで接続している場合は、コンピューター B でこれらのアクセス許可を設定して、コンピューター B の Administrators グループに属していないユーザーまたはグループがコンピューター B に接続できるようにします。
DCOM リモート アクセス許可を付与するには、次の手順に従います。
- [Start Run]\(実行の開始\>) を選択し、「DCOMCNFG」と入力し、[OK] を選択します。
- [ コンポーネント サービス ] ウィンドウで、[ コンポーネント サービス>コンピューター] を展開します。 [マイ コンピューター] を右クリックし、[プロパティ] を選択します。
- [ マイ コンピューターのプロパティ ] ダイアログで、[ COM セキュリティ ] タブを選択します。
- [ アクセス許可] で、[ 制限の編集] を選択します。
- [アクセス許可] ダイアログで、[グループ名またはユーザー名] ボックスで [ANONYMOUS LOGON] を選択します。 [ANONYMOUS LOGON のアクセス許可] で、[リモート アクセスの許可] をチェックし、[OK] を選択します。
注:
ターゲット コンピューター上の 分散 COM ユーザー グループにユーザーをローカルに追加することもできます。 既定では、このグループには、任意の Windows コンピューター上の COM/DCOM にアクセスするためのすべてのアクセス許可があります。
特定の WMI 名前空間へのアクセスをユーザーに許可する
ユーザーが特定の WMI 名前空間にアクセスすることを許可または禁止するには、名前空間の WMI コントロールで [リモート有効化] アクセス許可を設定します。 ユーザーがアクセスを許可されていない名前空間にユーザーが接続しようとすると、ユーザーはエラー 0x80041003を受け取ります。
既定では、このアクセス許可は管理者に対してのみ有効になっています。 管理者は、管理者以外のユーザーの特定の WMI 名前空間へのリモート アクセスを有効にすることができます。
次の手順では、管理者以外のユーザーの リモート有効化 アクセス許可を設定します。
WMIMGMT.msc を使用してリモート コンピューターに接続します。
[WMI コントロール] を右クリックし、[プロパティ] を選択します。
[ セキュリティ ] タブで、名前空間を選択し、[セキュリティ] を選択 します。
注:
Root\cimv2 は既定の名前空間です。
適切なアカウントを探すか追加し、アクセス許可の一覧で [リモートの有効化と読み取りセキュリティ] をチェックします。
注:
同じアクセス許可がサブフォルダーまたはサブネームスペースに継承されるようにするには、[詳細設定] を選択 します。 次に、目的のユーザーを選択し、[適用先] セクションで [この名前空間とサブネームスペース] が選択されていることを確認します。
特定の名前空間内の特定のクラスへの接続をチェックするには、次の手順に従って Windows Management Instrumentation Tester (WBEMTEST) ツールを使用します。
- 管理者として WBEMTEST を開き、[ 接続] を選択します。 既定では、コンソールはローカル WMI の Root\cimv2 名前空間に接続します。
- 名前空間を、接続をテストしようとしている名前空間に変更します。 リモート コンピューターの場合は、\\machinename>\<Root\cimv2 の形式で入力します。
接続が成功した場合、WBEMTEST メイン ウィンドウは、指定された既定以外の名前空間に接続されます。
既定では、WBEMTEST 接続では、ログインしたユーザー資格情報が使用されます。 別のアカウントで接続すると、接続を試みる前に資格情報がポップアップ表示されます。
次の例は、User1 の資格情報を使用して "RemoteMachine1" の名前空間 root\ccm に接続する試みを示しています。
ドメイン参加済みマシンとワークグループ コンピューターの間に WMI 接続を設定するには、ターゲット コンピューターのローカル ユーザーを検討してください。
注:
ターゲット コンピューターの組み込みのローカル管理者を使用する場合、このユーザーは既に他のマシンから WMI にリモートでアクセスするための適切な権限を持っており、追加の構成は必要ありません。
ターゲット マシンのファイアウォールでは、受信 WMI 接続を許可する必要があります。この接続に対して、上記のファイアウォール構成を Windows ファイアウォール設定 セクションに示すように実行できます。 次に、「DCOM セキュリティの設定」に示すように DCOM セキュリティと WMI 名前空間を構成して、管理者以外のユーザーがコンピューターにリモートでアクセスできるように し 、[ユーザーが特定の WMI 名前空間にアクセスできるようにする] セクションを使用します。
Windows ファイアウォールの設定
Windows ファイアウォール設定の WMI 設定では、他の DCOM アプリケーションではなく WMI 接続のみが有効になります。
リモート ターゲット コンピューターの WMI のファイアウォールで例外を設定する必要があります。
WMI の例外により、WMI はリモート接続を受信できます。 クライアント アプリケーションが独自のシンクを作成する場合、コールバックを成功させるには、そのシンクをファイアウォールの例外に明示的に追加する必要があります。
Windows ファイアウォール UI を使用して WMI トラフィックを有効または無効にすることができます。 これを行うには、次の手順を実行します。
- コントロール パネルで、[セキュリティ>] [Windows ファイアウォール] を選択します。
- [ 設定の変更] を選択し、[ 例外 ] タブを選択します。
- [例外] ウィンドウで、[Windows Management Instrumentation (WMI) チェック] ボックスを選択して、ファイアウォール経由の WMI トラフィックを有効にします。 WMI トラフィックを無効にするには、[チェック] ボックスをオフにします。
WMI 規則グループを使用して、コマンド プロンプトでファイアウォール経由の WMI トラフィックを有効または無効にすることができます。
コマンド プロンプトで次のコマンドを使用して、ファイアウォール経由の WMI トラフィックを有効にします。
netsh advfirewall firewall set rule group="windows management instrumentation (wmi)" new enable=yes
次のコマンドを使用して、ファイアウォール経由の WMI トラフィックを無効にします。
netsh advfirewall firewall set rule group="windows management instrumentation (wmi)" new enable=no
単一の WMI ルール グループ コマンドを使用する代わりに、DCOM、WMI サービス、シンクごとに個別のコマンドを使用することもできます。
DCOM、WMI、コールバック シンク、および送信接続に対して個別の規則を使用して WMI トラフィックを有効にするには、
DCOM ポート 135 のファイアウォール例外を確立するには、次のコマンドを使用します。
netsh advfirewall firewall add rule dir=in name="DCOM" program=%systemroot%\system32\svchost.exe service=rpcss action=allow protocol=TCP localport=135
WMI サービスのファイアウォール例外を確立するには、次のコマンドを使用します。
netsh advfirewall firewall add rule dir=in name ="WMI" program=%systemroot%\system32\svchost.exe service=winmgmt action = allow protocol=TCP localport=any
リモート コンピューターからコールバックを受信するシンクのファイアウォール例外を確立するには、次のコマンドを使用します。
netsh advfirewall firewall add rule dir=in name ="UnsecApp" program=%systemroot%\system32\wbem\unsecapp.exe action=allow
ローカル コンピューターが非同期的に通信しているリモート コンピューターへの送信接続のファイアウォール例外を確立するには、次のコマンドを使用します。
netsh advfirewall firewall add rule dir=out name ="WMI_OUT" program=%systemroot%\system32\svchost.exe service=winmgmt action=allow protocol=TCP localport=any
DCOM、WMI、コールバック シンク、および送信接続に対して個別のルールを使用して WMI トラフィックを無効にするには、次のようにします。
DCOM 例外を無効にするには、次のコマンドを使用します。
netsh advfirewall firewall delete rule name="DCOM"
WMI サービスの例外を無効にするには、次のコマンドを使用します。
netsh advfirewall firewall delete rule name="WMI"
シンク例外を無効にするには、次のコマンドを使用します。
netsh advfirewall firewall delete rule name="UnsecApp"
送信例外を無効にするには、次のコマンドを使用します。
netsh advfirewall firewall delete rule name="WMI_OUT"
さまざまなシナリオのトラブルシューティング
ほとんどの接続の問題は、不正なアクセス許可、アクセス許可なし、ファイアウォールやウイルス対策ソフトウェアなどの外部要因が原因です。 そのため、構成を確認すると問題が解決する可能性があります。
既定の構成とは別に、一部の追加設定が接続に影響を与える可能性があります。
クライアント アプリケーションまたはソース (Microsoft-Windows-DistributedCOM) によってログに記録されたエラー (Microsoft-Windows-DistributedCOM) のアプリケーションとシステム イベント ログを確認し、シナリオに応じてソースまたはターゲット コンピューターにログに記録される可能性がある関連するエラーまたはイベントを探します。
[イベント ビューアー>アプリケーションとサービス ログ>] で Windows ファイアウォールのイベント ログを確認します。ファイアウォールによってブロックされている WMI からの接続については、Microsoft>Windows>ファイアウォールと高度なセキュリティ>ファイアウォールが記録されます。
RPC と DCOM の既定の動作とアクセス許可を変更するために、特定のグループ ポリシー設定が有効になっています。 例:
このグループ ポリシーでは、認証されていない RPC 呼び出しを制限できます。これにより、エラーが発生する可能性があります。
RPC サーバーは使用できません。 (HRESULT からの例外: 0x800706BA)
コンピューターの構成\管理用テンプレート\システム\リモート プロシージャ呼び出し\認証されていない RPC クライアントを制限する
この設定は、RPC サーバー に接続する認証されていない RPC クライアントを RPC サーバー ランタイムが処理する方法を制御します。 このポリシー設定は、WMI を含むすべての RPC アプリケーションに影響します。
このグループ ポリシーでは、カスタム DCOM アクセス許可を構成できます。
コンピューターの構成\Windows の設定\セキュリティ設定\ローカル ポリシー\セキュリティ オプション\DCOM: セキュリティ記述子定義言語 (SDDL) 構文でのマシン起動の制限
この設定を使用すると、2 つの方法で ACL を指定できます。 SDDL にセキュリティ記述子を入力するか、ローカル アクセスとリモート アクセス のアクセス許可をユーザーとグループに付与または拒否できます。
ターゲット コンピューターの RPC ダイナミック ポート範囲を確認します。
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
作業マシンと比較します。 ポート範囲が既定以外の場合、または小さい範囲に制限されている場合は、WMI 接続に影響する可能性があります。 Windows のサービスの概要とネットワーク ポートの要件には、RPC に必要な既定のポート範囲が表示されます。
問題がアクセスの問題または主要な WMI エラーである場合、受信クエリは、ログ Microsoft-Windows-WMI-Activity/Operational の [イベント ビューアー>Applications and Services LogsMicrosoft>Windows>WMI-Activity] の操作イベントとして記録されます>。
一部のシナリオでは、ローカル WMI 接続が失敗することがあります。
WMIMGMT.msc を使用すると、WMI コントロールを右クリックして [プロパティ] を選択することで、ローカル WMI 接続をチェックできます。
ローカル WMI が失敗したときに発生するエラーを次に示します。
-
"WMI: Not Found" のため、ローカル コンピューター>への<接続に失敗しました
-
"Win32: システムで指定されたパスが見つからない" ため、ローカル コンピューター>への接続<に失敗しました。
-
"WMI: 汎用エラー" のため、ローカル コンピューター>への<接続に失敗しました
このようなエラーは、WMI リポジトリに問題がある場合、または破損が発生した場合に発生することがあります。
管理者特権のコマンド プロンプト ウィンドウで次のコマンドを使用して、ライブまたは現在使用されている WMI リポジトリで整合性チェックを実行できます。
winmgmt /verifyrepository
また、 を使用してこのコマンドを /verifyrepository <path>
実行することもできます。 path 引数を指定すると、リポジトリの保存されたコピーを確認できます。
この場合、path 引数には、保存されたリポジトリ コピーへの完全なパスが含まれている必要があります。 保存されたリポジトリは、リポジトリ フォルダー全体のコピーである必要があります。
次の手順では、WMI プロバイダー MOF ファイルを再コンパイルし、WMI プロバイダー DLL を再登録する方法について説明します。 これには、すべての組み込みプロバイダーと、既定のパスに配置されたプロバイダーが含まれます。 管理者特権のコマンド プロンプト ウィンドウで次のコマンドを実行します。
注:
次の手順では、WMI サービスを再起動します。
WMI サービスを停止し、 に設定します
disabled
。sc config winmgmt start= disabled net stop winmgmt /y
WBEM フォルダーに移動します。
%systemdrive% cd %windir%\system32\wbem
WMI プロバイダーを再登録します。
for /f %s in ('dir /b *.dll') do regsvr32 /s %s
WMI サービスを に
Auto
戻し、サービスを開始します。sc config winmgmt start= Auto net start winmgmt
MOF ファイルを再コンパイルします。
dir /b *.mof *.mfl | findstr /v /i uninstall > moflist.txt & for /F %s in (moflist.txt) do mofcomp %s
注:
WMI リポジトリをリセットしたり、WMI リポジトリを再構築したりするための複数の外部ブログやサイトがあります。 これにより、オペレーティング システムがインストールされたときに WMI リポジトリが初期状態に戻ります。 WMI は、システム自体、アプリケーション、サービス、およびその周囲の他のエンティティに関して、時間の経過とともに収集されたすべての情報を失います。 そのため、WMI リポジトリは、Microsoft サポートによって実行されない限り、再構築しないことをお勧めします。
ネットワーク レベルでの接続フロー
次のトレースは、WMIC.exeで WMI クエリを実行しているときに、2 台のマシン間で ネットワーク モニター を使用してキャプチャされたネットワーク トレース の 出力です。
これは、問題がネットワーク接続の問題であるかどうかを判断するのに役立ちます。
ターゲット マシンのポート 135 のエンドポイント マッパーへの接続:
65 9:07:30 AM 3/21/2017 6.2302032 svchost.exe 10.0.0.6 10.0.0.22 TCP TCP:Flags=......S., SrcPort=49229, DstPort=DCE endpoint resolution(135), PayloadLen=0, Seq=3759018265, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 {TCP:8, IPv4:7}
IRemoteSCMActivator に対する RPC インターフェイス UUID の要求:
68 9:07:30 AM 3/21/2017 6.2366981 svchost.exe 10.0.0.6 10.0.0.22 MSRPC MSRPC:c/o Bind: IRemoteSCMActivator(DCOM) UUID{000001A0-0000-0000-C000-000000000046} Call=0x5 Assoc Grp=0x0 Xmit=0x16D0 Recv=0x16D0 {MSRPC:9, TCP:8, IPv4:7}
ターゲット マシンのエンドポイント マッパーによって提供される動的ポートのいずれかに接続します。
77 9:07:30 AM 3/21/2017 6.3539124 WMIC.exe 10.0.0.6 10.0.0.22 TCP TCP:Flags=......S., SrcPort=49230, DstPort=49154, PayloadLen=0, Seq=2143969401, Ack=0, Win=8192 ( Negotiating scale factor 0x8 ) = 8192 {TCP:10, IPv4:7}
マシン "TargetMachine" の名前空間 Root\CIMV2 への接続:
96 9:07:30 AM 3/21/2017 6.4702188 WMIC.exe 10.0.0.6 10.0.0.22 WMI WMI:IWbemLevel1Login:NTLMLogin Request, NetworkResource=\\TargetMachine\ROOT\CIMV2 PreferredLocale=ms_409,en-US,en Flags=0 {MSRPC:11, TCP:10, IPv4:7}
クエリの実行:
116 9:07:31 AM 3/21/2017 6.7577443 WMIC.exe 10.0.0.6 10.0.0.22 WMI WMI:IWbemServices:ExecQuery Request, *Encrypted* {MSRPC:11, TCP:10, IPv4:7}
データ収集
サポート ケースを開いて問題をさらに調査する前に、「 TSS for User Experience の問題を使用して情報を収集する」で説明されている手順に従って情報を収集できます。 また、最近問題が発生したコンピューター上の WMI-Collect ツールを使用して情報を収集することもできます。 それらのステップは次のとおりです。
注:
次の手順は、問題を再現しながら、ソースマシンとターゲットマシンで実行できます。
WMI-Collect.zip をダウンロードし、C:\temp などのフォルダーに展開します。
管理者特権の PowerShell コマンド プロンプトから、スクリプトが保存されているフォルダーから WMI-Collect.ps1 スクリプトを実行します。 例:
C:\temp\WMI-Collect.ps1 -Logs -Trace -Network
PowerShell コマンド プロンプトを開いたままにし、"Enter キーを押してキャプチャを停止します:" というメッセージを表示します。
注:
トレースを 1 分以上有効にしないでください。
Enter キーを押してトレースを停止します。
スクリプトは、すべてのトレースと診断情報の結果を含むサブフォルダーを作成します。 フォルダーを圧縮します。 サポート ケースが作成されると、このファイルをセキュリティで保護されたワークスペースにアップロードして分析できます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示