使用WMI查找服务的依赖项,然后将依赖的服务与依赖的驱动程序区分开来

|| 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实例。     

要回复问题请先登录注册