MSDN上有一个代码示例,它使用WMI枚举特定服务的所有依赖项:http://msdn.microsoft.com/en-us/library/aa393673(v=vs.85).aspx
这很棒......但我发现它发现的依赖关系可能并非都是同一类型。我期望所有依赖项都是Win32_Service类型...但有时您会发现实际上是驱动程序的依赖项(Win32_SystemDriver)。
所以..我的问题很简单 - 我如何调整MSDN代码示例来检查每个依赖项,看看它是Win32_Service还是Win32_SystemDriver,这样我才能正确处理它?如果你在jscript中提供解决方案的额外点(MSDN上的示例是vbscript,但我使用的是jscript)。
答案 0 :(得分:1)
Win32_DependentService
关联类使用Win32_BaseService
基类表示依赖服务。因此,如果您未在ASSOCIATORS OR
查询中定义特定ResultClass(如Uroc's answer中所述),则会获得任何Win32_BaseService
子类 - Win32_Service
, Win32_SystemDriver
以及Win32_TerminalService
。
要以不同方式处理不同的对象类,可以使用Path_.Class
属性检查对象的类名。以下是演示此方法的示例JScript代码:
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;
}
}
答案 1 :(得分:0)
尝试使用此查询:
{Win32_Service.Name =“dhcp”}的关联者其中AssocClass = Win32_DependentService ResultClass = Win32_SystemDriver
仅获取Win32_SystemDriver实例,或
{Win32_Service.Name =“dhcp”}的关联者,其中AssocClass = Win32_DependentService ResultClass = Win32_Service
只获取Win32_Service实例。