0

.NET でドメイン内のすべてのユーザー アカウントを検索するにはどうすればよいですか?

ドメイン内のコンピュータ名ではなく、Windows へのログオンに使用しているユーザー アカウントです。

4

3 に答える 3

1

以下を試すことができます。

PrincipalContext ctx = new PrincipalContext(ContextType.Machine,Environment.MachineName);
UserPrincipal user = new UserPrincipal(ctx);
user.Name = "*";
PrincipalSearcher ps = new PrincipalSearcher();
ps.QueryFilter = user;
PrincipalSearchResult<Principal> result = ps.FindAll();
foreach (Principal p in result)
{
    using (UserPrincipal up = (UserPrincipal)p)
    {
        MessageBox.Show(up.Name);
    }
}

またはこれ:

using System.Management;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            SelectQuery query = new SelectQuery("Win32_UserAccount");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            foreach (ManagementObject envVar in searcher.Get())
            {
                Console.WriteLine("Username : {0}", envVar["Name"]);
            }

            Console.ReadLine();
        }

すべての Windows ユーザーを一覧表示する方法も参照してください。

于 2012-05-14T05:50:31.203 に答える
0

ドメイン ユーザーを検索するもう 1 つの方法:

using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;

        using (var domain = Domain.GetCurrentDomain())
        using (var directoryEntry = domain.GetDirectoryEntry())
        using (var directorySearcher = new DirectorySearcher(directoryEntry, "(&(objectCategory=person)(objectClass=user))"))
        {
            directorySearcher.PageSize = 1000;

            using (var searchResults = directorySearcher.FindAll())
            {
                foreach (SearchResult searchResult in searchResults)
                {
                    using (var userEntry = searchResult.GetDirectoryEntry())
                    {
                        Console.WriteLine(userEntry.Properties["cn"][0]);
                    }
                }
            }
        }
于 2012-05-14T07:18:44.910 に答える
0

次のようなものを使用できます。

List<string> LdapUsers = new List<string>();

if (String.IsNullOrWhiteSpace(domain))
{
    string username = WindowsIdentity.GetCurrent().Name;
    domain = username.Substring(0, username.IndexOf("\\"));
}

PrincipalContext context;
if (!String.IsNullOrWhiteSpace(user) && !String.IsNullOrWhiteSpace(password) && !String.IsNullOrWhiteSpace(domain))
    context = new PrincipalContext(ContextType.Domain, domain, user, password);
if (!String.IsNullOrWhiteSpace(domain))
    context = new PrincipalContext(ContextType.Domain, domain);
else
    context = new PrincipalContext(ContextType.Domain);
UserPrincipal userP = new UserPrincipal(context);
userP.Enabled = true;
PrincipalSearcher pS = new PrincipalSearcher();
pS.QueryFilter = userP;

PrincipalSearchResult<Principal> result = pS.FindAll();
foreach (Principal p in result)
    LdapUsers.Add(domain + "\\" + p.SamAccountName);
于 2012-05-14T05:43:34.363 に答える