【问题标题】:Change users parental control settings using WMI in c#在 C# 中使用 WMI 更改用户家长控制设置
【发布时间】:2011-08-08 08:25:21
【问题描述】:

我对 WMI 和 COM 真的很陌生。

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

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

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

谢谢!

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

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

【问题讨论】:

    标签: c# settings wmi parental-control


    【解决方案1】:

    存在于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();
            }
        }
    }
    

    【讨论】:

    • 我们是否也可以通过编程方式添加应用程序覆盖。我看到 WpcAppOverride 在那里。我可以阅读从 Windows 界面应用的限制,使用上面所说的 write up。但不能创建新的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多