WMI トラブルシューティング

アプリケーションまたはスクリプト内の WMI ローカルまたはリモート データにアクセスすると、クラスが見つからないからアクセス拒否に至るまでのエラーが発生する可能性があります。 プロバイダーには、デバッグ オプションとトラブルシューティング クラスも用意されています。

注意

このトピックの情報は、開発者と IT 管理者を対象としています。 WMI に関するエラー メッセージが表示されたエンド ユーザーの場合は、Microsoft サポートにアクセスし、エラー メッセージに表示されるエラー コードを検索します。 WMI スクリプトと WMI サービスに関する問題のトラブルシューティングの詳細については、「WMI が機能しない」を参照してください。

WMI Diagnosis Utility

重要

Windows 8 および Windows Server 2012 以降では、WMI Diagnosis Utility (WMIDiag.exe) はサポートされなくなりました。

Windows 7、Windows Server 2008 R2、Windows Vista、Windows Server 2008:

WMI からエラー メッセージが返される場合は、WMI サービスまたは WMI プロバイダーの問題を示していない可能性があることに注意してください。 障害はオペレーティング システムの他の部分で発生し、WMI を介してエラーとして発生する可能性があります。 いかなる状況でも、WMI リポジトリを最初の手順として削除する必要はありません。リポジトリを削除すると、システムまたはインストールされているアプリケーションが破損する可能性があるためです。

以前は、問題の原因に関する詳細情報を取得するために、WMI Diagnosis Utility診断コマンド ライン ツールをダウンロードして実行できます。 このツールは、通常、問題の原因を特定できるレポートを生成し、それを修正する方法について説明しました。 このレポートは、Microsoft サポート サービスによる支援にも役立ちます。 WMI Diagnosis Utilityは、以前はダウンロード センターで入手できます。

プロバイダー ライターとして、 分離されたプロバイダーを記述しない限り、デバッグの問題が発生する可能性もあります。 詳細については、「 プロバイダーのデバッグ」を参照してください。

ログとトレース

WMI ログ ファイルが存在しなくなり、これらは Windows イベント トレーシング (ETW) に置き換えられました。 詳細については、「 WMI アクティビティのトレース」、「WMI アクティビティログ記録」、および「 WMI ログ ファイル」を参照してください。

スクリプトとアプリケーションのトラブルシューティング

WMI には、WMI プロバイダーを使用するクライアント アプリケーションのトラブルシューティングを行うためのクラスのセットが含まれています。 詳細については、「 WMI クライアント アプリケーションのトラブルシューティング」を参照してください。

プロバイダー ライターが WMI の問題を防ぐ方法

プロバイダー ライターは、次のアクションを実行することで、(WMI を介してエラー メッセージに表示される) 多くの問題を防ぐことができます。

  • プロバイダーを正しく登録する。 詳細については、「 プロバイダーの登録」を参照してください。
  • プロバイダー クラスを定義するマネージド オブジェクト フォーマット (MOF) ファイルに #pragma autorecover ステートメントを追加する。

詳細については、「 プロバイダーのデバッグ」、「 WMI へのデータの提供」、および 「プロバイダーの構成とトラブルシューティングのクラス」を参照してください。

アクセスが拒否されました

WMI 名前空間とデータにアクセスするスクリプトとアプリケーションによって報告されるアクセス拒否エラーは、通常、3 つのカテゴリに分類されます。 次の表に、エラーの 3 つのカテゴリと、エラーの原因となる可能性のある問題および考えられる解決策を示します。

エラー 考えられる問題 解決策
0x800706BA HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE)
ファイアウォールの問題またはサーバーを使用できません。
コンピューターが実際に存在しないか、Windows ファイアウォールによって接続がブロックされています
Vista への接続: netsh advfirewall firewall set rule group="windows management instrumentation (wmi)" new enable=yes ダウンレベルへの接続: Windows ファイアウォールの "リモート管理" 規則を許可する。
0x80070005 E_ACCESS_DENIED
DCOM セキュリティによってアクセスが拒否されました。
ユーザーは DCOM を介してコンピューターにリモート アクセスできません。 通常、DCOM エラーは、オペレーティング システムのバージョンが異なるリモート コンピューターに接続するときに発生します。
dcomcnfg でユーザーに "リモートからの起動" および "リモートからのアクティブ化" のアクセス許可を付与します。 [マイ コンピューター] を右クリックして [プロパティ] をクリックします。 [COM セキュリティ] で、両方のセクションの [制限の編集] をクリックします。 必要なユーザーに "リモート アクセス"、"リモートからの起動" および "リモートからのアクティブ化" を付与します。 次に、[DCOM の構成] に移動し、"Windows Management Instrumentation" を見つけて、必要なユーザーに "リモートからの起動" および "リモートからのアクティブ化" を付与します。 詳細については、「異なるオペレーティング システム間の接続」を参照してください。
0x80041003 WBEM_E_ACCESS_DENIED
"プロバイダー" によってアクセスが拒否されました。
ユーザーには WMI 内で操作を実行するためのアクセス許可がありません。 これは権限の低いユーザーとして特定のクラスに対してクエリを実行する場合に発生する可能性がありますが、ほとんどの場合、権限の低いユーザーとしてメソッドを呼び出そうとしたり WMI インスタンスを変更したりしようとすると発生します。 接続先の名前空間が暗号化されており、ユーザーは暗号化されていない接続で接続しようとしています
WMI コントロールを使用してユーザーにアクセス権を付与します (Remote_Access が true に設定されていることを確認します)。暗号化をサポートするクライアントを使用して接続します。
  • 通常、DCOM エラーは、オペレーティング システムのバージョンが異なるリモート コンピューターに接続するときに発生します。

  • プロバイダーは、特定の名前空間内のデータへのアクセスを拒否したり、特定のレベルの接続セキュリティを必要としたりする場合もあります。 詳細については、「クライアント アプリケーション プロセスのセキュリティの設定」および「プロバイダーのホスティングとセキュリティ」を参照してください。

  • インターネット接続ファイアウォール (ICF) の変更によるアクセス拒否エラー。

    詳細については、Windows ファイアウォールを介した接続に関する記事を参照してください。

  • 低整合性クライアントが WMI にアクセスしようとすると、DCOM セキュリティによってアクセス拒否エラーが返されます。 たとえば、セキュリティ レベルが low に設定されている Internet Explorer で実行されている ActiveX コントロールには、ローカル WMI 操作を実行するためのアクセス権がありません。

    Windows 7: 低整合性ユーザーには、ローカル WMI 操作に対する読み取り専用のアクセス許可があります。

エラーに関する情報

WMI からエラー メッセージを受け取った場合、WMI エラー定数で、またはスクリプトの場合は WbemErrorEnum で、メッセージを見つけることができます。 ただし、エラーによって提供される情報だけでは、通常何が起きているかを判断するには不十分です。 WMI リポジトリの破損は、クラスまたはインスタンスが "見つからない" 状態を装う可能性があります。

WMI エラーの詳細については、次を調べてください。

WMI トラブルシューティング

WMI アクティビティのトレース

WMI アクティビティのロギング