Javascript 使用WMI查找服务的依赖项,然后区分依赖服务和依赖驱动程序

Javascript 使用WMI查找服务的依赖项,然后区分依赖服务和依赖驱动程序,javascript,service,dependencies,wmi,drivers,Javascript,Service,Dependencies,Wmi,Drivers,MSDN上有一个代码示例,它使用WMI枚举特定服务的所有依赖项: 这太棒了……但我发现它发现的依赖项可能并不都是同一类型的。我希望所有依赖项都是Win32_服务类型…但有时您会发现,依赖项实际上是一个驱动程序(Win32_SystemDriver) 所以..我的问题很简单-我如何调整MSDN代码示例以对每个依赖项执行检查,并查看它是Win32_服务还是Win32_系统驱动程序,以便能够适当地处理它?如果您在jscript中提供解决方案(MSDN上的示例是vbscript,但我使用的是jscrip

MSDN上有一个代码示例,它使用WMI枚举特定服务的所有依赖项:

这太棒了……但我发现它发现的依赖项可能并不都是同一类型的。我希望所有依赖项都是Win32_服务类型…但有时您会发现,依赖项实际上是一个驱动程序(Win32_SystemDriver)

所以..我的问题很简单-我如何调整MSDN代码示例以对每个依赖项执行检查,并查看它是Win32_服务还是Win32_系统驱动程序,以便能够适当地处理它?如果您在jscript中提供解决方案(MSDN上的示例是vbscript,但我使用的是jscript),则需要额外的注意事项。

尝试使用此查询:

{Win32_Service.Name=“dhcp”}的关联程序,其中AssocClass=Win32_DependentService ResultClass=Win32_SystemDriver

仅获取Win32_SystemDriver实例,或

{Win32_Service.Name=“dhcp”}的关联程序,其中AssocClass=Win32_DependentService ResultClass=Win32_服务

仅获取Win32_服务实例。

关联类使用
Win32_BaseService
基类表示从属服务。因此,如果您没有在
关联器或
查询(如中)中定义特定的,您将得到任何
Win32\u BaseService
子类-
Win32\u服务
Win32\u系统驱动程序
以及
Win32\u TerminalService

要以不同方式处理不同的对象类,可以使用属性检查对象的类名。下面是演示此方法的示例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;
  }
}

这帮助我通过VBScript解决了类似的问题。感谢您提供指向Win32_DependentService
类的链接。