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

时间:2011-04-19 03:25:36

标签: c# settings wmi parental-control

我是WMI和COM的新手。

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

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

如果有人可以为一个用户提供一个示例代码,那真的会有所帮助。

Thanx!

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

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

1 个答案:

答案 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();
        }
    }
}