4

私は WMI と COM にまったく慣れていません。

一部のパラメーターをユーザー アカウントのペアレンタル コントロールに変更したいのですが、使用できる API は WMI だけです。使用する WMI プロバイダー クラスは WpcUserSettings です。

各ユーザーのパラメーターを変更する方法がわかりません。ユーザーごとにこのクラスの ManagmentObject を作成する必要がありますか、それともユーザーごとに既にインスタンス化されていますか?

誰かが 1 人のユーザー向けのサンプル コードを教えてくれたら、本当に助かります。

ありがとう!

編集:こんにちは。あなたの例を使用して、ユーザー アカウント名と SIDS を取得しました。ただし、WpcUserSettings を検索しても結果はありません。WMI Studio を使用してこのクラスをチェックしましたが、インスタンスがないため、属性を読み取ったり設定したりできません。これを修正する方法を知っていますか?

修正: トリックを見つけました。保護者による制限管理に追加するユーザーごとに、ManagementObject.InvokeMethod() を使用して、WpcSystemSettings のメソッド AddUser(SID) を呼び出す必要があります。次に、WpcUserSettings でペアレンタル コントロールを有効にして、必要なことを行うことができます。

4

1 に答える 1

3

名前空間に存在するWpcUserSettingswmi クラスは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 に答える