gpt4 book ai didi

c++ - 如何使用 C++ 在 ActiveDirectory 中获取 maxpwdAge 属性值?

转载 作者:行者123 更新时间:2023-11-28 03:29:02 28 4
gpt4 key购买 nike

我正在使用 AD 服务器,我想获取 ma​​xpwdAge 属性 值...

我已经为此尝试过 ADSi,但它给出了一个问题。

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 值...

谁能解决?

最佳答案

maxpwdAge不包含在用户/联系人/个人 LDAP 类中,因此您无法通过这种方式检索它。

你需要从domain对象查询它,而不是user对象

试试这个:

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调度接口(interface)

注意 1:例子是在 VB 中,但你可以很容易地重写它,因为有 COM。

注意 2:maxpwdAge 不是按用户配置的,而是按域配置的(直到启用细粒度密码策略)

进一步阅读:

关于c++ - 如何使用 C++ 在 ActiveDirectory 中获取 maxpwdAge 属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123075/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com