J'essaie de convertir AD maxpwdAge
(un entier de 64 bits) en un nombre de jours.Fonction Perl pour les entiers négatifs utilisant le complément 2
utilise la méthode de l'interface IADs
Get
pour récupérer la valeur de l'attributmaxPwdAge
(ligne 5) du domaine.Notez que nous utilisons le mot-clé
Set
dans VBScript pour initialiser la variable nomméeobjMaxPwdAge
-la variable utilisée pour stocker la valeur renvoyée parGet
. Pourquoi donc?Lorsque vous récupérez un entier de 64 bits, ADSI ne renvoie pas une valeur scalaire géante. Au lieu de cela, ADSI renvoie automatiquement un objet
IADsLargeInteger
. Vous utilisez les propriétésIADsLargeInteger
de l'interfaceHighPart
etLowPart
pour calculer la valeur du grand entier. Comme vous l'avez peut-être deviné,HighPart
obtient les 32 bits de poids fort, etLowPart
obtient les 32 bits de poids faible. Vous utilisez la formule suivante pour convertirHighPart
etLowPart
à la valeur du grand entier.
Le code existant dans VBScript de la même page:
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
Comment puis-je faire en Perl?
ya .. mais comment générer la partie haute et basse (par exemple: la valeur est -37108517437440) – Tree
Je pensais que vous aviez les parties 32 bits hautes et basses et que vous vouliez construire la valeur originale de 64 bits . Qu'est-ce que tu as? –
J'ai 64 bits nombre entier chanté valeur: -37108517437440 – Tree