我試圖將AD maxpwdAge
(一個64位整數)轉換爲幾天。使用二進制補碼的負整數的Perl函數
採用IAD設備接口的
Get
方法來檢索域的maxPwdAge
屬性(第5行)的值。注意,我們在VBScript中使用
Set
關鍵字來初始化名爲objMaxPwdAge
的變量 - 用於存儲由Get
返回的值的變量。這是爲什麼?當您獲取一個64位大整數時,ADSI不會返回一個巨大的標量值。相反,ADSI會自動返回一個
IADsLargeInteger
對象。您可以使用IADsLargeInteger
接口的HighPart
和LowPart
屬性來計算大整數的值。正如您可能已經猜到的那樣,HighPart
獲得高階32位,並且LowPart
獲得低階32位。您可以使用以下公式將HighPart
和LowPart
轉換爲大整數的值。
VBScript中的現有代碼在同一頁面:
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
我怎樣才能做到這一點在Perl?
雅..它將但如何生成高部分和低部分(例如:值是-37108517437440) – Tree 2010-09-07 13:11:03
我以爲你有高和低的32位部分,並希望建立原始的64位值。你有什麼? – 2010-09-07 13:14:48
我有64位單值整數值:-37108517437440 – Tree 2010-09-07 13:16:55