【问题标题】:Use WMI to find dependencies of a service and then differentiate dependent Services from dependent Drivers使用 WMI 查找服务的依赖关系,然后区分依赖服务和依赖驱动程序
【发布时间】:2011-05-31 18:23:00
【问题描述】:

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)。

【问题讨论】:

    标签: javascript service dependencies wmi drivers


    【解决方案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;
      }
    }
    

    【讨论】:

    • 这帮助我通过 VBScript 解决了类似的问题。感谢您提供指向Win32_DependentService 课程的链接。
    【解决方案2】:

    尝试使用此查询:

    {Win32_Service.Name="dhcp"} 的关联者 where AssocClass=Win32_DependentService ResultClass=Win32_SystemDriver

    仅获取 Win32_SystemDriver 实例,或

    {Win32_Service.Name="dhcp"} 的关联者其中 AssocClass=Win32_DependentService ResultClass=Win32_Service

    只获取 Win32_Service 实例。

    【讨论】:

      猜你喜欢
      • 2019-10-18
      • 2019-01-11
      • 2018-08-21
      • 2020-08-25
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 2015-09-03
      • 2021-08-15
      相关资源
      最近更新 更多