使用c#中的WMI更改用户家长控制设置

我是WMI和COM的新手。

我想将一些参数更改为用户帐户父级控件,唯一可用的API是WMI。 要使用的WMI提供程序类是WpcUserSettings。

我不明白如何修改每个用户的参数。 我是否必须为每个用户创建此类的ManagmentObject,或者它们是否已为每个用户实例化。

如果有人可以给我一个用户的示例代码,那将真的有帮助。

Thanx!

编辑:你好。 我用你的例子来获取用户帐户名和SIDS。 但是,当我搜索WpcUserSettings没有结果时,我使用WMI Studio来检查这个类,并且没有实例,所以我无法读取或设置属性。 你知道如何解决这个问题吗?

FIX:好的,我找到了诀窍。 您必须使用ManagementObject.InvokeMethod()为要添加到家长控制管理中的每个用户调用WpcSystemSettings的方法AddUser(SID)。 然后,您可以在WpcUserSettings中启用家长控制,并执行您想要的任何操作。

存在于root\CIMV2\Applications\WindowsParentalControls命名空间中的WpcUserSettings 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(); } } }