rogerd2u Posted December 19, 2008 Share Posted December 19, 2008 I would really like to get this VBScript into AutoIT, but I have no VB background. Can someone make this work? set objRoot = getobject("LDAP://RootDSE") set objDomain = getobject("LDAP://" & objRoot.get("defaultNamingContext")) maximumPasswordAge = int(Int8ToSec(objDomain.get("maxPwdAge")) / 86400) 'convert to days minimumPasswordAge = Int8ToSec(objDomain.get("minPwdAge")) / 86400 'convert to days minimumPasswordLength = objDomain.get("minPwdLength") accountLockoutDuration = Int8ToSec(objDomain.get("lockoutDuration")) / 60 'convert to minutes lockoutThreshold = objDomain.get("lockoutThreshold") lockoutObservationWindow = Int8ToSec(objDomain.get("lockoutObservationWindow")) / 60 'convert to minutes passwordHistory = objDomain.get("pwdHistoryLength") wscript.echo "Maximum Password Age: " & maximumPasswordAge & " days" & vbcrlf & _ "Minimum Password Age: " & minimumPasswordAge & " days" & vbcrlf & _ "Enforce Password History: " & passwordHistory & " passwords remembered" & vbcrlf & _ "Minimum Password Length: " & minimumPasswordLength & " characters" & vbcrlf & _ "Account Lockout Duration: " & accountLockoutDuration & " minutes" & vbcrlf & _ "Account Lockout Threshold: " & lockoutThreshold & " invalid logon attempts" & vbcrlf & _ "Reset account lockout counter after: " & lockoutObservationWindow & " minutes" Function Int8ToSec(ByVal objInt8) ' Function to convert Integer8 attributes from ' 64-bit numbers to seconds. Dim lngHigh, lngLow lngHigh = objInt8.HighPart ' Account for error in IADsLargeInteger property methods. lngLow = objInt8.LowPart If lngLow < 0 Then lngHigh = lngHigh + 1 End If Int8ToSec = -(lngHigh * (2 ^ 32) + lngLow) / (10000000) End Function Roger O."When people show you who they are, believe them. --Mark Twain Link to comment Share on other sites More sharing options...
Zinthose Posted December 19, 2008 Share Posted December 19, 2008 Amazingly, I need this too just last week... here is what I came up with... expandcollapse popup#Include <Date.au3> TraySetToolTip("Active Directory... Processing") _Demo($DomainString = "dc=domain,dc=com", $HostName = @ComputerName) Exit Func _Demo($DomainString = "dc=domain,dc=com", $HostName = @ComputerName) Local $SQL = "SELECT cn, lastLogon, pwdLastSet, operatingSystemVersion FROM 'LDAP://" & $DomainString & "' WHERE objectcategory='computer' AND cn='" & $HostName & "'" Local $RecordSet = _ActiveDirectory($SQL) Local $xmlDomDoc = ObjCreate("MSXML.DOMDocument") Local $Data = "" $RecordSet.MoveFirst() TrayTip("", "", 1) TrayTip("Electric Inventory - ADSI", "Reformating Data...", 5) While Not $RecordSet.EOF $Data &= _ $RecordSet.Fields("cn" ).Value & "," & _ $RecordSet.Fields("operatingSystemVersion" ).Value & "," & _ _DecodeMetricTime($RecordSet.Fields("lastLogon" ).Value) & "," & _ _DecodeMetricTime($RecordSet.Fields("pwdLastSet").Value) & @CRLF $RecordSet.MoveNext WEnd TrayTip("", "", 1) TrayTip("Electric Inventory - ADSI", "Saving formated data to file.", 5) Local $File = FileOpen("C:\ADSI.csv", 2 + 8) FileWrite($File, $Data) FileClose($File) ;## Clean Up $RecordSet.Close() $RecordSet.ActiveConnection.Close() TrayTip("", "", 1) TrayTip("Electric Inventory - ADSI", "File Saved", 5) ShellExecute("C:\ADSI.csv", "", "", "open") _Alert("Operation Complete") Sleep(5000) EndFunc Func _Alert($Message, $Type = 1) ;## Tray Update TrayTip("", "", 1) TrayTip(" - ", $Message, 5, $Type) ;## SysLog Update ;TODO ;## Console ConsoleWrite(StringFormat('Alert: %d\n-----------------------------------------------------------\n %s\n\n', $Type, $Message)) ;## File Log ;_Log(StringFormat('<alert type="%d">%s</alert>', $Type, $Message)) EndFunc Func _ActiveDirectory($SQL, $UserID = Default, $UserPW = Default) Local Const $ADS_SCOPE_SUBTREE = 2 Local Const $ADS_CHASE_REFERRALS_ALWAYS = 0x60 Local $Connect, $Command, $Records, $RecordSet ;## Validate Parameters If Not IsString($SQL) Then Return SetError(1, 0, 0) If Not IsString($UserID) And _ $UserID <> Default Then Return SetError(2, 0, 0) If Not IsString($UserPW) And _ $UserPW <> Default Then Return SetError(3, 0, 0) ;## Define ADO Connection $Connect = ObjCreate("ADODB.Connection") $Connect.Provider = "ADsDSOObject" $True = True _Alert("Connecting to Server...") If $UserID <> Default Then If $UserPW = Default Then $UserPW = InputBox("Electronic Inventory - ADSI", "Please enter password:" & @CRLF & @CRLF & " User ID = '" & $UserID & "'", "", "*") $Connect.Properties("User ID") = $UserID $Connect.Properties("Password") = $UserPW $Connect.Properties("Encrypt Password") = 1 $Connect.Open("DS Query", $UserID, $UserPW) Else $Connect.Open("DS Query") EndIf _Alert("Connected") ;## Define ADO Command $Command = ObjCreate("ADODB.Command") $Command.ActiveConnection = $Connect $Command.Properties("Chase referrals") = $ADS_CHASE_REFERRALS_ALWAYS $Command.Properties("Page Size") = 1000 $Command.Properties("Searchscope") = $ADS_SCOPE_SUBTREE $Command.CommandText = $SQL ;## Execute and Read Data _Alert("Poling Data...") $RecordSet = $Command.Execute() _Alert("Data Aquisition Complete") $RecordSet.MoveFirst() Return $RecordSet EndFunc Func _DecodeMetricTime($TimeObject) Local $FileTime, $Formated, $Pointer #cs **** History Leason: Metric Time http://en.wikipedia.org/wiki/Metric_time http://msdn.microsoft.com/en-us/library/ms724284.aspx #ce ;## Convert TimeObject to a Microsoft FileTime DLLStructure $FileTime = DllStructCreate($tagFILETIME) DllStructSetData($FileTime, "Hi", $TimeObject.HighPart) DllStructSetData($FileTime, "Lo", $TimeObject.LowPart) ;## Convert from UTC to Local $FileTime = _Date_Time_FileTimeToLocalFileTime(DllStructGetPtr($FileTime)) ;## Decode FileTime to human readable string $Formated = _Date_Time_FileTimeToStr($FileTime) ;## DEBUG _Alert("HighPart = " & $TimeObject.HighPart & @CRLF & _ " LowPart = " & $TimeObject.LowPart & @CRLF & _ " Formated = " & $Formated) Return $Formated EndFunc Func _Decode64Time($TimeObject) ;## Decode common 64 bit time fields Local $TimeValue ;## Validate Parameters If Not IsObj($TimeObject) Then Return SetError(1, 0, 0) _Alert("HighPart = " & $TimeObject.HighPart) _Alert("LowPart = " & $TimeObject.LowPart) ;## Value is nanoseconds since 1601/01/01 ;## Convert the value to Days since 1601/01/01 $TimeValue = $TimeObject.HighPart * (2^32) + $TimeObject.LowPart $TimeValue /= (60 * 10000000) $TimeValue /= 1440 ;## Calucate get the date / time segmented values $Days = Int($TimeValue) $Hours = ($TimeValue - $Days) * 24 $Minutes = ($Hours - Int($Hours)) * 60 $Seconds = ($Minutes - Int($Minutes)) * 60 ;## Get Time segments absolute values $Hours = Int($Hours) $Minutes = Int($Minutes) $Seconds = Int($Seconds) ;## Format the time values into a standard format $Time = StringFormat("%02s:%02s:%02s", $Hours, $Minutes, $Seconds) ;## Calculate the final date value $Date = _DateAdd("d", $Days, "1601/01/01") ;## Format Final Date / Time Format and return value $DateTime = $Date & " " & $Time _Alert("Formated = " & $DateTime) Return $DateTime EndFunc --- TTFN Link to comment Share on other sites More sharing options...
rogerd2u Posted December 19, 2008 Author Share Posted December 19, 2008 Thanks, but this doesn't appear to get the same data... I'm looking for the same exact results of the VBScript I posted, only in values (variables) I can capture and use in other scripts ... Amazingly, I need this too just last week... here is what I came up with... expandcollapse popup#Include <Date.au3> TraySetToolTip("Active Directory... Processing") _Demo($DomainString = "dc=domain,dc=com", $HostName = @ComputerName) Exit Func _Demo($DomainString = "dc=domain,dc=com", $HostName = @ComputerName) Local $SQL = "SELECT cn, lastLogon, pwdLastSet, operatingSystemVersion FROM 'LDAP://" & $DomainString & "' WHERE objectcategory='computer' AND cn='" & $HostName & "'" Local $RecordSet = _ActiveDirectory($SQL) Local $xmlDomDoc = ObjCreate("MSXML.DOMDocument") Local $Data = "" $RecordSet.MoveFirst() TrayTip("", "", 1) TrayTip("Electric Inventory - ADSI", "Reformating Data...", 5) While Not $RecordSet.EOF $Data &= _ $RecordSet.Fields("cn" ).Value & "," & _ $RecordSet.Fields("operatingSystemVersion" ).Value & "," & _ _DecodeMetricTime($RecordSet.Fields("lastLogon" ).Value) & "," & _ _DecodeMetricTime($RecordSet.Fields("pwdLastSet").Value) & @CRLF $RecordSet.MoveNext WEnd TrayTip("", "", 1) TrayTip("Electric Inventory - ADSI", "Saving formated data to file.", 5) Local $File = FileOpen("C:\ADSI.csv", 2 + 8) FileWrite($File, $Data) FileClose($File) ;## Clean Up $RecordSet.Close() $RecordSet.ActiveConnection.Close() TrayTip("", "", 1) TrayTip("Electric Inventory - ADSI", "File Saved", 5) ShellExecute("C:\ADSI.csv", "", "", "open") _Alert("Operation Complete") Sleep(5000) EndFunc Func _Alert($Message, $Type = 1) ;## Tray Update TrayTip("", "", 1) TrayTip(" - ", $Message, 5, $Type) ;## SysLog Update ;TODO ;## Console ConsoleWrite(StringFormat('Alert: %d\n-----------------------------------------------------------\n %s\n\n', $Type, $Message)) ;## File Log ;_Log(StringFormat('<alert type="%d">%s</alert>', $Type, $Message)) EndFunc Func _ActiveDirectory($SQL, $UserID = Default, $UserPW = Default) Local Const $ADS_SCOPE_SUBTREE = 2 Local Const $ADS_CHASE_REFERRALS_ALWAYS = 0x60 Local $Connect, $Command, $Records, $RecordSet ;## Validate Parameters If Not IsString($SQL) Then Return SetError(1, 0, 0) If Not IsString($UserID) And _ $UserID <> Default Then Return SetError(2, 0, 0) If Not IsString($UserPW) And _ $UserPW <> Default Then Return SetError(3, 0, 0) ;## Define ADO Connection $Connect = ObjCreate("ADODB.Connection") $Connect.Provider = "ADsDSOObject" $True = True _Alert("Connecting to Server...") If $UserID <> Default Then If $UserPW = Default Then $UserPW = InputBox("Electronic Inventory - ADSI", "Please enter password:" & @CRLF & @CRLF & " User ID = '" & $UserID & "'", "", "*") $Connect.Properties("User ID") = $UserID $Connect.Properties("Password") = $UserPW $Connect.Properties("Encrypt Password") = 1 $Connect.Open("DS Query", $UserID, $UserPW) Else $Connect.Open("DS Query") EndIf _Alert("Connected") ;## Define ADO Command $Command = ObjCreate("ADODB.Command") $Command.ActiveConnection = $Connect $Command.Properties("Chase referrals") = $ADS_CHASE_REFERRALS_ALWAYS $Command.Properties("Page Size") = 1000 $Command.Properties("Searchscope") = $ADS_SCOPE_SUBTREE $Command.CommandText = $SQL ;## Execute and Read Data _Alert("Poling Data...") $RecordSet = $Command.Execute() _Alert("Data Aquisition Complete") $RecordSet.MoveFirst() Return $RecordSet EndFunc Func _DecodeMetricTime($TimeObject) Local $FileTime, $Formated, $Pointer #cs **** History Leason: Metric Time http://en.wikipedia.org/wiki/Metric_time http://msdn.microsoft.com/en-us/library/ms724284.aspx #ce ;## Convert TimeObject to a Microsoft FileTime DLLStructure $FileTime = DllStructCreate($tagFILETIME) DllStructSetData($FileTime, "Hi", $TimeObject.HighPart) DllStructSetData($FileTime, "Lo", $TimeObject.LowPart) ;## Convert from UTC to Local $FileTime = _Date_Time_FileTimeToLocalFileTime(DllStructGetPtr($FileTime)) ;## Decode FileTime to human readable string $Formated = _Date_Time_FileTimeToStr($FileTime) ;## DEBUG _Alert("HighPart = " & $TimeObject.HighPart & @CRLF & _ " LowPart = " & $TimeObject.LowPart & @CRLF & _ " Formated = " & $Formated) Return $Formated EndFunc Func _Decode64Time($TimeObject) ;## Decode common 64 bit time fields Local $TimeValue ;## Validate Parameters If Not IsObj($TimeObject) Then Return SetError(1, 0, 0) _Alert("HighPart = " & $TimeObject.HighPart) _Alert("LowPart = " & $TimeObject.LowPart) ;## Value is nanoseconds since 1601/01/01 ;## Convert the value to Days since 1601/01/01 $TimeValue = $TimeObject.HighPart * (2^32) + $TimeObject.LowPart $TimeValue /= (60 * 10000000) $TimeValue /= 1440 ;## Calucate get the date / time segmented values $Days = Int($TimeValue) $Hours = ($TimeValue - $Days) * 24 $Minutes = ($Hours - Int($Hours)) * 60 $Seconds = ($Minutes - Int($Minutes)) * 60 ;## Get Time segments absolute values $Hours = Int($Hours) $Minutes = Int($Minutes) $Seconds = Int($Seconds) ;## Format the time values into a standard format $Time = StringFormat("%02s:%02s:%02s", $Hours, $Minutes, $Seconds) ;## Calculate the final date value $Date = _DateAdd("d", $Days, "1601/01/01") ;## Format Final Date / Time Format and return value $DateTime = $Date & " " & $Time _Alert("Formated = " & $DateTime) Return $DateTime EndFunc Roger O."When people show you who they are, believe them. --Mark Twain Link to comment Share on other sites More sharing options...
AlmarM Posted December 19, 2008 Share Posted December 19, 2008 Is this what you need? Global $objRoot = ObjGet("LDAP://RoosDSE") Global $objDomain = ObjGet("LDAP://" & $objRoot.Get("defaultNamingContext")) Global $oWhs = ObjCreate("Wscript.Shell") $maximumPasswordAge = Int(Int8ToSec($objDomin.Get("maxPwdAge"))) / 86400 ; Convert to Days $minimumPasswordAge = Int8ToSec($objDomain.Get("minPwdAge")) / 86400 ; Convert to Days $minimumPasswordLength = $objDomain.Get("minPwdLength") $accountLockoutDuration = Int8ToSec($objDomain.Get("lockoutDuration")) / 60 ; Convert to Minutes $lockoutThreshold = $objDomain.Get("lockoutThreshold") $lockoutObservartionWindow = Int8ToSec($objDomain.Get("lockoutObservationWindow")) / 60 ; Convert to Minutes $passwordHistory = $objDomain.Get("pwdHistoryLength") $oWhs.Echo("Maximum Password Age: " & $maximumPasswordAge & " days" & @CRLF & _ "Minimum Password Age: " & $minimumPasswordAge & " days" & @CRLF & _ "Enforce Password History: " & $passwordHistory & " passwords remembered" & @CRLF & _ "Minimum Password Length: " & $minimumPasswordLength & " characters" & @CRLF & _ "Account Lockout Duration: " & $accountLockoutDuration & " minutes" & @CRLF & _ "Account Lockout Threshold: " & $lockoutThreshold & " invalid logon attempts" & @CRLF & _ "Reset account lockout counter after: " & $lockoutObservationWindow & " minutes" Func Int8ToSec(ByRef $objInt8) Dim $lngHigh, $lngLow $lngHigh = $objInt8.HighPart $lngLow = $objInt8.LowPart If $lngLow < 0 Then $lngHigh = $lngHigh + 1 EndIf Return $lngHigh * (2 ^ 32) + $lngLow) / 10000000 EndFunc AlmarM Minesweeper A minesweeper game created in autoit, source available. _Mouse_UDF An UDF for registering functions to mouse events, made in pure autoit. 2D Hitbox Editor A 2D hitbox editor for quick creation of 2D sphere and rectangle hitboxes. Link to comment Share on other sites More sharing options...
rogerd2u Posted December 19, 2008 Author Share Posted December 19, 2008 It looks very promising, but I can't get it to work... ERROR REPORT: >Running AU3Check (1.54.13.0) from:C:\Program Files\AutoIt3 C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(7,63) : WARNING: $objDomin: possibly used before declaration. $maximumPasswordAge = Int(Int8ToSec($objDomin.Get("maxPwdAge")) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(21,81) : WARNING: $lockoutObservationWindow: possibly used before declaration. "Reset account lockout counter after: " & $lockoutObservationWindow & ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(21,93) : ERROR: syntax error "Reset account lockout counter after: " & $lockoutObservationWindow & " minutes" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(26,33) : WARNING: $objInt8: possibly used before declaration. $lngHigh = $objInt8.HighPart ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(33,41) : ERROR: syntax error Return $lngHigh * (2 ^ 32) + $lngLow) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(33,53) : ERROR: 'Return' not allowed from global scope. Return $lngHigh * (2 ^ 32) + $lngLow) / 10000000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(34,1) : ERROR: syntax error EndFunc ^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(7,63) : ERROR: $objDomin: undeclared global variable. $maximumPasswordAge = Int(Int8ToSec($objDomin.Get("maxPwdAge")) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3(7,63) : ERROR: Int8ToSec(): undefined function. $maximumPasswordAge = Int(Int8ToSec($objDomin.Get("maxPwdAge")) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3 - 6 error(s), 3 warning(s) Is this what you need? Global $objRoot = ObjGet("LDAP://RoosDSE") Global $objDomain = ObjGet("LDAP://" & $objRoot.Get("defaultNamingContext")) Global $oWhs = ObjCreate("Wscript.Shell") $maximumPasswordAge = Int(Int8ToSec($objDomin.Get("maxPwdAge"))) / 86400 ; Convert to Days $minimumPasswordAge = Int8ToSec($objDomain.Get("minPwdAge")) / 86400 ; Convert to Days $minimumPasswordLength = $objDomain.Get("minPwdLength") $accountLockoutDuration = Int8ToSec($objDomain.Get("lockoutDuration")) / 60 ; Convert to Minutes $lockoutThreshold = $objDomain.Get("lockoutThreshold") $lockoutObservartionWindow = Int8ToSec($objDomain.Get("lockoutObservationWindow")) / 60 ; Convert to Minutes $passwordHistory = $objDomain.Get("pwdHistoryLength") $oWhs.Echo("Maximum Password Age: " & $maximumPasswordAge & " days" & @CRLF & _ "Minimum Password Age: " & $minimumPasswordAge & " days" & @CRLF & _ "Enforce Password History: " & $passwordHistory & " passwords remembered" & @CRLF & _ "Minimum Password Length: " & $minimumPasswordLength & " characters" & @CRLF & _ "Account Lockout Duration: " & $accountLockoutDuration & " minutes" & @CRLF & _ "Account Lockout Threshold: " & $lockoutThreshold & " invalid logon attempts" & @CRLF & _ "Reset account lockout counter after: " & $lockoutObservationWindow & " minutes" Func Int8ToSec(ByRef $objInt8) Dim $lngHigh, $lngLow $lngHigh = $objInt8.HighPart $lngLow = $objInt8.LowPart If $lngLow < 0 Then $lngHigh = $lngHigh + 1 EndIf Return $lngHigh * (2 ^ 32) + $lngLow) / 10000000 EndFunc AlmarM Roger O."When people show you who they are, believe them. --Mark Twain Link to comment Share on other sites More sharing options...
AlmarM Posted December 19, 2008 Share Posted December 19, 2008 Ye I know, just translated it raw ;p AlmarM Minesweeper A minesweeper game created in autoit, source available. _Mouse_UDF An UDF for registering functions to mouse events, made in pure autoit. 2D Hitbox Editor A 2D hitbox editor for quick creation of 2D sphere and rectangle hitboxes. Link to comment Share on other sites More sharing options...
rogerd2u Posted December 19, 2008 Author Share Posted December 19, 2008 Can someone help me get this translated to AutoIT, please? It would be GREATLY appreciated! Roger O."When people show you who they are, believe them. --Mark Twain Link to comment Share on other sites More sharing options...
ProgAndy Posted December 19, 2008 Share Posted December 19, 2008 The errors are just typos. Corrected them, but couldn't test... Global $objRoot = ObjGet("LDAP://RoosDSE") Global $objDomain = ObjGet("LDAP://" & $objRoot.Get("defaultNamingContext")) ;~ Global $oWhs = ObjCreate("Wscript.Shell") $maximumPasswordAge = Int(Int8ToSec($objDomain.Get("maxPwdAge"))) / 86400 ; Convert to Days $minimumPasswordAge = Int8ToSec($objDomain.Get("minPwdAge")) / 86400 ; Convert to Days $minimumPasswordLength = $objDomain.Get("minPwdLength") $accountLockoutDuration = Int8ToSec($objDomain.Get("lockoutDuration")) / 60 ; Convert to Minutes $lockoutThreshold = $objDomain.Get("lockoutThreshold") $lockoutObservationWindow = Int8ToSec($objDomain.Get("lockoutObservationWindow")) / 60 ; Convert to Minutes $passwordHistory = $objDomain.Get("pwdHistoryLength") MsgBox(0,"","Maximum Password Age: " & $maximumPasswordAge & " days" & @CRLF & _ "Minimum Password Age: " & $minimumPasswordAge & " days" & @CRLF & _ "Enforce Password History: " & $passwordHistory & " passwords remembered" & @CRLF & _ "Minimum Password Length: " & $minimumPasswordLength & " characters" & @CRLF & _ "Account Lockout Duration: " & $accountLockoutDuration & " minutes" & @CRLF & _ "Account Lockout Threshold: " & $lockoutThreshold & " invalid logon attempts" & @CRLF & _ "Reset account lockout counter after: " & $lockoutObservationWindow & " minutes") Func Int8ToSec($objInt8) Dim $lngHigh, $lngLow $lngHigh = $objInt8.HighPart $lngLow = $objInt8.LowPart If $lngLow < 0 Then $lngHigh = $lngHigh + 1 EndIf Return ($lngHigh * (2 ^ 32) + $lngLow) / 10000000 EndFunc *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes Link to comment Share on other sites More sharing options...
rogerd2u Posted December 19, 2008 Author Share Posted December 19, 2008 Well, there is definite progess being made. It lets me run the script, but nothing displays and I get the following: C:\Documents and Settings\rosborne\Local Settings\Temp\test.au3 (2) : ==> Variable must be of type "Object".: Global $objDomain = ObjGet("LDAP://" & $objRoot.Get("defaultNamingContext")) Global $objDomain = ObjGet("LDAP://" & $objRoot^ ERROR Thank you so much for you continued help!! The errors are just typos. Corrected them, but couldn't test... Global $objRoot = ObjGet("LDAP://RoosDSE") Global $objDomain = ObjGet("LDAP://" & $objRoot.Get("defaultNamingContext")) ;~ Global $oWhs = ObjCreate("Wscript.Shell") $maximumPasswordAge = Int(Int8ToSec($objDomain.Get("maxPwdAge"))) / 86400 ; Convert to Days $minimumPasswordAge = Int8ToSec($objDomain.Get("minPwdAge")) / 86400 ; Convert to Days $minimumPasswordLength = $objDomain.Get("minPwdLength") $accountLockoutDuration = Int8ToSec($objDomain.Get("lockoutDuration")) / 60 ; Convert to Minutes $lockoutThreshold = $objDomain.Get("lockoutThreshold") $lockoutObservationWindow = Int8ToSec($objDomain.Get("lockoutObservationWindow")) / 60 ; Convert to Minutes $passwordHistory = $objDomain.Get("pwdHistoryLength") MsgBox(0,"","Maximum Password Age: " & $maximumPasswordAge & " days" & @CRLF & _ "Minimum Password Age: " & $minimumPasswordAge & " days" & @CRLF & _ "Enforce Password History: " & $passwordHistory & " passwords remembered" & @CRLF & _ "Minimum Password Length: " & $minimumPasswordLength & " characters" & @CRLF & _ "Account Lockout Duration: " & $accountLockoutDuration & " minutes" & @CRLF & _ "Account Lockout Threshold: " & $lockoutThreshold & " invalid logon attempts" & @CRLF & _ "Reset account lockout counter after: " & $lockoutObservationWindow & " minutes") Func Int8ToSec($objInt8) Dim $lngHigh, $lngLow $lngHigh = $objInt8.HighPart $lngLow = $objInt8.LowPart If $lngLow < 0 Then $lngHigh = $lngHigh + 1 EndIf Return ($lngHigh * (2 ^ 32) + $lngLow) / 10000000 EndFunc Roger O."When people show you who they are, believe them. --Mark Twain Link to comment Share on other sites More sharing options...
weaponx Posted December 19, 2008 Share Posted December 19, 2008 rogerd2u - Do some debugging yourself, its not Christmas yet.Hint:Original:Line1: set objRoot = getobject("LDAP://RootDSE")Current: Line1: Global $objRoot = ObjGet("LDAP://RoosDSE") Link to comment Share on other sites More sharing options...
rogerd2u Posted December 19, 2008 Author Share Posted December 19, 2008 (edited) I looked through it for type-o's but didn't find any -- HONESTLY! :-) That fixed it! You all are awesome!! rogerd2u - Do some debugging yourself, its not Christmas yet. Hint: Original: Line1: set objRoot = getobject("LDAP://RootDSE") Current: Line1: Global $objRoot = ObjGet("LDAP://RoosDSE") For those who would like to copy & paste the working code, here it is: ;Function to check Active Directory for Domain password policy settings Global $objRoot = ObjGet("LDAP://RootDSE") Global $objDomain = ObjGet("LDAP://" & $objRoot.Get("defaultNamingContext")) ;~ Global $oWhs = ObjCreate("Wscript.Shell") $maximumPasswordAge = Int(Int8ToSec($objDomain.Get("maxPwdAge"))) / 86400 ; Convert to Days $minimumPasswordAge = Int8ToSec($objDomain.Get("minPwdAge")) / 86400 ; Convert to Days $minimumPasswordLength = $objDomain.Get("minPwdLength") $accountLockoutDuration = Int8ToSec($objDomain.Get("lockoutDuration")) / 60 ; Convert to Minutes $lockoutThreshold = $objDomain.Get("lockoutThreshold") $lockoutObservationWindow = Int8ToSec($objDomain.Get("lockoutObservationWindow")) / 60 ; Convert to Minutes $passwordHistory = $objDomain.Get("pwdHistoryLength") MsgBox(0,"","Maximum Password Age: " & $maximumPasswordAge & " days" & @CRLF & _ "Minimum Password Age: " & $minimumPasswordAge & " days" & @CRLF & _ "Enforce Password History: " & $passwordHistory & " passwords remembered" & @CRLF & _ "Minimum Password Length: " & $minimumPasswordLength & " characters" & @CRLF & _ "Account Lockout Duration: " & $accountLockoutDuration & " minutes" & @CRLF & _ "Account Lockout Threshold: " & $lockoutThreshold & " invalid logon attempts" & @CRLF & _ "Reset account lockout counter after: " & $lockoutObservationWindow & " minutes") Func Int8ToSec($objInt8) Dim $lngHigh, $lngLow $lngHigh = $objInt8.HighPart $lngLow = $objInt8.LowPart If $lngLow < 0 Then $lngHigh = $lngHigh + 1 EndIf Return -($lngHigh * (2 ^ 32) + $lngLow) / (10000000) EndFunc (Although it looks like negative numbers in several results, but I'm sure I can figure that part out!) :-) THANKS AGAIN !!!! Edited December 19, 2008 by rogerd2u Roger O."When people show you who they are, believe them. --Mark Twain Link to comment Share on other sites More sharing options...
weaponx Posted December 19, 2008 Share Posted December 19, 2008 (Although it looks like negative numbers in several results, but I'm sure I can figure that part out!) :-)THANKS AGAIN !!!!If you could post the output from VB and AutoIt side by side we can figure it out. Link to comment Share on other sites More sharing options...
rogerd2u Posted December 19, 2008 Author Share Posted December 19, 2008 Window VBScript Result --Maximum Password Age: 90 daysMinimum Password Age: 1 daysEnforce Password History: 10 passwords rememberedMinimum Password Length: 8 charactersAccount Lockout Duration: 3 minutesAccount Lockout Threshold: 7 invalid login attemptsReset account lockout counter after: 3 minutesAuotIT Script Result --Maximum Password Age: -90 daysMinimum Password Age: -1 daysEnforce Password History: 10 passwords rememberedMinimum Password Length: 8 charactersAccount Lockout Duration: -3 minutesAccount Lockout Threshold: 7 invalid login attemptsReset account lockout counter after: -3 minutesIf you could post the output from VB and AutoIt side by side we can figure it out. Roger O."When people show you who they are, believe them. --Mark Twain Link to comment Share on other sites More sharing options...
weaponx Posted December 19, 2008 Share Posted December 19, 2008 Again, a typo in the translation...come on people. Original: Int8ToSec = -(lngHigh * (2 ^ 32) + lngLow) / (10000000) Current: Return ($lngHigh * (2 ^ 32) + $lngLow) / 10000000 Link to comment Share on other sites More sharing options...
rogerd2u Posted December 19, 2008 Author Share Posted December 19, 2008 You 'da man! Here's the completed code ;Function to check Active Directory for Domain password policy settings Global $objRoot = ObjGet("LDAP://RootDSE") Global $objDomain = ObjGet("LDAP://" & $objRoot.Get("defaultNamingContext")) ;~ Global $oWhs = ObjCreate("Wscript.Shell") $maximumPasswordAge = Int(Int8ToSec($objDomain.Get("maxPwdAge"))) / 86400 ; Convert to Days $minimumPasswordAge = Int8ToSec($objDomain.Get("minPwdAge")) / 86400 ; Convert to Days $minimumPasswordLength = $objDomain.Get("minPwdLength") $accountLockoutDuration = Int8ToSec($objDomain.Get("lockoutDuration")) / 60 ; Convert to Minutes $lockoutThreshold = $objDomain.Get("lockoutThreshold") $lockoutObservationWindow = Int8ToSec($objDomain.Get("lockoutObservationWindow")) / 60 ; Convert to Minutes $passwordHistory = $objDomain.Get("pwdHistoryLength") MsgBox(0,"","Maximum Password Age: " & $maximumPasswordAge & " days" & @CRLF & _ "Minimum Password Age: " & $minimumPasswordAge & " days" & @CRLF & _ "Enforce Password History: " & $passwordHistory & " passwords remembered" & @CRLF & _ "Minimum Password Length: " & $minimumPasswordLength & " characters" & @CRLF & _ "Account Lockout Duration: " & $accountLockoutDuration & " minutes" & @CRLF & _ "Account Lockout Threshold: " & $lockoutThreshold & " invalid logon attempts" & @CRLF & _ "Reset account lockout counter after: " & $lockoutObservationWindow & " minutes") Func Int8ToSec($objInt8) Dim $lngHigh, $lngLow $lngHigh = $objInt8.HighPart $lngLow = $objInt8.LowPart If $lngLow < 0 Then $lngHigh = $lngHigh + 1 EndIf Return -($lngHigh * (2 ^ 32) + $lngLow) / (10000000) EndFunc Again, a typo in the translation...come on people. Original: Int8ToSec = -(lngHigh * (2 ^ 32) + lngLow) / (10000000) Current: Return ($lngHigh * (2 ^ 32) + $lngLow) / 10000000 Roger O."When people show you who they are, believe them. --Mark Twain Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now