Как получить значение атрибута maxpwdAge в ActiveDirectory с помощью C++?

Я работаю с сервером AD, я хочу получить значение атрибута maxpwdAge...

Я уже пробовал AD Si для этого, но это дает проблему.

VARIANT var;
bsNamingContext=L"maxpwdAge";

hr = ADsGetObject(pszADsPath, IID_IADsUser, (void**) &pUser);
if(SUCCEEDED(hr))
{
VariantInit(&var);
hr = pUser->Get(bsNamingContext, &var);  
}

но это дает -2147463155 (8000500d) ошибку...

но я использую bsNamingContext=L"cn";это дает значения CN правильно...

Кто-нибудь может решить это?

2 ответа

Решение

maxpwdAge не включен в класс LDAP пользователя / контакта / лица, поэтому вы не можете получить его таким образом.

Вам нужно запросить его из объекта домена, а не объекта пользователя

Попробуй это:

Const ONE_HUNDRED_NANOSECOND = .000000100   ' .000000100 is equal to 10^-7
Const SECONDS_IN_DAY = 86400

Set objDomain = GetObject("LDAP://DC=fabrikam,DC=com")     ' LINE 4
Set objMaxPwdAge = objDomain.Get("maxPwdAge")              ' LINE 5

If objMaxPwdAge.LowPart = 0 Then
  WScript.Echo "The Maximum Password Age is set to 0 in the " & _
               "domain. Therefore, the password does not expire."
  WScript.Quit
Else
  dblMaxPwdNano = Abs(objMaxPwdAge.HighPart * 2^32 + objMaxPwdAge.LowPart)
  dblMaxPwdSecs = dblMaxPwdNano * ONE_HUNDRED_NANOSECOND   ' LINE 13
  dblMaxPwdDays = Int(dblMaxPwdSecs / SECONDS_IN_DAY)      ' LINE 14
  WScript.Echo "Maximum password age: " & dblMaxPwdDays & " days"
End If

ОБНОВИТЬ:

Для преобразования большого целого числа в удобочитаемое значение используйте интерфейс диспетчеризации IADsLargeInteger.

Примечание 1: Пример написан на VB, но вы можете легко переписать его из-за COM.

Примечание 2: maxpwdAge настраивается не для пользователя, а для домена (до тех пор, пока не будут включены детальные политики паролей)

Дальнейшие чтения:

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

      baseDN: 'DC=myofficedomain,DC=local',
filter: '(objectClass=domain)',
attributes: ['maxPwdAge']

Я надеюсь, что это поможет всем, кто использует ldapsearch или NodeJS с ActiveDirectory.

Другие вопросы по тегам