问题描述
我想通过C#中的WMI对Microsoft Windows UWF筛选器(package com.katamlek.gcp_crystalloids;
@SpringBootApplication(scanBasePackages = {"com.katamlek"})
@EntityScan(basePackages = {"com.katamlek"})
@EnableDatastoreRepositories(basePackages = {"com.katamlek"})
public class GcpCrystalloidsApplication {
public static void main(String[] args) {
SpringApplication.run(GcpCrystalloidsApplication.class,args);
}
}
)的配置进行更改。
现在,由于其性质,只能对WMI类的特定实例进行某些更改。
例如:
n_thread = 1 # I am using only 1 thread my local CPU
tf.config.threading.set_inter_op_parallelism_threads(n_thread)
tf.config.threading.set_intra_op_parallelism_threads(n_thread)
model = DNNLinearCombinedClassifier(...)
max_epoch = 1000 # Number of time the training data set will be seen
cardinality = 20 # number of batches in my training data set
max_step = max_epoch * cardinality # max_step = 20000
# This will create a tf.data.Dataset of 20 batches,repeated 1000 times
training_spec = TrainSpec(build_training_dataset,max_steps=max_step)
# This will create a tf.data.Dataset of 1 batch,repeated 1 time
evaluation_spec = EvalSpec(build_evaluation_dataset,steps=1,start_delay_secs=1,throttle_secs=30))
tf.estimator.train_and_evaluate(model,train_spec=training_spec,eval_spec=evaluation_spec)
此代码显示:
uwfmgr.exe
只能对CurrentSession = false的实例进行更改。
如何以一种干净的方式获取此实例?
换句话说,我不想做:
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());
}
}
我相信有一种“更精细”的方法可以做到这一点。预先感谢!
解决方法
您可以使用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 ...
}
}