C# WMI:查询类的特定实例

C# WMI:查询类的特定实例,c#,.net,wmi,uwf,uwfmgr,C#,.net,Wmi,Uwf,Uwfmgr,我想通过C中的WMI更改Microsoft Windows UWF Filter uwfmgr.exe的配置。 由于WMI类的性质,现在只能对其特定实例进行某些更改。 例如: var scope = new ManagementScope(@"root\standardcimv2\embedded"); using (var uwfClass = new ManagementClass(scope.Path.Path, "UWF_Servicing&

我想通过C中的WMI更改Microsoft Windows UWF Filter 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")
我相信有一个更好的方法来做到这一点。提前谢谢

您可以使用如下查询:

var searcher = new ManagementObjectSearcher(
                   @"ROOT\StandardCimv2\embedded",
                   @"SELECT * FROM UWF_Servicing WHERE CurrentSession = FALSE");
foreach (ManagementObject obj in searcher.Get())
{
    ... etc ...
}
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 ...
    }
}
但您也可以使用对象的属性值类型将映射到标准.NET的类型,如下所示:

var searcher = new ManagementObjectSearcher(
                   @"ROOT\StandardCimv2\embedded",
                   @"SELECT * FROM UWF_Servicing WHERE CurrentSession = FALSE");
foreach (ManagementObject obj in searcher.Get())
{
    ... etc ...
}
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 ...
    }
}

您是否尝试过在新的ManagementObjectSearcherSELECT*中使用类似于foreach ManagementObject mo的方法,该方法来自UWF_服务,其中CurrentSession=false。Get@SimonMourier如果您还提供了作用域路径,那么这是可行的。谢谢