Найти недавно созданных пользователей Active Directory в C # - PullRequest
0 голосов
/ 12 октября 2018

Я использую эту PowerShell для получения информации о пользователях, созданных за последние 24 часа из Active Directory:

 $ous = 'OU=test,DC=test,DC=local' $When = ((Get-Date).AddDays(-1)).Date $ous | ForEach { Get-ADUser -Filter {whenCreated -ge $When} -Properties whenCreated,* -SearchBase $_ }";

Как можно получить тот же результат, используя C #?Спасибо за любую помощь.

Вот мой код C #:

static void Main(string[] args)
    {
        // LDAP string to define your OU
        string ou = "OU=test,DC=test,DC=local";

        // set up a "PrincipalContext" for that OU
        using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "test.local", ou))
        {
            // define the "query-by-example" user (or group, or computer) for your search
            UserPrincipal qbeUser = new UserPrincipal(ctx);

            // set whatever attributes you want to limit your search for, e.g. Name, etc.
            qbeUser.Surname = "ilgezdi";

            // define a searcher for that context and that query-by-example 
            using (PrincipalSearcher searcher = new PrincipalSearcher(qbeUser))
            {
                foreach (Principal p in searcher.FindAll())
                {
                    // Convert the "generic" Principal to a UserPrincipal
                    UserPrincipal user = p as UserPrincipal;

                    if (user != null)
                    {
                        console.Write(user);
                    }
                }
            }
        }
    }

1 Ответ

0 голосов
/ 02 ноября 2018

UserPrincipal не раскрывает дату создания учетной записи, поэтому вы не можете использовать PrincipalSearcher для поиска пользователей по этой дате.

Вам придется использовать DirectorySearcher,который PrincipalSearcher в любом случае использует в фоновом режиме - он просто дает вам больше контроля.

Здесь есть вопрос , который отвечает на этот вопрос при поиске компьютеров, но этот код адаптирован для поиска пользователей:

var domainRoot = new DirectoryEntry("LDAP://rootDSE");
string rootOfDomain = domainRoot.Properties["rootDomainNamingContext"].Value.ToString();
var dsSearch = new DirectorySearcher(rootOfDomain);

//Set the properties of the DirectorySearcher
dsSearch.Filter = "(&(objectClass=user)(whenCreated>=" + dateFilter.ToString("yyyyMMddHHmmss.sZ") + "))";
dsSearch.PageSize = 2000;
dsSearch.PropertiesToLoad.Add("distinguishedName");
dsSearch.PropertiesToLoad.Add("whenCreated");
dsSearch.PropertiesToLoad.Add("sAMAccountName");

//Execute the search
using (SearchResultCollection usersFound = dsSearch.FindAll()) {
    foreach (SearchResult user in usersFound) {
        Console.WriteLine(user.Properties["sAMAccountName"][0]);
    }
}
...