4

我对 WMI 和 COM 真的很陌生。

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

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

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

谢谢!

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

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

4

1 回答 1

3

WpcUserSettings存在于命名空间中的wmi 类root\CIMV2\Applications\WindowsParentalControls没有公开任何用户更新数据的方法,但所有公开的属性都是读/写的,除了明显的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();
        }
    }
}
于 2011-04-19T07:11:28.997 回答