WMI:查询 class 的特定实例
WMI: Querying a specific instance of a class
我想在 C# 中通过 WMI 更改 Microsoft Windows UWF 过滤器 (uwfmgr.exe
) 的配置。
现在,由于其性质,某些更改只能对 WMI class 的特定实例进行。
例如:
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")
我相信有一种“更好”的方法可以做到这一点。提前致谢!
您可以使用 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 ...
}
}
我想在 C# 中通过 WMI 更改 Microsoft Windows UWF 过滤器 (uwfmgr.exe
) 的配置。
现在,由于其性质,某些更改只能对 WMI class 的特定实例进行。
例如:
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")
我相信有一种“更好”的方法可以做到这一点。提前致谢!
您可以使用 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 ...
}
}