我是WMI和COM的新手。
我想将一些参数更改为用户帐户的家长控件和 唯一可用的API是WMI。要使用的WMI提供程序类是WpcUserSettings。
我不明白如何修改每个用户的参数。我必须创建一个 每个用户的此类的ManagmentObject,或者它们已为每个用户实例化。
如果有人可以为一个用户提供一个示例代码,那真的会有所帮助。
Thanx!
编辑: 你好,我们又见面了。我用你的例子来获取用户帐户名和SIDS。但是,当我搜索WpcUserSettings没有结果时,我使用WMI Studio来检查这个类,并且没有实例,所以我无法读取或设置属性。你知道如何解决这个问题吗?
FIX:好的,我找到了诀窍。您必须使用ManagementObject.InvokeMethod()为要添加到家长控制管理中的每个用户调用WpcSystemSettings的方法AddUser(SID)。然后,您可以在WpcUserSettings中启用家长控制并执行任何操作。
答案 0 :(得分:3)
WpcUserSettings
命名空间中存在的root\CIMV2\Applications\WindowsParentalControls
wmi类没有公开用户更新数据的任何方法,但是所有公开的属性都是读/写,显然SID
属性除外。您可以迭代特定用户的属性并更改值。
因此,您可以使用像检索所有用户的句子来进行Wmi查询
SELECT * FROM WpcUserSettings
或这句话来修改特定用户的属性
SELECT * FROM WpcUserSettings Where SID="the SID of the user to modify"
然后更新要修改的属性的值,最后调用Put
方法设置新值。
检查此示例应用。
using System;
using System.Collections.Generic;
using System.Management;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2\\Applications\\WindowsParentalControls", "SELECT * FROM WpcUserSettings");
foreach (ManagementObject queryObj in searcher.Get())
{
if (queryObj["SID"] == "The user SID to modify")
{
//set the properties here
queryObj["AppRestrictions"] = true;
queryObj["HourlyRestrictions"] = true;
queryObj["LoggingRequired"] = false;
//queryObj["LogonHours"] = ;
//queryObj["OverrideRequests"] = ;
queryObj["WpcEnabled"] = true;
queryObj.Put();
}
}
}
catch (ManagementException e)
{
Console.WriteLine("An error occurred setting the WMI data: " + e.Message);
}
Console.ReadKey();
}
}
}