Изменить настройки родительского контроля пользователей с помощью WMI в c # - PullRequest
4 голосов
/ 19 апреля 2011

Я действительно новичок в WMI и COM.

Я хочу изменить некоторые параметры родительского контроля учетных записей пользователей и единственный доступный API - это WMI. Используемый класс поставщика WMI: WpcUserSettings.

Я не понимаю, как изменить параметры для каждого пользователя. Должен ли я создать ManagmentObject этого класса для каждого пользователя или они уже созданы для каждого пользователя.

Если бы кто-нибудь мог дать мне пример кода для одного пользователя, это действительно помогло бы.

Спасибо!

EDIT: Привет еще раз. Я использовал ваш пример, чтобы получить имена пользователей и SIDS. Однако, когда я ищу WpcUserSettings, результата нет, я использовал WMI Studio, чтобы проверить этот класс, и нет экземпляра, поэтому я не могу читать или устанавливать атрибуты. У вас есть идея, как это исправить?

ИСПРАВЛЕНИЕ: Хорошо, я нашел трюк. Вы должны вызывать метод AddUser (SID) WpcSystemSettings, используя ManagementObject.InvokeMethod () для каждого пользователя, которого вы хотите добавить в управление родительским контролем. Затем вы можете включить родительский контроль в WpcUserSettings и делать все, что захотите.

1 Ответ

3 голосов
/ 19 апреля 2011

Класс 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();
        }
    }
}
...