2011-05-26 19 views
2

MSDNのコード例では、特定のサービスの依存関係のすべてを列挙するためにWMIを使用するがあります:http://msdn.microsoft.com/en-us/library/aa393673(v=vs.85).aspx使用WMIサービスの依存関係を検索し、依存ドライバからの依存サービスを差別化する

これは素晴らしい..ですしかし、私が発見した依存関係は、すべてが同じタイプではないかもしれないことがわかりました。私はすべての依存関係がWin32_Service型であると期待していましたが、実際にはドライバ(Win32_SystemDriver)である依存関係を見つけることがあります。

So。私の質問は簡単です - MSDNコードの例を調整して各依存関係をチェックし、Win32_ServiceかWin32_SystemDriverかどうかを確認して適切に処理できるようにするにはどうすればよいですか?あなたがjscriptで解決策を提供する場合、余分な点があります(MSDNの例はvbscriptですが、私はjscriptを使用しています)。

答えて

0

は、このクエリを使用してみてください:AssocClass = Win32_DependentService resultClassを= Win32_SystemDriver

だけWin32_SystemDriverインスタンス、または{Win32_Serviceのの

のAssociatorを取得するには、{Win32_Service.Name = "DHCP"}の

のAssociator .Name = "dhcp"}ここでAssocClass = Win32_DependentService ResultClass = Win32_Service

Win32_Serviceインスタンスのみを取得する。

1

Win32_DependentServiceアソシエーションクラスは、Win32_BaseServiceベースクラスを使用する依存サービスを表します。したがって、ASSOCIATORS ORクエリで特定のResultClassを定義しないと(Uroc's answerなど)、Win32_BaseServiceサブクラス(Win32_ServiceWin32_SystemDriverWin32_TerminalService)が表示されます。

異なるオブジェクトクラスを異なる方法で処理するには、Path_.Classプロパティを使用してオブジェクトのクラス名を確認できます。

var strComputer = "."; 
var strServiceName = "RpcSs"; 

var oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!//" + strComputer + "/root/cimv2"); 

var colItems = oWMI.ExecQuery("ASSOCIATORS OF {Win32_Service.Name='" + strServiceName + "'} WHERE AssocClass=Win32_DependentService Role=Antecedent"); 
var enumItems = new Enumerator(colItems); 

var oItem; 
for (; !enumItems.atEnd(); enumItems.moveNext()) { 
    oItem = enumItems.item(); 

    switch (oItem.Path_.Class) { 
    case "Win32_Service": 
     ... 
     break; 
    case "Win32_TerminalService": 
     ... 
     break; 
    case "Win32_SystemDriver": 
     ... 
     break; 
    default: 
     // another class 
     ... 
     break; 
    } 
} 
+0

これは私がVBScriptの経由で同様の問題を解決する助け:ここでは、この手法を示すサンプルJScriptコードです。 'Win32_DependentService'クラスへのリンクをありがとう。 – DMason

関連する問題