0

ADサーバーを使用しています。maxpwdAge属性値を取得したい...

私はすでにそのために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値を正しく与えます...

誰でも解決できますか?

4

1 に答える 1

2

maxpwdAgeはuser/contact / person 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はユーザーごとではなく、ドメインごとに構成されます(きめ細かいパスワードポリシーが有効になるまで)

さらなる読み物:

于 2012-10-29T17:14:13.633 に答える