问题描述
||
MSDN上有一个代码示例,该示例使用WMI枚举特定服务的所有依赖关系:http://msdn.microsoft.com/zh-cn/library/aa393673(v=vs.85).aspx
很好...但是我发现它发现的依赖项可能并非全部属于同一类型。我期望所有依赖项的类型都为Win32_Service ...但是有时您会发现该依赖项实际上是一个驱动程序(Win32_SystemDriver)。
所以..我的问题很简单-如何调整MSDN代码示例以检查每个依赖项,并查看它是Win32_Service还是Win32_SystemDriver,以便我可以适当地处理它?如果您使用jscript提供解决方案,则需要加分(MSDN上的示例是vbscript,但我正在使用jscript)。
解决方法
“ 0”关联类使用“ 1”基类表示从属服务。因此,如果您未在
ASSOCIATORS OR
查询中定义特定的ResultClass(如Uroc的回答),您将获得任何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;
}
}
,尝试使用以下查询:
{Win32_Service.Name = \“ dhcp \”}的关联者,其中AssocClass = Win32_DependentService ResultClass = Win32_SystemDriver
仅获取Win32_SystemDriver实例,或
{Win32_Service.Name = \“ dhcp \”}的关联者,其中AssocClass = Win32_DependentService ResultClass = Win32_Service
仅获取Win32_Service实例。