Отчет об атрибутах объекта пользователя AD для учетных записей, которые никогда не входили в систему

Я написал утилиту на C # для отчета о деталях учетной записи AD для использования в процессах управления доступом. Я заметил, что значения некоторых атрибутов не включаются в отчеты для учетных записей, которые никогда не входили в систему, и поэтому userAccountControl не инициализирован.

Есть ли способ программно сообщить эти значения для учетных записей, которые никогда не входили в систему, с помощью C #?

Например, все наши учетные записи имеют атрибут employeeType, и для каждой учетной записи employeeType установлено значение " Подрядчик »или« Постоянный », который отображается в AD Explorer на вкладке« Редактор атрибутов »профиля учетной записи. Если для учетной записи был выполнен вход, это значение включается в мои отчеты, но если нет, то employeeType не отображается в результатах для этой учетной записи.

Вот образец моего кода:

public static List<ADObjects> getADUserObjects(string domainShortNameStr)
{
    List<ADObjects> adUserObjectsList = new List<ADObjects>();
    DirectoryEntry searchRoot = ADUtils.getSingleDomainDirectoryEntry(domainShortNameStr);
    string searchFilter = "(sAMAccountType=805306368)";
    string[] adAttributeNamesStrArr = new string[] {
        "distinguishedName",
        "sAMAccountName",
        "userAccountControl",
        "employeeType"
    };
    DirectorySearcher search = new DirectorySearcher(searchRoot, searchFilter, adAttributeNamesStrArr);
    search.PageSize = 1000;

    SearchResult result;
    SearchResultCollection resultCol = search.FindAll();
    if (resultCol != null)
    {
        for (int counter = 0; counter < resultCol.Count; counter++)
        {
            result = resultCol[counter];
            ADObjects tempAdUserObject = new ADObjects();
            tempAdUserObject.DistinguishedName = (result.Properties.Contains("distinguishedName")) ? ((String)result.Properties["distinguishedName"][0]) : null;
            tempAdUserObject.SAMAccountName = (result.Properties.Contains("samaccountname")) ? (String)result.Properties["samaccountname"][0] : null;
            tempAdUserObject.UserAccountControl = (result.Properties.Contains("userAccountControl")) ? result.Properties["userAccountControl"][0].ToString() : null;
            tempAdUserObject.EmployeeType = (result.Properties.Contains("employeeType")) ? (String)result.Properties["employeeType"][0] : null;
            adUserObjectsList.Add(tempAdUserObject);
        }
    }
    ...
    return adUserObjectsList;
}

Я пробовал создание аналогичных отчетов с использованием CSVDE, LDIFDE, DSQUERY, Powershell и VBScript, и происходит то же самое: employeeType не возвращается для учетных записей, которые никогда не входили в систему.

Все отчеты были запущены как под моей собственной учетной записью домена, так и под учетной записью службы только для чтения, созданной для этой цели, с такими же результатами.

1
задан 18 May 2017 в 16:17
1 ответ

Если атрибут не установлен в записях LDAP до первого входа в систему, тогда нет запроса LDAP, который вернет его. Так работает протокол LDAP:

Если атрибут не установлен в записи, даже если он запрошен, он не будет пустым в результате, но не будет атрибута вообще.

Вам нужно будет проверить при обработке записи, что, если атрибут записи «EmployeeType» отсутствует, установите значение по умолчанию, которое вы хотите отобразить в отчете

0
ответ дан 4 December 2019 в 04:56

Теги

Похожие вопросы