【问题标题】:WMI: Querying a specific instance of a classWMI:查询类的特定实例
【发布时间】:2020-09-30 17:12:02
【问题描述】:

我想通过 C# 中的 WMI 更改 Microsoft Windows UWF 过滤器 (uwfmgr.exe) 的配置。 现在,由于其性质,某些更改只能对 WMI 类的特定实例进行。 例如:

    var scope = new ManagementScope(@"root\standardcimv2\embedded");
    using (var uwfClass = new ManagementClass(scope.Path.Path, "UWF_Servicing", null))
    {
        var instances = uwfClass.GetInstances();
        foreach (var instance in instances)
        {
            Console.WriteLine(instance.ToString());
        }
    }

此代码打印:

\\COMPUTER\root\standardcimv2\embedded:UWF_Servicing.CurrentSession=true
\\COMPUTER\root\standardcimv2\embedded:UWF_Servicing.CurrentSession=false

只能对 CurrentSession = false 的实例进行更改。

如何以干净的方式获取此实例?

换句话说,我不想做:

instance.ToString().Contains("CurrentSession=false")

我相信有一种“更好”的方法可以做到这一点。提前致谢!

【问题讨论】:

  • 你试过类似foreach (ManagementObject mo in new ManagementObjectSearcher("SELECT * FROM UWF_Servicing WHERE CurrentSession = false").Get())
  • 如果您还提供范围路径,@SimonMourier 确实有效。谢谢!

标签: c# .net wmi uwf uwfmgr


【解决方案1】:

您可以使用SQL for WMI WHERE clause 查询,如下所示:

var searcher = new ManagementObjectSearcher(
                   @"ROOT\StandardCimv2\embedded",
                   @"SELECT * FROM UWF_Servicing WHERE CurrentSession = FALSE");
foreach (ManagementObject obj in searcher.Get())
{
    ... etc ...
}

但您也可以使用对象的属性(值类型将映射到标准 .NET 的类型),如下所示:

var searcher = new ManagementObjectSearcher(
                   @"ROOT\StandardCimv2\embedded",
                   @"SELECT * FROM UWF_Servicing");
foreach (ManagementObject obj in searcher.Get())
{
    var currentSession = obj.GetPropertyValue("CurrentSession");
    if (false.Equals(currentSession))
    {
        ... etc ...
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多