9

ローカル Windows ユーザーのリストを取得するにはどうすればよいですか (Windows ログオン画面に表示されるユーザーのみ)

Windows Principle ライブラリと WMI Select コマンドを使用して多くの方法を試しました。管理者、ゲスト、およびその他の奇妙なアカウント (VUSRNEIL-DELL、$HOMEGROUPUSER、ASPNET など) を取得し続けています。

これら 3 つのユーザー アカウントはいずれもログオン画面に表示されません。これらのユーザー タイプを区別するにはどうすればよいですか?

私はC#でコーディングしています

4

4 に答える 4

12

への参照をコンソール アプリケーションに追加して、System.Management次のコードを試してください。

using System;
using System.Management;
using System.Linq;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            ManagementObjectSearcher usersSearcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_UserAccount");
            ManagementObjectCollection users = usersSearcher.Get();

            var localUsers = users.Cast<ManagementObject>().Where(
                u => (bool)u["LocalAccount"] == true &&
                     (bool)u["Disabled"] == false &&
                     (bool)u["Lockout"] == false &&
                     int.Parse(u["SIDType"].ToString()) == 1 &&
                     u["Name"].ToString() != "HomeGroupUser$");

            foreach (ManagementObject user in localUsers)
            {
                Console.WriteLine("Account Type: " + user["AccountType"].ToString());
                Console.WriteLine("Caption: " + user["Caption"].ToString());
                Console.WriteLine("Description: " + user["Description"].ToString());
                Console.WriteLine("Disabled: " + user["Disabled"].ToString());
                Console.WriteLine("Domain: " + user["Domain"].ToString());
                Console.WriteLine("Full Name: " + user["FullName"].ToString());
                Console.WriteLine("Local Account: " + user["LocalAccount"].ToString());
                Console.WriteLine("Lockout: " + user["Lockout"].ToString());
                Console.WriteLine("Name: " + user["Name"].ToString());
                Console.WriteLine("Password Changeable: " + user["PasswordChangeable"].ToString());
                Console.WriteLine("Password Expires: " + user["PasswordExpires"].ToString());
                Console.WriteLine("Password Required: " + user["PasswordRequired"].ToString());
                Console.WriteLine("SID: " + user["SID"].ToString());
                Console.WriteLine("SID Type: " + user["SIDType"].ToString());
                Console.WriteLine("Status: " + user["Status"].ToString());
            }

            Console.ReadKey();
        }
    }
}
于 2012-10-05T16:22:37.663 に答える
5

WMI を使用してクエリを実行している場合はWin32_UserAccount、次の条件を満たすアイテムのみを表示できます。

  • プロパティAccountTypeにはUF_NORMAL_ACCOUNTフラグがあります。
  • プロパティDisabledfalseです。
  • プロパティLockoutfalseです。
  • プロパティLocalAccounttrueです。
  • プロパティSIDTypeSidTypeUserです。

WMI を使用できない (または使用したくない) 場合は、もう少し作業を行う必要があります。基本的には、NetGroupGetUsers関数を使用してすべてのユーザーを列挙する必要があります。例については、CodeProject に関するこの記事を参照してください。

于 2012-10-05T15:41:16.060 に答える
-1

これにより、すべてのユーザー アカウント、ドメイン、フル ネーム、および SID のリストが表示されます。

wmic useraccount get domain,name,sid
于 2017-06-01T00:17:47.357 に答える