Вы находитесь на странице: 1из 116

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>AD Management Utility</title> <HTA:APPLICATION id="objADManage" applicationname="ADManageUtil" border="thin" borderstyle="normal" caption="AD

Management Utility" contextmenu="no" icon="otherFiles\globe.ico" maximizebutton="no" minimizebutton="yes" navigable="yes" scroll="no" selection="yes" singleinstance="yes" sysmenu="yes" version="1.5" windowstate="normal" /> <style type="text/css"> body { font-size:0.9em; cursor: default; font-family: "trebuchet ms", calibri, helvetica, sans-serif, "Times New Roman"; } input { font-family: "trebuchet ms", calibri, helvetica, sans-serif, "Times New Roman"; } input.button { color: black; cursor: hand; background-color: white; border: #000033 2px solid; font-weight: bold; } input.text { border: #000033 1px solid; font-weight: bold; height: 23px; } input.btnhov { border-color: #000033; background-color: #cccccc; } input.disabled { background-color: #eeeeee; border-color: #888888; cursor: default; } input.userdis {

background-color: white; border-color: #888888; border-width: 2px; } input.checkbox { padding: 1em; border: 2px solid black; } input.checkbox.disabled { border-color: #888888; } select { font-family: "trebuchet ms", calibri, helvetica, sans-serif, "Times New Roman"; border: #000033 1px solid; height: 23px; } option.group { background-color: #FFFFCC; } select.disabled { background-color: #eeeeee; color: #888888; border-color: #888888; } table.controltable { border-collapse: collapse; table-layout: fixed; } table.controltable th { } table.controltable td { height: 23px; } table.layout { border-collapse: collapse; width: 100%; } table.layout th, td { padding: 0px 10px; vertical-align:top; font-size: 0.8em; } .layoutheader { padding-top: 5px; padding-bottom: 10px; width: 50%; font-weight: bold; text-decoration: underline; font-size: 0.9em; } .hidden { display: none; visibility: hidden; } .spanlink { text-decoration: underline; font-weight:bold; color: blue; cursor: hand;

} a { text-decoration: none; } .greenbold { color: green; font-weight: bold; } .redbold { color: red; font-weight: bold; } .infoTD { width: 200px; height: 23px; border: 1px solid #000033; background-color: white; font-weight: bold; vertical-align: middle; } .infoTD.disabled { background-color: #eeeeee; border-color: #888888; cursor: default; } .L3 { vertical-align: middle; background-color: white; } .L3Upper { border-top: 2px solid #000033; } .L3Lower { border-bottom: 2px solid #000033; } .L3Left { border-left: 2px solid #000033; } .L3Right { border-right: 2px solid #000033; } .L3Middle { border-top: 1px solid #003333; } .L3Upper.disabled, .L3Lower.disabled, .L3Left.disabled, .L3Right.disabled, .L3Middle.disabled { background-color: #eeeeee; border-color: #888888; } .bottommenuleft { position: absolute; bottom: 15px; left: 10px; font-weight: bold; } .bottommenuright { position: absolute; bottom: 15px; right: 10px;

font-weight: bold; } #TopBar { font-style: italic; position: absolute; font-weight: bold; top: 18px; right: 15px; font-size: 0.9em; color: #888888; } #VersionInfo { position: absolute; top: 20px; right: 10px; font-style: italic; color: #888888; } #layout1, #layout2, #layout3, #loadingdiv, #layoutuser, #layoutgroup, #LayoutSettings { overflow: auto; background-color: #eeeeee; height: 95%; width: 100%; } #UserTableSpan, #PCTableSpan, #GroupTableSpan { position: absolute; top: 40px; left: 10px; overflow: auto; background-color: #eeeeee; border: solid #888888 1px; border-bottom-width: 0px; height: 485px; width: 100%; } #UsernameSearchSpan { position: absolute; left: 30px; bottom: 100px; width: 350px; height: 350px; overflow: auto; } #UserExportOptionsSpan { position: absolute; left: 60px; top: 50px; width: 350px; padding-top: 0px; background-color: white; border: 1px solid black; z-index: 1; } #LUDNSpan, .DelegateSpan { background-color: white; overflow: auto; width: 100%;

height: 55; border: #000033 1px solid; padding: 5px; margin-left: 10px; margin-right: 10px; } #LUDNSpan.disabled { border-color: #888888; background-color: #eeeeee; } #nonusertable { border-collapse: collapse; width: "100%"; } #nonusertable th { background-color: "black"; text-align: left; color: "white"; height: 25px; cursor: "hand"; border: #888888 solid; border-width: 1px 0px; border-collapse: collapse; } #nonusertable td { background-color: "white"; border: #888888 solid; border-width: 1px 0px; border-collapse: collapse; } #usertable, #nonusertable1 { border-collapse: collapse; width: "100%"; } #usertable th, #nonusertable1 th { background-color: "black"; text-align: left; color: "white"; height: 25px; cursor: "hand"; border: #888888 solid; border-width: 1px 0px; border-collapse: collapse; } #usertable td, #nonusertable1 td { background-color: "white"; border: #888888 solid; border-width: 1px 0px; border-collapse: collapse; } #sublayout, #sublayout1, #sublayout2, #sublayout3, #sublayout4, #sublayout5 { width: 100%; border-collapse: collapse; } #sublayout, #sublayout1, #sublayout2, #sublayout3, #sublayout4, #sublayout5 th, td { height: 23px;

} #SpiceworksGush { background-color: #FD7908; border: 2px solid black; padding: 5px; display: block; position: relative; top: 75px; left: 75px; width: 80%; } </style> </head> <script Language="VBScript"> '#============================================================================== '#============================================================================== '# SCRIPT.........: ADManagementUtility.hta '# '# DESCRIPTION....: Allows full management of AD users / groups and '# displays info surrounding other objects within AD '# '# NOTES..........: '# '# CUSTOMIZE......: '#============================================================================== '#============================================================================== '#============================================================================== Dim Dim Dim Dim Dim Dim Dim ort Dim strSortGroupDataList, intLastTable, strLastUserCreated Dim booOptimiseSearch, booCacheGroups, intTotalGroups Const Const Const Const Const Const Const ADS_UF_ACCOUNTDISABLE = &H02 ADS_UF_DONT_EXPIRE_PASSWD = &H10000 DOMAIN_PASSWORD_COMPLEX = &H1 SEC_IN_DAY = 86400 SEC_IN_MIN = 60 adVarChar = 200 MaxCharacters = 255 strCompany, strCountry, strOffice, strDepartment, strFaxNo strDescription, strFirstName, strSurname, strDefaultEmail strDomain, strDNSDomain, strRootOU, intMaxPwdAge, booSearched booUserSort, booFirstNameSort, booSurnameSort booTitleSort, booEmailSort, strSortUserDataList, strSortPCDataList booPCNameSort, booPCDescSort, booPCOSSort, booPCSPSort booGroupNameSort, booGroupDescSort, booGroupTypeSort, booGroupEmailS

Set objShell = CreateObject("WScript.Shell") Set UserDataList = CreateObject("ADOR.Recordset") Set PCDataList = CreateObject("ADOR.Recordset") Set GroupDataList = CreateObject("ADOR.Recordset") booSearched = 0

'#------------------------------------------------------------------------'# SUBROUTINE.....: PopulateLayout1() '# PURPOSE........: Shows AD info '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub PopulateLayout1() On Error Resume Next document.body.style.cursor = "wait" PauseScript(1) '#============================================================== ================ '# Get Domain Info '#============================================================== ================ Set objDomain = GetObject("WinNT://" & strDomain) Set objAdS = GetObject("LDAP://" & strDNSDomain) Err.Clear intLockoutThreshold = objAds.Get("lockoutThreshold") If Err.Number = 0 Then If intLockoutThreshold > 0 Then strLockoutThreshold = intLockoutThreshold & " at tempts" Else L1strLockoutThreshold.className = "redbo ld" strLockoutThreshold = "Never Lockout" End If Else L1strLockoutThreshold.className = "redbold" strLockoutThreshold = "Not Defined" Err.Clear End If Err.Clear intMaxPwdAgeSeconds = objDomain.Get("MaxPasswordAge") If Err.Number = 0 Then If intMaxPwdAgeSeconds > 0 Then intMaxPwdAge = intMaxPwdAgeSeconds / SEC_IN_DAY strMaxPwdAgeDays = intMaxPwdAge & " days" Else L1strMaxPwdAgeDays.className = "redbold" strMaxPwdAgeDays = "Never Expire" End If Else L1strMaxPwdAgeDays.className = "redbold" strMaxPwdAgeDays = "Not Defined" Err.Clear End If Err.Clear intMinPwdAgeSeconds = objDomain.Get("MinPasswordAge") If Err.Number = 0 Then If intMinPwdAgeSeconds > 0 Then intMinPwdAge = intMinPwdAgeSeconds / SEC_IN_DAY

strMinPwdAgeDays = intMinPwdAge & " days" Else L1strMinPwdAgeDays.className = "redbold" strMinPwdAgeDays = "Not Defined" End If Else L1strMinPwdAgeDays.className = "redbold" strMinPwdAgeDays = "Not Defined" Err.Clear End If Err.Clear intMinPwdLength = objAdS.Get("minPwdLength") If Err.Number = 0 Then strMinPwdLength = intMinPwdLength & " characters" Else L1strMinPwdLength.className = "redbold" strMinPwdLength = "Not Defined" Err.Clear End If Err.Clear intPwdHistoryLength = objAds.Get("pwdHistoryLength") If Err.Number = 0 Then strPwdHistoryLength = intPwdHistoryLength & " passwords" Else L1strPwdHistoryLength.className = "redbold" strPwdHistoryLength = "Not Defined" Err.Clear End If intPwdProperties = objAds.Get("pwdProperties") If (DOMAIN_PASSWORD_COMPLEX AND intPwdProperties) Then strPasswordComplex = "<span class=""greenbold"">Enabled< /span>" Else strPasswordComplex = "<span class=""redbold"">Di sabled</span>" End If intLockOutObservationWindowSeconds = objDomain.Get("LockoutObser vationInterval") If Err.Number = 0 Then intLockOutObservationWindowMinutes = intLockOutObservati onWindowSeconds / SEC_IN_MIN strLockOutObservationWindowMinutes = _ "Reset account lockout counter after " & intLockOutObser vationWindowMinutes & " minutes" Else L1strLockOutObservationWindowMinutes.className = "redbold" strLockOutObservationWindowMinutes = _ "Reset account lockout counter policy not define d" End If intLockoutDurationSeconds = objDomain.Get("AutoUnlockInterval") If intLockoutDurationSeconds <> -1 Then intLockoutDurationMinutes = intLockOutDurationSeconds /

SEC_IN_MIN strLockoutDurationMinutes = _ "The locked out account will be reset after " & intLocko utDurationMinutes & " minutes" Else L1strLockoutDurationMinutes.className = "redbold " strLockoutDurationMinutes = "Administrator must manually unlock locked accounts" End If booDisableCount = objShell.RegRead("HKCU\Software\SKB\ADManageme ntUtil\Setup\booDisableCount") If booDisableCount = 0 Then '#====================================================== ======================== '# Get AD Info '#====================================================== ======================== Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strRootOU & ">" strFilter = "(objectCategory=*)" strAttributes = "distinguishedName,sAMAccountName,whenCr eated,objectCategory" strQuery = strBase & ";" & strFilter & ";" & strAttribut es & ";subtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "There are no users in the specified OU ( " & strRootOU & "), or the OU has been entered " & _ "incorrectly. ", vbInformation, "AD Management Utility" Exit Sub End If Do Until objRecordSet.EOF On Error Resume Next strDN = objRecordSet.Fields("distinguishedName") .Value arrCategory = Split(objRecordSet.Fields("objectC ategory").Value, ",") strCategory = arrCategory(0) Select Case LCase(strCategory)

Case "cn=person" strUser = objRecordSet.Fields("s AMAccountName").Value dtmTempLastUserCreated = objReco rdSet.Fields("whenCreated").Value If dtmTempLastUserCreated > dtmL astUserCreated OR dtmLastUserCreated = "" Then dtmLastUserCreated = dtm TempLastUserCreated strLastUserCreated = str User End If If strUser <> "" AND NOT IsNull( strUser) Then intNumUsers = intNumUsers + 1 Case "cn=organizational-unit" intNumOUs = intNumOUs + 1 Case "cn=computer" intNumPCs = intNumPCs + 1 Case "cn=group" intNumGroups = intNumGroups + 1 Case "cn=domain-dns" intNumOUs = intNumOUs + 1 End Select objRecordSet.MoveNext Loop lngBiasKey = objShell.RegRead("HKLM\System\CurrentContro lSet\Control\" & _ "TimeZoneInformation\ActiveTimeBias") If (LCase(TypeName(lngBiasKey)) = "long") Then lngBias = lngBiasKey ElseIf (LCase(TypeName(lngBiasKey)) = "variant() ") Then lngBias = 0 For k = 0 To UBound(lngBiasKey) lngBias = lngBias + (lngBiasKey( k) * 256^k) Next End If dtmLastUserCreated = DateAdd("n", -lngBias, dtmLastUserC reated) L1strLastUserCreated.InnerHTML = strLastUserCreated & " (" & dtmLastUserCreated & ")" L1intNumOUs.InnerHTML = intNumOUs - 1 L1intNumUsers.InnerHTML = intNumUsers L1intNumGroups.InnerHTML = intNumGroups L1intNumPCs.InnerHTML = intNumPCs L1strLastUserCreated.Title = "View / change user info fo r '" & strLastUserCreated & "'" L1intNumOUs.Title = "" L1intNumUsers.Title = "Show a list of all users in AD" L1intNumGroups.Title = "Show a list of all groups in AD" L1intNumPCs.Title = "Show a list of all computers in AD" L1strLastUserCreated.className = "spanlink" 'L1intNumOUs.className = "" L1intNumUsers.className = "spanlink"

L1intNumGroups.className = "spanlink" L1intNumPCs.className = "spanlink" L1strLastUserCreated.onClick = ReloadLayoutUser(strLastU serCreated) L1intNumUsers.onClick = ShowTable(3) L1intNumGroups.onClick = ShowTable(2) L1intNumPCs.onClick = ShowTable(1) Else L1strLastUserCreated.InnerHTML = "n/a" L1intNumOUs.InnerHTML = "n/a" L1intNumUsers.InnerHTML = "n/a" L1intNumGroups.InnerHTML = "n/a" L1intNumPCs.InnerHTML = "n/a" L1strLastUserCreated.Title = "Not Available - ca n be changed in settings" L1intNumOUs.Title = "Not Available - can be chan ged in settings" L1intNumUsers.Title = "Not Available - can be ch anged in settings" L1intNumGroups.Title = "Not Available - can be c hanged in settings" L1intNumPCs.Title = "Not Available - can be chan ged in settings" L1strLastUserCreated.className = "" 'L1intNumOUs.className = "" L1intNumUsers.className = "" L1intNumGroups.className = "" L1intNumPCs.className = "" L1strLastUserCreated.onClick = "" L1intNumUsers.onClick = "" L1intNumGroups.onClick = "" L1intNumPCs.onClick = "" End If L1strDomain.InnerHTML = strDomain L1strDNSDomain.InnerHTML = strDNSDomain L1strLockoutThreshold.InnerHTML = strLockoutThreshold L1strMaxPwdAgeDays.InnerHTML = strMaxPwdAgeDays L1strMinPwdAgeDays.InnerHTML = strMinPwdAgeDays L1strMinPwdLength.InnerHTML = strMinPwdLength L1strPasswordComplex.InnerHTML = strPasswordComplex L1strPwdHistoryLength.InnerHTML = strPwdHistoryLength L1strLockOutObservationWindowMinutes.InnerHTML = strLockOutObser vationWindowMinutes L1strLockoutDurationMinutes.InnerHTML = strLockoutDurationMinute s document.body.style.cursor = "default" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: RefreshLayout1() '# PURPOSE........: Refresh data in AD Info menu '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub RefreshLayout1() ChangeLayout(loadingdiv)

PopulateLayout1() ChangeLayout(layout1) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ShowTable(intType) '# PURPOSE........: Action triggered on opening List or changing '# drop down box '# ARGUMENTS......: intType = type of data to show '# EXAMPLE........: ShowTable(1) '# NOTES..........: Above example will show user table '#-------------------------------------------------------------------------Sub ShowTable(intType) CloseSearch(0) booShowListMsg = objShell.RegRead("HKCU\Software\SKB\ADManagemen tUtil\Setup\booShowListMsg") If booShowListMsg = 1 AND intType <> 0 Then ShowListPrompt = MsgBox("Viewing a list of all objects w ithin your organisation could take some time. " & _ vbCrLf & vbCrLf & "Do you wish to continue?", vb Question+vbYesNo, "AD Management Utility") If ShowListPrompt = vbNo Then Exit Sub End If Select Case intType Case 0 If intLastTable <> "" Then ShowTable(intLastTable) Else ShowTable(1) End If Exit Sub Case 1 If UserTableSpan.InnerHTML = "&nbsp;" OR UserTab leSpan.InnerHTML = "" Then ShowUserTable() Else ChangeTable(UserTableSpan) End If intLastTable = 1 UserTableSpan.className = "" Case 2 If PCTableSpan.InnerHTML = "&nbsp;" OR PCTableSp an.InnerHTML = "" Then ShowPCTable() Else ChangeTable(PCTableSpan) End If intLastTable = 2 PCTableSpan.className = "" Case 3 If GroupTableSpan.InnerHTML = "&nbsp;" OR GroupT ableSpan.InnerHTML = "" Then ShowGroupTable() Else ChangeTable(GroupTableSpan) End If

intLastTable = 3 GroupTableSpan.className = "" End Select L2TypeSelect.Value = intType End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ChangeTable(strSpan) '# PURPOSE........: Changes display to show table in app '# ARGUMENTS......: strSpan = html span to show '# EXAMPLE........: ChangeTable(UserTableSpan) '# NOTES..........: '#-------------------------------------------------------------------------Sub ChangeTable(strSpan) On Error Resume Next UserTableSpan.className = "hidden" PCTableSpan.className = "hidden" GroupTableSpan.className = "hidden" ChangeLayout(Layout2) strSpan.className = "" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: RefreshTableData() '# PURPOSE........: Refresh data in current table '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub RefreshTableData() UserTableSpan.className = "hidden" PCTableSpan.className = "hidden" GroupTableSpan.className = "hidden" PauseScript(1) Select Case L2TypeSelect.Value Case 1 UserTableSpan.InnerHTML = "" Set UserDataList = CreateObject("ADOR.Recordset" ) Case 2 PCTableSpan.InnerHTML = "" Set PCDataList = CreateObject("ADOR.Recordset") Case 3 GroupTableSpan.InnerHTML = "" Set GroupDataList = CreateObject("ADOR.Recordset ") End Select ShowTable(0) End Sub '#------------------------------------------------------------------------'# '# '# '# SUBROUTINE.....: PURPOSE........: ARGUMENTS......: EXAMPLE........: ShowUserTable() Performs initial pull of user table from AD

'# NOTES..........: '#-------------------------------------------------------------------------Sub ShowUserTable() document.body.style.cursor = "wait" strHTML = "<table id=""usertable"">" strHTML = strHTML & " <tr>" strHTML = strHTML & " <th style=""width:15%;"" title=" Username"" onClick=""ChangeUserSortOrder(1)"">" strHTML = strHTML & " User" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:15%;"" title=" First Name"" onClick=""ChangeUserSortOrder(2)"">" strHTML = strHTML & " First Name" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:15%;"" title=" Surname"" onClick=""ChangeUserSortOrder(3)"">" strHTML = strHTML & " Surname" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:20%;"" title=" Job Title"" onClick=""ChangeUserSortOrder(4)"">" strHTML = strHTML & " Job Title" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" title=" Email Address"" onClick=""ChangeUserSortOrder(5)"">" strHTML = strHTML & " Email Address" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:5%;"">" strHTML = strHTML & " &nbsp;" strHTML = strHTML & " </th>" strHTML = strHTML & " </tr>" Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strRootOU & ">" strFilter = "(&(objectclass=user)(objectcategory=person))" strAttributes = "sAMAccountName,givenName,sn,title,mail" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False objCommand.Properties("Sort on") = "sAMAccountName" Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "There are no users in the specified OU (" & strD NSDomain & "), or the OU has been entered " & _ "incorrectly. ", vbInformation, "AD Management Utility" Exit Sub End If

"Sort by

"Sort by

"Sort by

"Sort by

"Sort by

UserDataList.Fields.Append "sAMAccountName", adVarChar, MaxChara cters UserDataList.Fields.Append UserDataList.Fields.Append UserDataList.Fields.Append UserDataList.Fields.Append UserDataList.Open "givenName", adVarChar, MaxCharacters "sn", adVarChar, MaxCharacters "title", adVarChar, MaxCharacters "mail", adVarChar, MaxCharacters

Do Until objRecordSet.EOF On Error Resume Next strUser = objRecordSet.Fields("sAMAccountName").Value strFirstName = objRecordSet.Fields("givenName").Value strSurname = objRecordSet.Fields("sn").Value strTitle = objRecordSet.Fields("title").Value strEmail = objRecordSet.Fields("mail").Value If If If If IsNull(strFirstName) Then strFirstName = "" IsNull(strSurname) Then strSurname = "" IsNull(strTitle) Then strTitle = "" IsNull(strEmail) Then strEmail = ""

UserDataList.AddNew UserDataList("sAMAccountName") = strUser UserDataList("givenName") = strFirstName UserDataList("sn") = strSurname UserDataList("title") = strTitle UserDataList("mail") = strEmail UserDataList.Update If If If If strFirstName = "" Then strFirstName = "&nbsp;" strSurname = "" Then strSurname = "&nbsp;" strTitle = "" Then strTitle = "&nbsp" strEmail = "" Then strEmail = "&nbsp;"

objRecordSet.MoveNext strHTML = strHTML & "<tr>" strHTML = strHTML & "<td style=""word-break:break-al l;"">" strHTML = strHTML & "<span class=""spanlink"" style=""te xt-decoration:none;"" onClick=ReloadLayoutUser(""" & strUser & _ """) title=""Edit '" & strUser & "'"">" & strUser & "</s pan>" strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strFirstName strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strSurname strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strTitle strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" If strEmail <> "&nbsp;" Then strHTML = strHTML & "<a href=""mailto:" & strEma il & """ title=""Send email to " & _ strEmail & """>" & strEmail & "</a>"

Else strHTML = strHTML & "&nbsp;" End If strHTML = strHTML & "</td>" strHTML = strHTML & "<td class=""redbold"" style=""t ext-align:center;cursor:hand;"" " & _ "onClick=ShowL3UserInfo(""" & strUser & """) title=""Vie w User Account Control for '" & strUser & "'"">" strHTML = strHTML & "C" strHTML = strHTML & "</td>" strHTML = strHTML & "</tr>" Loop strHTML = strHTML & "</table>" UserTableSpan.InnerHTML = strHTML intLastTable = 1 document.body.style.cursor = "default" ChangeTable(UserTableSpan) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ShowPCTable() '# PURPOSE........: Performs initial pull of PC table from AD '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowPCTable() document.body.style.cursor = "wait" strHTML = "<table id=""nonusertable"">" strHTML = strHTML & " <tr>" strHTML = strHTML & " <th style=""width:15%;"" title=" Computer Name"" onClick=""ChangePCSortOrder(1)"">" strHTML = strHTML & " Name" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" title=" Description"" onClick=""ChangePCSortOrder(2)"">" strHTML = strHTML & " Description" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" title=" OS"" onClick=""ChangePCSortOrder(3)"">" strHTML = strHTML & " Operating System" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:25%;"" title=" Service Pack"" onClick=""ChangePCSortOrder(4)"">" strHTML = strHTML & " Service Pack" strHTML = strHTML & " </th>" strHTML = strHTML & " </tr>" Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strRootOU & ">"

"Sort by

"Sort by

"Sort by

"Sort by

strFilter = "(objectcategory=computer)" strAttributes = "name,description,operatingSystem,operatingSyste mServicePack" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False objCommand.Properties("Sort on") = "name" Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "There are no computers in the specified OU (" & strDNSDomain & "), or the OU has been entered " & _ "incorrectly. ", vbInformation, "AD Management Utility" Exit Sub End If PCDataList.Fields.Append "name", adVarChar, MaxCharacters PCDataList.Fields.Append "description", adVarChar, MaxCharacters PCDataList.Fields.Append "operatingSystem", adVarChar, MaxCharac ters PCDataList.Fields.Append "operatingSystemServicePack", adVarChar , MaxCharacters PCDataList.Open Do Until objRecordSet.EOF On Error Resume Next strPCName = objRecordSet.Fields("name").Value strOS = objRecordSet.Fields("operatingSystem").Value strServicePack = objRecordSet.Fields("operatingSystemSer vicePack").Value strPCTmpDesc = objRecordSet.Fields("description").Value If IsArray(strPCTmpDesc) Then For x = 0 To UBound(strPCTmpDesc) strPCDescription = strPCDescription & " " & strPCTmpDesc(x) Next End If If IsNull(strPCName) Then strPCName = "" If IsNull(strPCDescription) Then strPCDescription = "" If IsNull(strOS) Then strOS = "" If IsNull(strServicePack) OR _ InStr(LCase(strServicePack), "service") = 0 Then strServ icePack = "" PCDataList.AddNew PCDataList("name") = strPCName PCDataList("description") = strPCDescription PCDataList("operatingSystem") = strOS PCDataList("operatingSystemServicePack") = strServicePac k PCDataList.Update

If strPCName = "" Then strPCName = "&nbsp;" If strPCDescription = "" Then strPCDescription = "&nbsp; " If strOS = "" Then strOS = "&nbsp" If strServicePack = "" Then strServicePack = "&nbsp;" objRecordSet.MoveNext strHTML = strHTML & "<tr>" strHTML = strHTML & "<td style=""word-break:break-al l;"">" strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML Loop strHTML = strHTML & "</table>" PCTableSpan.InnerHTML = strHTML intLastTable = 2 document.body.style.cursor = "default" ChangeTable(PCTableSpan) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ShowGroupTable() '# PURPOSE........: Performs initial pull of group table from AD '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowGroupTable() document.body.style.cursor = "wait" strHTML = "<table id=""nonusertable1"">" strHTML = strHTML & " <tr>" strHTML = strHTML & " <th style=""width:20%;"" title=" "Sort by Group Name"" onClick=""ChangeGroupSortOrder(1)"">" strHTML = strHTML & " Name" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" title=" "Sort by Description"" onClick=""ChangeGroupSortOrder(2)"">" strHTML = strHTML & " Description" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:20%;"" title=" "Sort by Group Type"" onClick=""ChangeGroupSortOrder(3)"">" strHTML = strHTML & " Group Type" strHTML = strHTML & " </th>" = = = = = = = = = = = = strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML & & & & & & & & & & & & strPCName "</td>" "<td>" strPCDescription "</td>" "<td>" strOS "</td>" "<td>" strServicePack "</td>" "</tr>"

strPCDescription = ""

strHTML = strHTML & " <th style=""width:30%;"" title=" "Sort by Email Address"" onClick=""ChangeGroupSortOrder(4)"">" strHTML = strHTML & " Email Address" strHTML = strHTML & " </th>" strHTML = strHTML & " </tr>" Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strRootOU & ">" strFilter = "(objectcategory=group)" strAttributes = "name,description,groupType,mail,distinguishedNa me" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False objCommand.Properties("Sort on") = "name" Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "There are no groups in the specified OU (" & str DNSDomain & "), or the OU has been entered " & _ "incorrectly. ", vbInformation, "AD Management Utility" Exit Sub End If GroupDataList.Fields.Append "name", adVarChar, MaxCharacters GroupDataList.Fields.Append "description", adVarChar, MaxCharact ers GroupDataList.Fields.Append "groupType", adVarChar, MaxCharacter s GroupDataList.Fields.Append "security", adVarChar, MaxCharacters GroupDataList.Fields.Append "mail", adVarChar, MaxCharacters GroupDataList.Fields.Append "distinguishedName", adVarChar, MaxC haracters GroupDataList.Open Do Until objRecordSet.EOF On Error Resume Next strGroupDN = objRecordSet.Fields("distinguishedName").Va lue strGroupName = objRecordSet.Fields("name").Value intGroupType = objRecordSet.Fields("groupType").Value strGroupEmail = objRecordSet.Fields("mail").Value strGroupTmpDesc = objRecordSet.Fields("description").Val ue If IsArray(strGroupTmpDesc) Then For x = 0 To UBound(strGroupTmpDesc) strGroupDescription = strGroupDescriptio

n & " " & strGroupTmpDesc(x) Next End If Select Case intGroupType Case 2 strGroupType = "Global" strSecurity = "No" Case 4 strGroupType = "Domain Local" strSecurity = "No" Case 8 strGroupType = "Universal" strSecurity = "No" Case -2147483646 strGroupType = "Global Security" strSecurity = "Yes" Case -2147483644 strGroupType = "Local Security" strSecurity = "Yes" Case -2147483640 strGroupType = "Universal Security" strSecurity = "Yes" Case -2147483643 strGroupType = "Universal Security" strSecurity = "Yes" Case Else strGroupType = "Unknown" strSecurity = "No" End Select If IsNull(strGroupName) Then strGroupName = "" If IsNull(strGroupEmail) Then strGroupEmail = "" If IsNull(strGroupDescription) Then strGroupDescription = "" GroupDataList.AddNew GroupDataList("distinguishedName") = strGroupDN GroupDataList("name") = strGroupName GroupDataList("groupType") = strGroupType GroupDataList("security") = strSecurity GroupDataList("mail") = strGroupEmail GroupDataList("description") = strGroupDescription GroupDataList.Update If strGroupName = "" Then strGroupName = "&nbsp;" If strGroupDescription = "" Then strGroupDescription = " &nbsp;" If strGroupType = "" Then strGroupType = "&nbsp" If strGroupEmail = "" Then strGroupEmail = "&nbsp;" strGroupDN = Replace(strGroupDN, "'", "{}") strGroupDN = Replace(strGroupDN, Chr(34), "||") objRecordSet.MoveNext strHTML = strHTML & "<tr>" strHTML = strHTML & "<td style=""word-break:break-al l;"">" strHTML = strHTML & "<span class=""spanlink"" style=""te

xt-decoration:none;"" onClick=""GetGroupMembers('" & _ strGroupDN & "')"" title=""Edit '" & strGroupName & "'"" >" & strGroupName & "</span>" strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strGroupDescription strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strGroupType strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" If strGroupEmail <> "&nbsp;" Then strHTML = strHTML & "<a href=""mailto:" & strGro upEmail & """ title=""Send email to " & _ strGroupEmail & """>" & strGroupEmail & "</a>" Else strHTML = strHTML & "&nbsp;" End If strHTML = strHTML & "</td>" strHTML = strHTML & "</tr>" strGroupDescription = "" Loop strHTML = strHTML & "</table>" GroupTableSpan.InnerHTML = strHTML intLastTable = 3 document.body.style.cursor = "default" ChangeTable(GroupTableSpan) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: GetGroupMembers(strDN) '# PURPOSE........: Action performed on opening Group link in list '# ARGUMENTS......: strDN = Full DN of group '# EXAMPLE........: GetGroupMembers("cn=Test,ou=Groups,dc=Acme,dc=Gr oup") '# NOTES..........: '#-------------------------------------------------------------------------Sub GetGroupMembers(strDN) strDN = Replace(strDN, "{}", "'") strDN = Replace(strDN, "||", Chr(34)) ResetLayoutGroup() GroupSelect.Focus() For Each objMember In GroupSelect If InStr(LCase(objMember.Value), LCase(strDN)) > 0 Then objMember.Selected = True Next ShowMembers() End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: RetrieveUserTable()

'# PURPOSE........: Shows user table as stored in data list, also '# handles sorting of table '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub RetrieveUserTable() document.body.style.cursor = "wait" UserDataList.Sort = strSortUserDataList strHTML = "<table id=""usertable"">" strHTML = strHTML & " <tr>" strHTML = strHTML & " <th style=""width:15%;"" title=" Username"" onClick=""ChangeUserSortOrder(1)"">" strHTML = strHTML & " User" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:15%;"" title=" First Name"" onClick=""ChangeUserSortOrder(2)"">" strHTML = strHTML & " First Name" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:15%;"" title=" Surname"" onClick=""ChangeUserSortOrder(3)"">" strHTML = strHTML & " Surname" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:20%;"" title=" Job Title"" onClick=""ChangeUserSortOrder(4)"">" strHTML = strHTML & " Job Title" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" title=" Email Address"" onClick=""ChangeUserSortOrder(5)"">" strHTML = strHTML & " Email Address" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:5%;"">" strHTML = strHTML & " &nbsp;" strHTML = strHTML & " </th>" strHTML = strHTML & " </tr>" Do Until UserDataList.EOF strUser = UserDataList.Fields("sAMAccountName").Value strFirstName = UserDataList.Fields("givenName").Value strSurname = UserDataList.Fields("sn").Value strTitle = UserDataList.Fields("title").Value strEmail = UserDataList.Fields("mail").Value If If If If strFirstName = "" Then strFirstName = "&nbsp;" strSurname = "" Then strSurname = "&nbsp;" strTitle = "" Then strTitle = "&nbsp" strEmail = "" Then strEmail = "&nbsp;"

"Sort by

"Sort by

"Sort by

"Sort by

"Sort by

UserDataList.MoveNext strHTML = strHTML & "<tr>" strHTML = strHTML & "<td style=""word-break:break-al l;"">" strHTML = strHTML & "<span class=""spanlink"" style=""te xt-decoration:none;"" onClick=ReloadLayoutUser(""" & strUser & _ """) title=""Edit '" & strUser & "'"">" & strUser & "</s pan>" strHTML = strHTML & "</td>" strHTML = strHTML & "<td>"

strHTML = strHTML & strFirstName strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strSurname strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strTitle strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" If strEmail <> "&nbsp;" Then strHTML = strHTML & "<a href=""mailto:" & strEma il & """ title=""Send email to " & _ strEmail & """>" & strEmail & "</a>" Else strHTML = strHTML & "&nbsp;" End If strHTML = strHTML & "</td>" strHTML = strHTML & "<td class=""redbold"" style=""t ext-align:center;cursor:hand;"" " & _ "onClick=ShowL3UserInfo(""" & strUser & """) title=""Vie w User Account Control for '" & strUser & "'"">" strHTML = strHTML & "C" strHTML = strHTML & "</td>" strHTML = strHTML & "</tr>" Loop strHTML = strHTML & "</table>" UserTableSpan.InnerHTML = strHTML document.body.style.cursor = "default" ChangeTable(UserTableSpan) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: RetrievePCTable() '# PURPOSE........: Shows PC table as stored in data list, also '# handles sorting of table '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub RetrievePCTable() document.body.style.cursor = "wait" PCDataList.Sort = strSortPCDataList strHTML = "<table id=""nonusertable"">" strHTML = strHTML & " <tr>" strHTML = strHTML & " <th style=""width:15%;"" title=" "Sort by Computer Name"" onClick=""ChangePCSortOrder(1)"">" strHTML = strHTML & " Name" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" title=" "Sort by Description"" onClick=""ChangePCSortOrder(2)"">" strHTML = strHTML & " Description" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" title=" "Sort by OS"" onClick=""ChangePCSortOrder(3)"">" strHTML = strHTML & " Operating System" strHTML = strHTML & " </th>"

strHTML "Sort by Service Pack"" strHTML strHTML strHTML

= strHTML & " <th style=""width:25%;"" title=" onClick=""ChangePCSortOrder(4)"">" = strHTML & " Service Pack" = strHTML & " </th>" = strHTML & " </tr>"

Do Until PCDataList.EOF strPCName = PCDataList("name") strPCDescription = PCDataList("description") strOS = PCDataList("operatingSystem") strServicePack = PCDataList("operatingSystemServicePack" ) If strPCName = "" Then strPCName = "&nbsp;" If strPCDescription = "" Then strPCDescription = "&nbsp; " If strOS = "" Then strOS = "&nbsp" If strServicePack = "" Then strServicePack = "&nbsp;" PCDataList.MoveNext strHTML = strHTML & "<tr>" strHTML = strHTML & "<td style=""word-break:break-al l;"">" strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML Loop strHTML = strHTML & "</table>" PCTableSpan.InnerHTML = strHTML document.body.style.cursor = "default" ChangeTable(PCTableSpan) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: RetrieveGroupTable() '# PURPOSE........: Shows group table as stored in data list, also '# handles sorting of table '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub RetrieveGroupTable() document.body.style.cursor = "wait" GroupDataList.Sort = strSortGroupDataList strHTML = "<table id=""nonusertable1"">" strHTML = strHTML & " <tr>" = = = = = = = = = = = = strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML strHTML & & & & & & & & & & & & strPCName "</td>" "<td>" strPCDescription "</td>" "<td>" strOS "</td>" "<td>" strServicePack "</td>" "</tr>"

strHTML = strHTML & " <th style=""width:20%;"" "Sort by Group Name"" onClick=""ChangeGroupSortOrder(1)"">" strHTML = strHTML & " Name" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" "Sort by Description"" onClick=""ChangeGroupSortOrder(2)"">" strHTML = strHTML & " Description" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:20%;"" "Sort by Group Type"" onClick=""ChangeGroupSortOrder(3)"">" strHTML = strHTML & " Group Type" strHTML = strHTML & " </th>" strHTML = strHTML & " <th style=""width:30%;"" "Sort by Email Address"" onClick=""ChangeGroupSortOrder(4)"">" strHTML = strHTML & " Email Address" strHTML = strHTML & " </th>" strHTML = strHTML & " </tr>"

title="

title="

title="

title="

Do Until GroupDataList.EOF strGroupName = GroupDataList("name").Value strGroupType = GroupDataList("groupType").Value strGroupEmail = GroupDataList("mail").Value strGroupDescription = GroupDataList("description").Value If strGroupName = "" Then strGroupName = "&nbsp;" If strGroupDescription = "" Then strGroupDescription = " &nbsp;" If strGroupType = "" Then strGroupType = "&nbsp" If strGroupEmail = "" Then strGroupEmail = "&nbsp;" GroupDataList.MoveNext strHTML = strHTML & "<tr>" strHTML = strHTML & "<td style=""word-break:break-al l;"">" strHTML = strHTML & "<span class=""spanlink"" style=""te xt-decoration:none;"" onClick=""GetGroupMembers('" & _ strGroupDN & "')"" title=""Edit '" & strGroupName & "'"" >" & strGroupName & "</span>" strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strGroupDescription strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" strHTML = strHTML & strGroupType strHTML = strHTML & "</td>" strHTML = strHTML & "<td>" If strGroupEmail <> "&nbsp;" Then strHTML = strHTML & "<a href=""mailto:" & strGro upEmail & """ title=""Send email to " & _ strGroupEmail & """>" & strGroupEmail & "</a>" Else strHTML = strHTML & "&nbsp;" End If strHTML = strHTML & "</td>" strHTML = strHTML & "</tr>" Loop strHTML = strHTML & "</table>" GroupTableSpan.InnerHTML = strHTML

document.body.style.cursor = "default" ChangeTable(GroupTableSpan) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ExportDetails() '# PURPOSE........: Export the required AD info '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ExportDetails() On Error Resume Next Const xlLeft = -4131 Const xlContinuous = 1 Const xlSolid = 1 Const xlThin = 2 Const xlAutomatic = -4105 Const xlCenter = -4108 Const xlLandscape = 2 Set objFSO = CreateObject("Scripting.FileSystemObject") strTemp = objShell.ExpandEnvironmentStrings("%TEMP%") strHTMLTempDir = Replace(LCase(strTemp), "c:", "file:///c:") strHTMLTempDir = Replace(strHTMLTempDir, "\", "/") Select Case L2TypeSelect.Value Case 1 intTotal = L1intNumUsers.InnerHTML strType = "User" If UserExportOptionsSpan.className = "hidden" Th en UserExportOptionsSpan.className = "" L2TypeSelect.Disabled = True ExportSelect.Disabled = True Exit Sub Else UserExportOptionsSpan.className = "hidden" L2TypeSelect.Disabled = False ExportSelect.Disabled = False End If Case 2 intTotal = L1intNumPCs.InnerHTML strType = "Computer" Case 3 intTotal = L1intNumGroups.InnerHTML strType = "Group" End Select Select Case ExportSelect.Value Case 1 Set objFile = objFSO.CreateTextFile(strTemp & "\ " & strType & "List.csv",True) objFile.WriteLine strType & " List" objFile.WriteLine "" objFile.WriteLine "Total " & strType & "s: " & i

ntTotal objFile.WriteLine "" Select Case L2TypeSelect.Value Case 2 objFile.WriteLine "Computer Name ,Description,Operating System,Service Pack" Case 3 objFile.WriteLine "Group Name,De scription,Type,Security Group,Email" End Select Case 2 strExcelPath = objShell.RegRead("HKLM\SOFTWARE\M icrosoft\Windows\CurrentVersion\App Paths\excel.exe\") If strExcelPath = "" Then MsgBox "Unable to export. Excel does not appear to be installed.", vbExclamation, "AD Management Utility" Exit Sub End If Set objExcel = CreateObject("Excel.Application") objExcel.Visible = False Set objWorkBook = objExcel.WorkBooks.Add Set objWorksheet = objWorkbook.Worksheets(1) objExcel.DisplayAlerts = False For i = 1 to 3 objWorkbook.Worksheets(2).Delete Next objExcel.DisplayAlerts = True objWorksheet.Name = strType & " List" objWorkSheet.Cells(1, 1) = strType & " List" objWorkSheet.Cells(3, 1) = "Total " & strType & "s: " & intTotal intStartRow = 6 Select Case L2TypeSelect.Value Case 1 objWorkSheet.Cells(5, 1) = "User name" Case 2 objWorkSheet.Cells(5, 1) = "Comp uter Name" objWorkSheet.Cells(5, 2) = "Desc ription" objWorkSheet.Cells(5, 3) = "Oper ating System" objWorkSheet.Cells(5, 4) = "Serv ice Pack" Case 3 objFile.WriteLine "Group Name,De scription,Type,Security Group,Email" objWorkSheet.Cells(5, 1) = "Grou p Name" objWorkSheet.Cells(5, 2) = "Desc ription" objWorkSheet.Cells(5, 3) = "Type " objWorkSheet.Cells(5, 4) = "Secu

rity Group" objWorkSheet.Cells(5, 5) = "Emai l" End Select Case 3 Set objFile = objFSO.CreateTextFile(strTemp & "\ " & strType & "List.htm",True) objFile.WriteLine "<style type=""text/css"">" objFile.WriteLine "body{background-color:#CEF0FF ;font-family: ""trebuchet ms"", calibri, helvetica, sans-serif, ""Times New Roma n"";}" objFile.WriteLine "table.export{border-width:1px ;border-spacing:1px;border-style:solid;border-color:gray;border-collapse:collaps e;}" objFile.WriteLine "table.export th{border-width: 1px;padding:1px;border-style:solid;border-color:gray;padding:2px 7px 2px 7px;}" objFile.WriteLine "table.export td{border-width: 1px;padding:1px;border-style:dotted;border-color:gray;padding:2px 7px 2px 7px;}" objFile.WriteLine ".backtotop a {font-size:0.9em ;}" objFile.WriteLine "</style>" objFile.WriteLine "<div style=""font-weight:bold ;""><a name =""top"">" & strType & " List</a><p>" objFile.WriteLine "Total " & strType & "s: " & i ntTotal & "<p></div>" objFile.WriteLine "<table class=""export"">" Select Case L2TypeSelect.Value Case 2 objFile.WriteLine " objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " Computer Name" objFile.WriteLine " </th>" objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " Description" objFile.WriteLine " </th>" objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " Operating System" objFile.WriteLine " </th>" objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " Service Pack" objFile.WriteLine " </th>" objFile.WriteLine " Case 3 objFile.WriteLine " objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " <tr>" </tr>"

<tr>"

Group Name" objFile.WriteLine " </th>" objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " Description" objFile.WriteLine " </th>" objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " Type" objFile.WriteLine " </th>" objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " Security Group" objFile.WriteLine " </th>" objFile.WriteLine " <th style=""text-align:left;"">" objFile.WriteLine " Email" objFile.WriteLine " </th>" objFile.WriteLine " End Select End Select Select Case L2TypeSelect.Value Case 1 Set objConnection = CreateObject("ADODB.Connecti on") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strRootOU & ">" strFilter = "(&(objectclass=user)(objectcategory =person))" strAttributes = "sAMAccountName,displayName,give nName,sn,title," & _ "telephoneNumber,mobile,facsimileTelepho neNumber,mail,description," & _ "company,streetAddress,l,st,postalCode,c o,physicalDeliveryOfficeName," & _ "department,distinguishedName" strQuery = strBase & ";" & strFilter & ";" & str Attributes & ";subtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False objCommand.Properties("Sort on") = "sAMAccountNa </tr>"

me" Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "There are no users in the specif ied OU (" & strDNSDomain & "), or the OU has been entered " & _ "incorrectly. ", vbInformation, "AD Man agement Utility" Exit Sub End If Do Until objRecordSet.EOF On Error Resume Next strDNX = objRecordSet.Fields("distinguis hedName").Value strUserX = objRecordSet.Fields("sAMAccou ntName").Value strDispNameX = objRecordSet.Fields("disp layName").Value strFirstNameX = objRecordSet.Fields("giv enName").Value strSurnameX = objRecordSet.Fields("sn"). Value strTitleX = objRecordSet.Fields("title") .Value strTelephoneNumberX = objRecordSet.Field s("telephoneNumber").Value strMobileX = objRecordSet.Fields("mobile ").Value strFaxNoX = objRecordSet.Fields("facsimi leTelephoneNumber").Value strEmailX = objRecordSet.Fields("mail"). Value strCompanyX = objRecordSet.Fields("compa ny").Value strStreetAddressX = objRecordSet.Fields( "streetAddress").Value strCityX = objRecordSet.Fields("l").Valu e strCountyX = objRecordSet.Fields("st").V alue strPostcodeX = objRecordSet.Fields("post alCode").Value strCountryX = objRecordSet.Fields("co"). Value strOfficeX = objRecordSet.Fields("physic alDeliveryOfficeName").Value strDepartmentX = objRecordSet.Fields("de partment").Value If UserExportForm.cbxDescriptionX.Checke d Then Set objUser = GetObject("LDAP:// " & strDNX) strDescriptionX = objUser.Descri ption End If If ExportSelect.Value = 1 Then

strDispNameX = EncodeCsv(strDisp NameX) strFirstNameX = EncodeCsv(strFir stNameX) strSurnameX = EncodeCsv(strSurna meX) strTitleX = EncodeCsv(strTitleX) strTelephoneNumberX = EncodeCsv( strTelephoneNumberX) strMobileX = EncodeCsv(strMobile X) strFaxNoX = EncodeCsv(strFaxNoX) strEmailX = EncodeCsv(strEmailX) strDescriptionX = EncodeCsv(strD escriptionX) strCompanyX = EncodeCsv(strCompa nyX) strStreetAddressX = EncodeCsv(st rStreetAddressX) strCityX = EncodeCsv(strCityX) strCountyX = EncodeCsv(strCounty X) strPostcodeX = EncodeCsv(strPost codeX) strCountryX = EncodeCsv(strCount ryX) strOfficeX = EncodeCsv(strOffice X) strDepartmentX = EncodeCsv(strDe partmentX) strDNX = EncodeCsv(strDNX) End If UserExportForm.cbxDispNameX.Value = "Dis play Name,||" & strDispNameX UserExportForm.cbxFirstNameX.Value = "Fi rst Name,||" & strFirstNameX UserExportForm.cbxSurnameX.Value = "Surn ame,||" & strSurnameX UserExportForm.cbxTitleX.Value = "Title, ||" & strTitleX UserExportForm.cbxTelephoneNumberX.Value = "Telephone,||" & strTelephoneNumberX UserExportForm.cbxMobileX.Value = "Mobil e,||" & strMobileX UserExportForm.cbxFaxNoX.Value = "Fax No ,||" & strFaxNoX UserExportForm.cbxEmailX.Value = "Email, ||" & strEmailX UserExportForm.cbxDescriptionX.Value = " Description,||" & strDescriptionX UserExportForm.cbxCompanyX.Value = "Comp any,||" & strCompanyX UserExportForm.cbxStreetAddressX.Value = "Street Address,||" & strStreetAddressX UserExportForm.cbxCityX.Value = "City,|| " & strCityX UserExportForm.cbxCountyX.Value = "Count y,||" & strCountyX UserExportForm.cbxPostcodeX.Value = "Pos

tcode,||" & strPostcodeX UserExportForm.cbxCountryX.Value = "Coun try,||" & strCountryX UserExportForm.cbxOfficeX.Value = "Offic e,||" & strOfficeX UserExportForm.cbxDepartmentX.Value = "D epartment,||" & strDepartmentX UserExportForm.cbxDNX.Value = "DN,||" & strDNX objRecordSet.MoveNext Select Case ExportSelect.Value Case 1 strCsvUserHead = "Userna me," strCSV = strCSV & strUse rX & "," For Each Checkbox In Use rExportForm If Checkbox.Chec ked = True AND Checkbox.Disabled = False Then arrValue = Split(Checkbox.Value, "||") strLabel = arrValue(0) strData = arrValue(1) If strLa bel <> "Done" Then strData = strData & "," strCsvUserHead = strCsvUserHead & strLabel End If Else str Data = "" End If strCSV = strCSV & strData strData = "" Next strCSV = strCSV & vbCrLf Case 2 j = 2 objWorkSheet.Cells(intSt artRow, 1) = strUserX For Each Checkbox In Use rExportForm If Checkbox.Chec ked = True AND Checkbox.Disabled = False Then arrValue = Split(Checkbox.Value, ",||") strLabel = arrValue(0) strData = arrValue(1)

If strLa bel <> "Done" Then objWorkSheet.Cells(5, j) = strLabel objWorkSheet.Cells(intStartRow, j) = strData j = j + 1 End If End If strCSV = strCSV & strData strData = "" Next intStartRow = intStartRo w + 1 Case 3 strHTMLUserHead = "<tr>< th style=""text-align:left;"">Username</th>" strHTML = strHTML & "<tr ><td>" & strUserX & "</td>" For Each Checkbox In Use rExportForm If Checkbox.Chec ked = True AND Checkbox.Disabled = False Then arrValue = Split(Checkbox.Value, ",||") strLabel = arrValue(0) strData = arrValue(1) If strLa bel <> "Done" Then If strLabel = "Email" AND InStr(strData, "@") > 0 Then strData = "<td><a href=""mailto:" & strData & """ title=""Send email to " & _ strData & """>" & strData & "</a></td>" Else strData = "<td>" & strData & "</td>" End If strHTMLUserHead = strHTMLUserHead & _ "<th style=""text-align:left;"">" & strLabel & "</th>" End If Else str Data = "" End If strHTML = strHTM L & strData strData = "" Next strHTMLUserHead = strHTM LUserHead & "</tr>"

strHTML = strHTML & "</t r>" End Select Loop Case 2 PCDataList.Sort = "name ASC" Do Until PCDataList.EOF strPCName = PCDataList.Fields("name").Va lue strOS = PCDataList.Fields("operatingSyst em").Value strServicePack = PCDataList.Fields("oper atingSystemServicePack").Value strPCDescription = PCDataList.Fields("de scription").Value Select Case ExportSelect.Value Case 1 strPCDescription = Repla ce(strPCDescription, ",", ".") strCSV = strCSV & strPCN ame & "," & _ strPCDescription & "," & strOS & "," & _ strServicePack & vbCrLf Case 2 objWorkSheet.Cells(intSt artRow, 1) = strPCName objWorkSheet.Cells(intSt artRow, 2) = strPCDescription objWorkSheet.Cells(intSt artRow, 3) = strOS objWorkSheet.Cells(intSt artRow, 4) = strServicePack intStartRow = intStartRo w + 1 Case 3 objFile.WriteLine " <tr>" objFile.WriteLine " <td>" objFile.WriteLine " " & strPCName objFile.WriteLine " </td>" objFile.WriteLine " <td>" objFile.WriteLine " " & strPCDescription objFile.WriteLine " </td>" objFile.WriteLine " <td>" objFile.WriteLine " " & strOS objFile.WriteLine " </td>" objFile.WriteLine " <td>"

objFile.WriteLine " " & strServicePack objFile.WriteLine " </td>" objFile.WriteLine " </tr>" End Select PCDataList.moveNext Loop Case 3 GroupDataList.Sort = "name ASC" Do Until GroupDataList.EOF strGroupName = GroupDataList.Fields("nam e").Value strGroupType = GroupDataList.Fields("gro upType").Value strSecurity = GroupDataList.Fields("secu rity").Value strGroupEmail = GroupDataList.Fields("ma il").Value strGroupDescription = GroupDataList.Fiel ds("description").Value If IsNull(strGroupName) Then strGroupNam e = "" If IsNull(strGroupEmail) Then strGroupEm ail = "" If IsNull(strGroupDescription) Then strG roupDescription = "" Select Case ExportSelect.Value Case 1 strGroupDescription = Re place(strGroupDescription, ",", ".") strCSV = strCSV & strGro upName & "," & _ strGroupDescription & ", " & strGroupType & "," & _ strSecurity & "," & strG roupEmail & vbCrLf Case 2 objWorkSheet.Cells(intSt artRow, 1) = strGroupName objWorkSheet.Cells(intSt artRow, 2) = strGroupDescription objWorkSheet.Cells(intSt artRow, 3) = strGroupType objWorkSheet.Cells(intSt artRow, 4) = strSecurity objWorkSheet.Cells(intSt artRow, 5) = strGroupEmail intStartRow = intStartRo w + 1 Case 3 objFile.WriteLine " <tr>" objFile.WriteLine " <td>"

objFile.WriteLine " " & strGroupName objFile.WriteLine " </td>" objFile.WriteLine " <td>" objFile.WriteLine " " & strGroupDescription objFile.WriteLine " </td>" objFile.WriteLine " <td>" objFile.WriteLine " " & strGroupType objFile.WriteLine " </td>" objFile.WriteLine " <td>" objFile.WriteLine " " & strSecurity objFile.WriteLine " </td>" objFile.WriteLine " <td>" objFile.WriteLine " <a href=""mailto:" & strGroupEmail & """ title=""Send email to " & _ strGroupEmail & """>" & strGroupEmail & "</a>" objFile.WriteLine " </td>" objFile.WriteLine " </tr>" End Select GroupDataList.moveNext Loop End Select Select Case ExportSelect.Value Case 1 objFile.WriteLine strCsvUserHead objFile.WriteLine strCSV objFile.Close Set objFile = Nothing objShell.Run strTemp & "\" & strType & "List.csv " Case 2 objWorksheet.Range("A6").Select objExcel.ActiveWindow.FreezePanes = "True" objWorksheet.Range("A1").Select objWorkSheet.Columns("A:Z").EntireColumn.AutoFit Select Case L2TypeSelect.Value Case 1 Set objRangeH = objWorkSheet.Ran ge("A5:" & Chr(j+63) & "5") Set objRange2 = objWorkSheet.Ran ge("A5:" & Chr(j+63) & intStartRow - 1) Set objRange3 = objWorkSheet.Ran ge("D:D")

With objRange3 .ColumnWidth = 35 .WrapText = True .EntireRow.Autofit End With Case 2 Set objRangeH = objWorkSheet.Ran ge("A5:D5") Set objRange2 = objWorkSheet.Ran ge("A5:D" & intStartRow - 1) Set objRange3 = objWorkSheet.Ran ge("B:B") Set objRange4 = objWorkSheet.Ran ge("D:D") With objRange3 .ColumnWidth = 35 .WrapText = True .EntireRow.Autofit End With objRange4.ColumnWidth = "14.43" Case 3 Set objRangeH = objWorkSheet.Ran ge("A5:E5") Set objRange2 = objWorkSheet.Ran ge("A5:E" & intStartRow - 1) Set objRange3 = objWorkSheet.Ran ge("B:B") Set objRange4 = objWorkSheet.Ran ge("D:D") With objRange3 .ColumnWidth = 35 .WrapText = True .EntireRow.Autofit End With With objRange4 .ColumnWidth = 9.86 .WrapText = True .EntireRow.Autofit .HorizontalAlignment = x lCenter End With End Select Set objRange = objWorkSheet.Range("A1:Z5") Set objRange1 = objWorkSheet.Range("A:A") With objRangeH .WrapText = True .AutoFilter .Interior.ColorIndex = 15 .Interior.Pattern = xlSolid .RowHeight = 25.5 End With objRange.Font.Bold = True objRange1.HorizontalAlignment = xlLeft

With objRange2 .Borders.LineStyle = xlContinuous .Borders.Weight = xlThin .Borders.ColorIndex = xlAutomatic End With With objExcel.ActiveSheet.PageSetup .PrintTitleRows = "$5:$5" .Orientation = xlLandscape .PrintArea = "" .FitToPagesWide = 1 .FitToPagesTall = False .Zoom = False End With objExcel.DisplayAlerts = False objExcel.ActiveWorkbook.SaveAs(strTemp & "\" & s trType & "List.xls") objExcel.Visible = True Set objExcel = Nothing Case 3 objFile.WriteLine strHTMLUserHead objFile.WriteLine strHTML objFile.WriteLine "</table>" objFile.WriteLine "<p class=""backtotop""><a hre f=""" & strHTMLTempDir & "/" & strType & "List.htm#top"">[..back to top..]</a></ p>" objFile.Close Set objFile = Nothing objShell.Run strTemp & "\" & strType & "List.htm " End Select ExportSelect.Value = 0 For Each checkbox In UserExportForm If checkbox.Disabled = False Then checkbox.Checked = False End If Next End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: CheckUserExport(booCheck) '# PURPOSE........: Checks / unchecks export checkboxes '# ARGUMENTS......: booCheck = boolean value for whether to check '# EXAMPLE........: CheckUserExport(1) '# NOTES..........: Above example would check boxes '#-------------------------------------------------------------------------Sub CheckUserExport(booCheck) For Each checkbox In UserExportForm If booCheck = 1 Then checkbox.Checked = True Else If checkbox.Disabled = False Then checkbox.Checked = False End If End If Next

End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: CloseExportScreen() '# PURPOSE........: Closes Export box '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub CloseExportScreen() L2TypeSelect.Disabled = False ExportSelect.Disabled = False CheckUserExport(0) ExportSelect.Value = 0 UserExportOptionsSpan.className = "hidden" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: '# ARGUMENTS......: d '# EXAMPLE........: ChangeUserSortOrder(1) '# NOTES..........: '#-------------------------------------------------------------------------Sub ChangeUserSortOrder(intChoice) Select Case intChoice Case 1 If booUserSort = 1 Then strSortUserDataList = "sAMAccountName AS C" ResetSortOrders(1) booUserSort = 2 Else strSortUserDataList = "sAMAccoun tName DESC" ResetSortOrders(1) End If Case 2 If booFirstNameSort = 1 Then strSortUserDataList = "givenName ASC" ResetSortOrders(1) booFirstNameSort = 2 Else strSortUserDataList = "givenName DESC" ResetSortOrders(1) End If Case 3 If booSurnameSort = 1 Then strSortUserDataList = "sn ASC" ResetSortOrders(1) booSurnameSort = 2 Else strSortUserDataList = "sn DESC" ResetSortOrders(1) End If Case 4 ChangeUserSortOrder(intChoice) Changes the sort order on clicking column header intChoice = number representing chosen sort fiel

If booTitleSort = 1 Then strSortUserDataList = "title ASC" ResetSortOrders(1) booTitleSort = 2 Else strSortUserDataList = "title DES C" ResetSortOrders(1) End If Case 5 If booEmailSort = 1 Then strSortUserDataList = "mail ASC" ResetSortOrders(1) booEmailSort = 2 Else strSortUserDataList = "mail DESC " ResetSortOrders(1) End If End Select RetrieveUserTable() End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: '# ARGUMENTS......: d '# EXAMPLE........: ChangePCSortOrder(1) '# NOTES..........: '#-------------------------------------------------------------------------Sub ChangePCSortOrder(intChoice) Select Case intChoice Case 1 If booPCNameSort = 1 Then strSortPCDataList = "name ASC" ResetSortOrders(2) booPCNameSort = 2 Else strSortPCDataList = "name DESC" ResetSortOrders(2) End If Case 2 If booPCDescSort = 1 Then strSortPCDataList = "description ASC" ResetSortOrders(2) booPCDescSort = 2 Else strSortPCDataList = "description DESC" ResetSortOrders(2) End If Case 3 If booPCOSSort = 1 Then strSortPCDataList = "operatingSystem ASC " ResetSortOrders(2) booPCOSSort = 2 Else ChangePCSortOrder(intChoice) Changes the sort order on clicking column header intChoice = number representing chosen sort fiel

strSortPCDataList = "operatingSy stem DESC" ResetSortOrders(2) End If Case 4 If booPCSPSort = 1 Then strSortPCDataList = "operatingSystemServ icePack ASC" ResetSortOrders(2) booPCSPSort = 2 Else strSortPCDataList = "operatingSy stemServicePack DESC" ResetSortOrders(2) End If End Select RetrievePCTable() End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: '# ARGUMENTS......: d '# EXAMPLE........: ChangeGroupSortOrder(1) '# NOTES..........: '#-------------------------------------------------------------------------Sub ChangeGroupSortOrder(intChoice) Select Case intChoice Case 1 If booGroupNameSort = 1 Then strSortGroupDataList = "name ASC" ResetSortOrders(3) booGroupNameSort = 2 Else strSortGroupDataList = "name DES C" ResetSortOrders(3) End If Case 2 If booGroupDescSort = 1 Then strSortGroupDataList = "description ASC" ResetSortOrders(3) booGroupDescSort = 2 Else strSortGroupDataList = "descript ion DESC" ResetSortOrders(3) End If Case 3 If booGroupTypeSort = 1 Then strSortGroupDataList = "groupType ASC" ResetSortOrders(3) booGroupTypeSort = 2 Else strSortGroupDataList = "groupTyp e DESC" ResetSortOrders(3) End If ChangeGroupSortOrder(intChoice) Changes the sort order on clicking column header intChoice = number representing chosen sort fiel

Case 4 If booGroupEmailSort = 1 Then strSortGroupDataList = "mail ASC" ResetSortOrders(3) booGroupEmailSort = 2 Else strSortGroupDataList = "mail DES C" ResetSortOrders(3) End If End Select RetrieveGroupTable() End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ResetSortOrders(intChoice) '# PURPOSE........: Resets the sort order flags to default '# ARGUMENTS......: intChoice = table orders to reset '# EXAMPLE........: ResetSortOrders(1) '# NOTES..........: '#-------------------------------------------------------------------------Sub ResetSortOrders(intChoice) Select Case intChoice Case 1 booUserSort = 1 booFirstNameSort = 1 booSurnameSort = 1 booTitleSort = 1 booEmailSort = 1 Case 2 booPCNameSort = 1 booPCDescSort = 1 booPCOSSort = 1 booPCSPSort = 1 Case 3 booGroupNameSort = 1 booGroupDescSort = 1 booGroupTypeSort = 1 booGroupEmailSort = 1 End Select End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ShowUserInfo(strUser) '# PURPOSE........: Performs search in AD for specified user and '# displays current info '# ARGUMENTS......: strUser = user to be searched '# EXAMPLE........: ShowUserInfo(johsmi) '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowUserInfo(strUser) strCompany = "" strCountry = "" strOffice = "" strDescription = "" strFirstName = "" strSurname = "" strDepartment = ""

LUOtherSelect.Value = 0 ResetDelegates() If strUser <> "" Then txtLUUsername.Value = strUser If strUser = "" OR (txtLUUsername.Value = "Username" _ AND txtLUUsername.style.color = "#888888") Then ChangeLayout(LayoutUser) ResetLayoutUser() Exit Sub End If strUser = Trim(strUser) Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory,proxyAddresses , publicDelegatesBL, publicDelegates" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False On Error Resume Next Set objRecordset = objCommand.Execute booOptimiseSearch = objShell.RegRead("HKCU\Software\SKB\ADManage mentUtil\Setup\booOptimiseSearch") If booOptimiseSearch = 0 Then If objRecordset.EOF = True Then UnknownUserSearch strUser, 1 Exit Sub End If Else If booSearched = 0 Then UnknownUserSearch strUser, 1 Exit Sub End If booSearched = 0 End If Set objOption = Document.createElement("OPTION") objOption.Text = "Custom..." objOption.Value = 0 objOption.Title = "Enter a custom email address" EmailSelect.Add(objOption)

Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedName").Val ue arrProxyAddresses = objRecordSet.Fields("proxyAddresses" ).Value If IsArray(objRecordSet.Fields("proxyAddresses")) Then For Each objItem in arrProxyAddresses If Left(LCase(objItem), 5) = "smtp:" Th en objItem = Replace(LCase(objItem) , "smtp:", "") Set objOption = Document.createE lement("OPTION") objOption.Text = objItem objOption.Value = objItem objOption.Title = objItem EmailSelect.Add(objOption) End If Next End If arrPublicDelegatesBL = objRecordSet.Fields("publicDelega tesBL").Value If IsArray(objRecordSet.Fields("publicDelegatesBL")) The n For Each objItem in arrPublicDelegatesBL strMsgPublicDelegatesBL = strMsgPublicDe legatesBL & objItem & vbCrLf Next End If arrPublicDelegates = objRecordSet.Fields("publicDelegate s").Value If IsArray(objRecordSet.Fields("publicDelegates")) Then For Each objItem in arrPublicDelegates strMsgPublicDelegates = strMsgPublicDele gates & objItem & vbCrLf Next End If objRecordset.MoveNext Loop objRecordset.Close Set objUser = GetObject("LDAP://" & strUserDN) strDispName = objUser.Get("displayName") strStreetAddress = objUser.Get("streetAddress") strPOBOX = objUser.Get("postOfficeBox") strCity = objUser.Get("l") strPostcode = objUser.Get("postalCode") strTelephoneNumber = objUser.Get("telephoneNumber") strMobile = objUser.Get("mobile") strFaxNo = objUser.Get("facsimileTelephoneNumber") strTitle = objUser.Get("title") strOffice = objUser.Get("physicalDeliveryOfficeName") strCounty = objUser.Get("st") strEmail = objUser.Get("mail") strCompany = objUser.Get("company")

strCountry = objUser.Get("co") strDepartment = objUser.Get("department") strDNTitle = objUser.Get("distinguishedName") strDN = Replace(strDNTitle, ",", ", ") strDescription = objUser.Get("description") strFirstName = objUser.Get("givenName") strSurname = objUser.Get("sn") For Each objOption In EmailSelect.Options If LCase(objOption.Value) = LCase(strEmail) Then objOption.Selected = True strDefaultEmail = objOption.Value End If Next txtLUDispName.Value = strDispName txtLUAdd.Value = strStreetAddress txtLUCity.Value = strCity txtLUPostcode.Value = strPostcode txtLUPhN.Value = strTelephoneNumber txtLUMobile.Value = strMobile txtLUTitle.Value = strTitle txtLUCounty.Value = strCounty txtLUEmailAdd.Value = strEmail LUDNSpan.InnerHTML = strDN ViewUACSpan.InnerHTML = "View UAC" EmailLabel.InnerHTML = "Custom" DelProxyLabel.InnerHTML = "X" txtLUDispName.Title = "Display Name: " & strDispName txtLUAdd.Title = "Street Address: " & strStreetAddress txtLUCity.Title = "City: " & strCity txtLUPostcode.Title = "Postcode: " & strPostcode txtLUPhN.Title = "Telephone: " & strTelephoneNumber txtLUMobile.Title = "Mobile Phone: " & strMobile txtLUTitle.Title = "Title: " & strTitle txtLUCounty.Title = "County: " & strCounty txtLUEmailAdd.Title = "Email Address: " & strEmail EmailSelect.Title = "Select Email Address" LUDNSpan.Title = "DN: " & strDNTitle ViewUACSpan.Title = "View User Account Control for '" & strUser & "'" btnLUUpdateInf.Title = "Update account details" btnLUPrintNow.Title = "Print Window" btnLUReset.Title = "Reset Form" btnLUSearch.Title = "" EmailLabel.Title = "Enter a custom email address" DelProxyLabel.Title = "Delete selected proxy address" btnLUDelegates.Title = "Show delegates" txtLUAdd.Disabled = False txtLUCity.Disabled = False txtLUPostcode.Disabled = False txtLUPhN.Disabled = False txtLUMobile.Disabled = False txtLUTitle.Disabled = False txtLUCounty.Disabled = False txtLUDispName.Disabled = False EmailSelect.Disabled = False txtLUCustom.Disabled = False

LUOtherSelect.Disabled = False LUDNSpan.Disabled = False btnLUUpdateInf.Disabled = False btnLUPrintNow.Disabled = False btnLUReset.Disabled = False btnLUSearch.Disabled = True btnLUDelegates.Disabled = False txtLUAdd.className = "text" txtLUCity.className = "text" txtLUPostcode.className = "text" txtLUPhN.className = "text" txtLUMobile.className = "text" txtLUTitle.className = "text" txtLUCounty.className = "text" txtLUDispName.className = "text" EmailSelect.className = "" txtLUCustom.className = "text" LUOtherSelect.className = "" LUDNSpan.className = "LUDNSpan" btnLUUpdateInf.className = "button" btnLUPrintNow.className = "button" btnLUReset.className = "button" btnLUDelegates.className = "button" btnLUSearch.className = "button disabled" txtLUUsername.Value = strUser txtLUUsername.Value = " " & Trim(txtLUUsername.Value) txtLUUsername.className = "text userdis" txtLUUsername.Disabled = True For Each objOption In LUOtherSelect Select Case objOption.Value Case "company" objOption.Title = "Company: " & strCompa ny Case "co" objOption.Title = "Country: " & strCount ry Case "department" objOption.Title = "Department: " & strDe partment Case "description" objOption.Title = "Description: " & strD escription Case "givenName" objOption.Title = "First Name: " & strFi rstName Case "sn" objOption.Title = "Surname: " name Case "physicalDeliveryOfficeName" objOption.Title = "Office: " & strOffice Case "facsimileTelephoneNumber" objOption.Title = "Fax Number: " & strFa xNo End Select Next GetOtherInfo() & strSur

ChangeLayout(LayoutUser) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: GetOtherInfo() '# PURPOSE........: Displays "Other" info for chosen field '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub GetOtherInfo() If LUOtherSelect.Value <> "0" Then txtLUCustom.Value = "" Select Case LUOtherSelect.Value Case "company" strCustom = strCompany strCustomTitle = "Company: " Case "co" strCustom = strCountry strCustomTitle = "Country: " Case "department" strCustom = strDepartment strCustomTitle = "Department: " Case "description" strCustom = strDescription strCustomTitle = "Description: " Case "givenName" strCustom = strFirstName strCustomTitle = "First Name: " Case "sn" strCustom = strSurname strCustomTitle = "Surname: " Case "physicalDeliveryOfficeName" strCustom = strOffice strCustomTitle = "Office: " Case "facsimileTelephoneNumber" strCustom = strFaxNo strCustomTitle = "Fax Number: " End Select txtLUCustom.Value = strCustom txtLUCustom.Title = strCustomTitle & strCustom Else txtLUCustom.Value = "" txtLUCustom.Title = "" End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ToggleDelegates() '# PURPOSE........: Toggles between Delegates and DN '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ToggleDelegates() If Trim(LUDelgateLabeltd.InnerHTML) = "Distinguished Name:" Then LUDelgateLabeltd.InnerHTML = "Has Delegates:"

LUDelgateLabel2td.InnerHTML = "Delegate Of:" btnLUDelegates.Value = "DN" btnLUDelegates.Title = "Show DN" LUDNtd.className = "hidden" LUDelegatetd.className = "" LUDelegateBLtd.className = "" ViewDelegates() Else LUDelgateLabeltd.InnerHTML = "Distinguished Name :" LUDelgateLabel2td.InnerHTML = "&nbsp;" btnLUDelegates.Value = "DELEGATES" btnLUDelegates.Title = "Show delegates" LUDNtd.className = "" LUDelegatetd.className = "hidden" LUDelegateBLtd.className = "hidden" End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ViewDelegates() '# PURPOSE........: Shows all delegates related to user '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ViewDelegates() strUser = txtLUUsername.Value strUser = Trim(strUser) Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory,publicDelegate sBL,publicDelegates" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False On Error Resume Next Set objRecordset = objCommand.Execute Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedName").Val ue arrPublicDelegatesBL = objRecordSet.Fields("publicDelega

tesBL").Value If IsArray(objRecordSet.Fields("publicDelegatesBL")) The n For Each objItem in arrPublicDelegatesBL Set objUser = GetObject("LDAP://" & objI tem) strDelegate = objUser.Get("displayName") strUserName = objUser.Get("sAMAccountNam e") strPublicDelegatesBL = strPublicDelegate sBL & _ "<span class = ""spanlink"" onClick=Show UserInfo(""" & strUserName & _ """) title=""View / change user info for '" & strUserName & "'"">" & strDelegate & "</span><br>" Next End If arrPublicDelegates = objRecordSet.Fields("publicDelegate s").Value If IsArray(objRecordSet.Fields("publicDelegates")) Then For Each objItem in arrPublicDelegates Set objUser = GetObject("LDAP://" & objI tem) strDelegate = objUser.Get("displayName") strUserName = objUser.Get("sAMAccountNam e") strPublicDelegates = strPublicDelegates & _ "<span class = ""spanlink"" onClick=Show UserInfo(""" & strUserName & _ """) title=""View / change user info for '" & strUserName & "'"">" & strDelegate & "</span><br>" Next End If objRecordset.MoveNext Loop objRecordset.Close If strPublicDelegatesBL <> "" Then _ LUDelegateBLtd.InnerHTML = "<div id=""LUDelegateBLSpan"" class=""DelegateSpan"" style=""width:330px;"">" & _ strPublicDelegatesBL & "</div>" If strPublicDelegates <> "" Then _ LUDelegatetd.InnerHTML = "<div id=""LUDelegateSpan"" cla ss=""DelegateSpan"" style=""width:334px;"">" & _ strPublicDelegates & "</div>" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: SelectEmailAdd() '# PURPOSE........: Changes Email input to Custom if required '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub SelectEmailAdd()

If EmailSelect.Value = "0" Then ChangeEmailType() End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ChangeEmailType() '# PURPOSE........: Changes Email input '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ChangeEmailType() If EmailLabel.InnerHTML = "Custom" Then txtLUEmailAdd.Value = strDefaultEmail EmailSelect.className = "hidden" txtLUEmailAdd.className = "text" EmailLabel.InnerHTML = "Select" EmailLabel.Title = "Select an email address from a list of proxy addresses assigned to the user" DelProxyLabel.InnerHTML = "" DelProxyLabel.Title = "" ElseIf EmailLabel.InnerHTML = "Select" Then EmailSelect.Value = strDefaultEmail EmailSelect.className = "" txtLUEmailAdd.className = "text hidden" EmailLabel.InnerHTML = "Custom" EmailLabel.Title = "Enter a custom email address " DelProxyLabel.InnerHTML = "X" DelProxyLabel.Title = "Delete selected proxy add ress" End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: DeleteProxyAddress() '# PURPOSE........: Deletes selected proxy address '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub DeleteProxyAddress() Const ADS_PROPERTY_DELETE = 4 strUser = txtLUUsername.Value strEmailDel = EmailSelect.Value ContinuePrompt = MsgBox("Are you sure you wish to delete the pro xy address '" & _ strEmailDel & "'?", vbQuestion+vbYesNo, "AD Management Utility") If ContinuePrompt = vbYes Then Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection

strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,proxyAddresses" strQuery = strBase & ";" & strFilter & ";" & strAttribut es & ";subtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 100 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False On Error Resume Next Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "The username '" & strUser & "' cannot be found.", vbExclamation, "Error" ResetLayoutUser() Exit Sub End If Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedNa me").Value arrProxyAddresses = objRecordSet.Fields("proxyAd dresses").Value objRecordset.MoveNext Loop objRecordset.Close Set objUser = GetObject("LDAP://" & strUserDN) strEmail = objUser.Get("mail") For Each objItem In arrProxyAddresses x = Len(objItem) If Right(objItem, Len(objItem) - 5) = strEmailDe l Then objUser.PutEx ADS_PROPERTY_DELETE, "prox yAddresses", Array(objItem) Else If LCase(strEmail) = LCase(strEm ailDel) Then strEmail = Right(objItem , Len(objItem) - 5) objUser.Put "mail", strE mail End If End If Next objUser.SetInfo If Err.Number = 0 Then ResetLayoutUser() ShowUserInfo(strUser) MsgBox "The proxy address '" & strEmailDel & "' has now been deleted", _

vbInformation, "AD Management Utility" Else MsgBox "There was an error removing the proxy address '" & _ strEmailDel & "'.", vbExclamation, "Erro r" ResetLayoutUser() End If Else ResetLayoutUser() ShowUserInfo(strUser) End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: UpdateUserInfo() '# PURPOSE........: Updates user info in AD '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub UpdateUserInfo() If txtLUDispName.Value <> "" AND txtLUUsername.Value <> "" Then strUser = txtLUUsername.Value Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory,proxyA ddresses" strQuery = strBase & ";" & strFilter & ";" & strAttribut es & ";subtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False On Error Resume Next Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "The username '" & strUser & "' cannot be found.", vbExclamation, "Error" ResetLayoutUser() Exit Sub End If Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedNa me").Value

arrProxyAddresses = objRecordSet.Fields("proxyAd dresses").Value objRecordset.MoveNext Loop objRecordset.Close Set objUser = GetObject("LDAP://" & strUserDN) objUser.Put objUser.Put objUser.Put objUser.Put objUser.Put objUser.Put objUser.Put "streetAddress", txtLUAdd.Value "l", txtLUCity.Value "PostalCode", txtLUPostcode.Value "TelephoneNumber", txtLUPhN.Value "mobile", txtLUMobile.Value "title", txtLUTitle.Value "st",txtLUCounty.Value

If EmailLabel.InnerHTML = "Custom" Then objUser.Put "mail",EmailSelect.Value ElseIf EmailLabel.InnerHTML = "Select" Then x = UBound(arrProxyAddresses) + 1 ReDim Preserve arrProxyAddresses(x) arrProxyAddresses(x) = "smtp:" & txtLUEm ailAdd.Value objUser.Put "proxyAddresses",arrProxyAdd resses objUser.Put "mail",txtLUEmailAdd.Value End If Select Case LUOtherSelect.Value Case "company" objUser.Put "company", txtLUCustom.Value Case "co" objUser.Put "co", txtLUCustom.Value Case "department" objUser.Put "department", txtLUCustom.Va lue Case "description" objUser.Put "description", txtLUCustom.V alue Case "givenName" objUser.Put "givenName", txtLUCustom.Val ue Case "sn" objUser.Put "sn", txtLUCustom.Value Case "physicalDeliveryOfficeName" objUser.Put "physicalDeliveryOfficeName" , txtLUCustom.Value Case "facsimileTelephoneNumber" objUser.Put "facsimileTelephoneNumber", txtLUCustom.Value Case Else End Select Err.Clear objUser.SetInfo If Err.Number <> 0 Then MsgBox "There was an error updating the user det ails for '" & _

Trim(txtLUUsername.Value) & "':" & vbCrLf & vbCr Lf & Err.Description, _ vbExclamation, "Error" Err.Clear Else MsgBox "The user details for '" & Trim(t xtLUUsername.Value) & _ "' have now been updated.", vbInformatio n, "AD Management Utility" End If ResetLayoutUser() ShowUserInfo(strUser) Else ResetLayoutUser() End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ResetLayoutUser() '# PURPOSE........: Resets form for the User info '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ResetLayoutUser() txtLUAdd.Value = "" txtLUCity.Value = "" txtLUPostcode.Value = "" txtLUPhN.Value = "" txtLUMobile.Value = "" txtLUTitle.Value = "" txtLUCounty.Value = "" txtLUDispName.Value = "" txtLUUsername.Value = "" txtLUEmailAdd.Value = "" txtLUCustom.Value = "" LUDNSpan.InnerHTML = "&nbsp;" ViewUACSpan.InnerHTML = "" LUOtherSelect.Value = 0 EmailLabel.InnerHTML = "" DelProxyLabel.InnerHTML = "" txtLUDispName.Title = "" txtLUAdd.Title = "" txtLUCity.Title = "" txtLUPostcode.Title = "" txtLUPhN.Title = "" txtLUMobile.Title = "" txtLUTitle.Title = "" txtLUCounty.Title = "" EmailSelect.Title = "" LUDNSpan.Title = "" ViewUACSpan.Title = "" btnLUUpdateInf.Title = "" btnLUPrintNow.Title = "" btnLUReset.Title = "" btnLUSearch.Title = "Search username" EmailLabel.Title = ""

DelProxyLabel.Title = "" txtLUAdd.Disabled = True txtLUCity.Disabled = True txtLUPostcode.Disabled = True txtLUPhN.Disabled = True txtLUMobile.Disabled = True txtLUTitle.Disabled = True txtLUCounty.Disabled = True txtLUDispName.Disabled = True EmailSelect.Disabled = True txtLUCustom.Disabled = True LUOtherSelect.Disabled = True btnLUUpdateInf.Disabled = True btnLUPrintNow.Disabled = True btnLUReset.Disabled = True btnLUSearch.Disabled = False ClearListbox(EmailSelect) txtLUAdd.className = "text disabled" txtLUCity.className = "text disabled" txtLUPostcode.className = "text disabled" txtLUPhN.className = "text disabled" txtLUMobile.className = "text disabled" txtLUTitle.className = "text disabled" txtLUCounty.className = "text disabled" txtLUDispName.className = "text disabled" EmailSelect.className = "disabled" txtLUEmailAdd.className = "text hidden" txtLUCustom.className = "text disabled" LUOtherSelect.className = "disabled" btnLUUpdateInf.className = "button disabled" btnLUPrintNow.className = "button disabled" btnLUReset.className = "button disabled" btnLUSearch.className = "button" LUDNSpan.className = "LUDNSpan disabled" strCompany = "" strCountry = "" strOffice = "" strDescription = "" strFirstName = "" strSurname = "" strFaxNo = "" txtLUUsername.Disabled = False txtLUUsername.className = "text" txtLUUsername.Value = "Username" txtLUUsername.style.color = "#888888" ResetDelegates() CloseSearch(0) ChangeLayout(LayoutUser) End Sub '#-------------------------------------------------------------------------

'# SUBROUTINE.....: ResetDelegates() '# PURPOSE........: Resets options for Delegates '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ResetDelegates() LUDelegateBLtd.InnerHTML = "<div id=""LUDelegateBLSpan"" class=" "DelegateSpan"" style=""width:330px;""><span style=""font-weight:bold;"">&nbsp;< /span></div>" LUDelegatetd.InnerHTML = "<div id=""LUDelegateSpan"" class=""Del egateSpan"" style=""width:333px;""><span style=""font-weight:bold;"">&nbsp;</spa n></div>" LUDelgateLabeltd.InnerHTML = "Distinguished Name:" LUDelgateLabel2td.InnerHTML = "&nbsp;" btnLUDelegates.Value = "DELEGATES" btnLUDelegates.Disabled = True btnLUDelegates.className = "button disabled" btnLUDelegates.Title = "" LUDNtd.className = "" LUDelegatetd.className = "hidden" LUDelegateBLtd.className = "hidden" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: u '# ARGUMENTS......: strUser = user to be searched '# EXAMPLE........: ReloadLayoutUser(johsmi) '# NOTES..........: Required to clear listbox before loading data '#-------------------------------------------------------------------------Sub ReloadLayoutUser(strUser) ResetLayoutUser() ShowUserInfo(strUser) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: GetGroupInfo() '# PURPOSE........: Retrieve all groups in AD and adds to Select box '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub GetGroupInfo() document.body.style.cursor = "wait" i = 0 If GroupFilterSelect.className = "hidden" Then ClearFilter() Const ForReading = 1 Const ForWriting = 2 strAppData = objShell.SpecialFolders("AppData") strCacheFolder = strAppData & "\AD Management Utility" strCacheFileName = "groupcache" strCacheFile = strCacheFolder & "\" & strCacheFileName ReloadLayoutUser(strUser) Resets and then loads user data in User Info men

Set objFSO = CreateObject("Scripting.FileSystemObject") GroupSelect.Value = "" ClearListbox(GroupSelect) If booCacheGroups = 1 AND objFSO.FileExists(strCacheFile) Then Set objFile = objFSO.OpenTextFile(strCacheFile, ForReadi ng, True) While Not objFile.AtEndOfStream strLine = objFile.ReadLine arrLine = Split(strLine, "<!>") strGroupName = arrLine(0) strGroupDN = arrLine(1) strTitle = arrLine(2) strGroupDescription = arrLine(3) Set objOption = Document.createElement("OPTION") objOption.Text = strGroupName objOption.Value = strGroupDN & "<!>" & strGroupD escription objOption.Title = strTitle GroupSelect.Add(objOption) strGroupDescription = "" i = i + 1 WEnd objFile.Close Else If booCacheGroups = 1 AND NOT objFSO.FolderExist s(strCacheFolder) Then objFSO.CreateFolder(strCacheFolder) Set objConnection = CreateObject("ADODB.Connecti on") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strRootOU & ">" If booCacheGroups = 1 Then Set objFile = objFSO. OpenTextFile(strCacheFile, ForWriting, True) strFilter = "(objectcategory=group)" strAttributes = "name,description,groupType,mail ,distinguishedName" strQuery = strBase & ";" & strFilter & ";" & str Attributes & ";subtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False objCommand.Properties("Sort on") = "name"

Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "There are no groups in the speci fied OU (" & strDNSDomain & "), or the OU has been entered " & _ "incorrectly. ", vbInformation, "AD Man agement Utility" Exit Sub End If Do Until objRecordSet.EOF On Error Resume Next strGroupDN = objRecordset.Fields("distin guishedName").Value strGroupName = objRecordSet.Fields("name ").Value intGroupType = objRecordSet.Fields("grou pType").Value strGroupEmail = objRecordSet.Fields("mai l").Value strGroupTmpDesc = objRecordSet.Fields("d escription").Value If IsArray(strGroupTmpDesc) Then For x = 0 To UBound(strGroupTmpD esc) strGroupDescription = st rGroupDescription & " " & strGroupTmpDesc(x) Next End If Set objOption = Document.createElement(" OPTION") Select Case intGroupType Case 2 strText = strGroupName objOption.Text = strText Case 4 strText = strGroupName objOption.Text = strText Case 8 strText = strGroupName objOption.Text = strText Case -2147483646 strText = strGroupName & " (Sec)" objOption.Text = strText Case -2147483644 strText = strGroupName & " (Sec)" objOption.Text = strText Case -2147483640 strText = strGroupName & " (Sec)" objOption.Text = strText Case -2147483643 strText = strGroupName & " (Sec)"

objOption.Text = strText Case Else objOption.Text = strGrou pName End Select If strGroupDescription <> "" AND NOT IsN ull(strGroupDescription) Then strTitle = strGroupName & " - " & strGroupDescription objOption.Title = strTitle Else strTitle = strGroupName objOption.Title = strTit le End If objOption.Value = strGroupDN & "<!>" & s trGroupDescription If booCacheGroups = 1 Then _ objFile.WriteLine strText & "<!> " & strGroupDN & "<!>" & strTitle & "<!>" & strGroupDescription GroupSelect.Add(objOption) objRecordSet.MoveNext strGroupDescription = "" i = i + 1 Loop If booCacheGroups = 1 Then objFile.Close End If intTotalGroups = i L1intGroups.InnerHTML = i document.body.style.cursor = "default" ChangeLayout(LayoutGroup) btnLGDelete.Disabled = True btnLGDelete.className = "button disabled" btnLGDelete.title = "" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ReloadGroups() '# PURPOSE........: Reloads group cache file '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ReloadGroups() On Error Resume Next strAppData = objShell.SpecialFolders("AppData") strCacheFile = strAppData & "\AD Management Utility\groupcache"

Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile(strCacheFile) ResetLayoutGroup() GetGroupInfo() End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ClearFilterText() '# PURPOSE........: Clears group filter text box '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ClearFilterText() If Right(txtLGFilter.Value, 9) = "Filter..." Then txtLGFilter.style.color = "black" txtLGFilter.Value = "" End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: x '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ClearFilter() GroupFilterSelect.className = "hidden" GroupSelect.className = "" txtLGFilter.style.color = "#888888" txtLGFilter.Value = "Filter..." End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: ter '# box '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowFilterMembers() GroupSelect.Value = GroupFilterSelect.Value ShowMembers() End Sub '#------------------------------------------------------------------------'# '# '# '# SUBROUTINE.....: PURPOSE........: ARGUMENTS......: EXAMPLE........: FilterGroups() Filters group select box as per filter text ShowFilterMembers() Begins process of showing group members from fil ClearFilter() Clears group filter and shows original select bo

'# NOTES..........: Uses secondary filtered select box '#-------------------------------------------------------------------------Sub FilterGroups() On Error Resume Next strFilter = LCase(txtLGFilter.Value) i = 0 ClearListbox(GroupMembersSelect) Set optGroup = document.getElementById("optGroupSelect") optGroup.RemoveNode Set optGroup = document.getElementById("optUserSelect") optGroup.RemoveNode Set optGroup = document.getElementById("optOtherSelect") optGroup.RemoveNode ClearListbox(GroupFilterSelect) GroupMembersSelect.Value = "" GroupMembersSelect.className = "disabled" L1intMembers.InnerHTML = "" For Each objOption In GroupSelect.Options Set objOption2 = Document.createElement("OPTION") objOption2.Text = objOption.Text objOption2.Title = objOption.Title objOption2.Value = objOption.Value GroupFilterSelect.Add(objOption2) i = i + 1 Next For Each objOption In GroupFilterSelect.Options If InStr(LCase(objOption.Text), strFilter) = 0 Then objOption.RemoveNode i = i - 1 End If Next L1intGroups.InnerHTML = i GroupFilterSelect.className = "" GroupSelect.className = "hidden" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ShowMembers() '# PURPOSE........: Retrieve members of selected group '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowMembers() On Error Resume Next arrGroupDN = Split(GroupSelect.Value, "<!>") strGroupDN = arrGroupDN(0) strGroupDescription = arrGroupDN(1)

GroupDescSpan.InnerHTML = strGroupDescription PauseScript(0) ClearListbox(GroupMembersSelect) i = 0 g = 0 u = 0 o = 0 strGroupDN strGroupDN strGroupDN strGroupDN strGroupDN strGroupDN strGroupDN strGroupDN

= = = = = = = =

Replace(strGroupDN, Replace(strGroupDN, Replace(strGroupDN, Replace(strGroupDN, Replace(strGroupDN, Replace(strGroupDN, Replace(strGroupDN, Replace(strGroupDN,

"\", "\\") "#", "\#") "+", "\+") "<", "\<") ">", "\>") ";", "\;") Chr(34), "\" & Chr(34)) "/", "\/")

Set optGroup = document.getElementById("optGroupSelect") optGroup.RemoveNode Set optGroup = document.getElementById("optUserSelect") optGroup.RemoveNode Set optGroup = document.getElementById("optOtherSelect") optGroup.RemoveNode Set optGroup = Document.createElement("optgroup") optGroup.id = "optUserSelect" optGroup.label = "Users" GroupMembersSelect.appendChild(optGroup) Set optGroup = Document.createElement("optgroup") optGroup.id = "optGroupSelect" optGroup.label = "Groups" GroupMembersSelect.appendChild(optGroup) Set optGroup = Document.createElement("optgroup") optGroup.id = "optOtherSelect" optGroup.label = "Others" GroupMembersSelect.appendChild(optGroup) Set GroupTmpDataList = CreateObject("ADOR.Recordset") GroupTmpDataList.Fields.Append "distinguishedName", adVarChar, M axCharacters GroupTmpDataList.Fields.Append "sAMAccountName", adVarChar, MaxC haracters GroupTmpDataList.Fields.Append "displayName", adVarChar, MaxChar acters GroupTmpDataList.Fields.Append "objectCategory", adVarChar, MaxC haracters GroupTmpDataList.Fields.Append "mail", adVarChar, MaxCharacters GroupTmpDataList.Open Set objGroup = GetObject("LDAP://" & strGroupDN) For Each objMember In objGroup.Members strUser = objMember.sAMAccountName strDN = objMember.distinguishedName strName = objMember.displayName strCategory = objMember.objectCategory

strEmail = objMember.mail If strName = "" OR IsNull(strName) Then strName = strUse r GroupTmpDataList.AddNew GroupTmpDataList("distinguishedName") = strDN GroupTmpDataList("sAMAccountName") = strUser GroupTmpDataList("displayName") = strName GroupTmpDataList("objectCategory") = strCategory GroupTmpDataList("mail") = strEmail GroupTmpDataList.Update Next GroupTmpDataList.Sort = "displayName" GroupTmpDataList.MoveFirst Do Until GroupTmpDataList.EOF strDN = GroupTmpDataList("distinguishedName").Value strUser = GroupTmpDataList("sAMAccountName").Value strName = GroupTmpDataList("displayName").Value strCategory = GroupTmpDataList("objectCategory").Value strEmail = GroupTmpDataList("mail").Value GroupTmpDataList.MoveNext Set objOption = Document.createElement("OPTION") objOption.InnerHTML = strName objOption.Value = strName & "||" & strDN If Left(LCase(strCategory), 8) = "cn=group" Then objOption.Title = strName & " (Double-click to v iew)" Set optGroup = document.getElementById("optGroup Select") g = g + 1 ElseIf Left(LCase(strCategory), 9) = "cn=person" AND strUser <> "" _ AND Not IsNull(strUser) Then objOption.Title = strUser & " (Double-cl ick to view)" Set optGroup = document.getElementById(" optUserSelect") u = u + 1 Else objOption.InnerHTML = strName & " (" & strEmail & ")" objOption.Title = strName & " (D ouble-click to send email)" objOption.Value = strName & "||" & strDN & "||" & strEmail Set optGroup = document.getEleme ntById("optOtherSelect") o = o + 1 End If optGroup.appendChild(objOption) i = i + 1 Loop

If g = 0 Then Set optGroup = document.getElementById("optGroupSelect") optGroup.RemoveNode End If If u = 0 Then Set optGroup = document.getElementById("optUserSelect") optGroup.RemoveNode End If If o = 0 Then Set optGroup = document.getElementById("optOtherSelect") optGroup.RemoveNode End If btnLGRemove.Disabled = True btnLGRemove.className = "button disabled" btnLGRemove.title = "" txtLGUsername.Disabled = False txtLGUsername.className = "text" txtLGUsername.title = "User / Group" btnLGAdd.Disabled = False btnLGAdd.className = "button" btnLGAdd.title = "Add user to group" GroupMembersSelect.className = "" GroupMembersSelect.Disabled = False btnLGDelete.Disabled = False btnLGDelete.className = "button" btnLGDelete.title = "Delete group" L1intMembers.InnerHTML = i End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: DeleteGroup() '# PURPOSE........: Delete group '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub DeleteGroup() arrDN = Split(GroupSelect.Value, "<!>") strDN = arrGroupDN(0) ContinuePrompt = MsgBox("Are you sure you wish to delete this gr oup?", vbQuestion+vbYesNo, "AD Management Utility") If ContinuePrompt = vbYes Then arrDN = Split(strDN, ",") strGroupCN = arrDN(0) strOU = "" For i = 1 To UBound(arrDN) - 1 strOU = strOU & arrDN(i) & "," Next strOU = strOU & arrDN(UBound(arrDN)) Set objOU = GetObject("LDAP://" & strOU)

Err.Clear objOU.Delete "group", strGroupCN If Err.Number = 0 Then ResetLayoutGroup() MsgBox "This group has now been deleted", vbInfo rmation, "AD Management Utility" Else MsgBox "There was an error deleting this group.", vbExclamation, "Error" End If End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: rs '# area '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ChooseMember() btnLGRemove.Disabled = False btnLGRemove.className = "button" btnLGRemove.title = "Remove user from group" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: RemoveGroupUser() '# PURPOSE........: Remove user from group '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub RemoveGroupUser() arrValue = Split(GroupMembersSelect.Value, "||") strUser = arrValue(0) strDN = arrValue(1) ContinuePrompt = MsgBox("Are you sure you wish to remove the use r '" & _ strUser & "' from this group?", vbQuestion+vbYesNo, "AD Manageme nt Utility") If ContinuePrompt = vbYes Then arrGroupDN = Split(GroupSelect.Value, "<!>") strGroupDN = arrGroupDN(0) Set objGroup = GetObject("LDAP://" & strGroupDN) strUserPath = "LDAP://" & strDN For Each objMember In objGroup.Members If LCase(objMember.adspath) = LCase(strUserPath) Then ChooseMember() Action performed when clicking on group in Membe

objGroup.Remove(strUserPath) ShowMembers() ShowUserGroups() MsgBox "The user '" & strUser & "' has n ow been removed from this group", _ vbInformation, "AD Management Utility" Exit Sub End If Next ShowMembers() MsgBox "The user '" & strUser & "' could not be removed from this group.", _ vbExclamation, "Error" Else GroupMembersSelect.Value = "" End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: AddGroupUser() '# PURPOSE........: Add user to group '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub AddGroupUser() strUser = txtLGUsername.Value If strUser = "" Then txtLGUsername.Value = "User / Group" txtLGUsername.style.color = "#888888" Exit Sub End If GroupMembersSelect.Disabled = False Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False On Error Resume Next Set objRecordset = objCommand.Execute

If (objRecordset.EOF = True) Then UnknownGroupUserSearch strUser Exit Sub End If ContinuePrompt = MsgBox("Are you sure you wish to add the item t o this group?", vbQuestion+vbYesNo, "AD Management Utility") If ContinuePrompt = vbYes Then Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedNa me").Value objRecordset.MoveNext Loop objRecordset.Close Set objUser = GetObject("LDAP://" & strUserDN) arrGroupDN = Split(GroupSelect.Value, "<!>") strGroupDN = arrGroupDN(0) Set objGroup = GetObject("LDAP://" & strGroupDN) objGroup.Add(objUser.ADsPath) If Err.Number <> 0 Then strError = "There was an error adding the item t o this group." Select Case Err.Number Case -2147019886 strError = strError & vbCrLf & vbCrLf & "The item already exists in this group." Case Else End Select MsgBox strError, vbExclamation, "Error" Else ShowMembers() If LCase(txtLGUsername.Value) = LCase(tx tLGUsername2.Value) Then ShowUserGroups() MsgBox "The item has now been added to t his group.", vbInformation, "AD Management Utility" End If End If txtLGUsername.Value = "User / Group" txtLGUsername.style.color = "#888888" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: UnknownGroupUserSearch(strInput) '# PURPOSE........: Performs search where unknown username entered, '# shows info in table on l eft of app '# ARGUMENTS......: strInput = Username entered '# EXAMPLE........: UnknownGroupUserSearch("john") '# NOTES..........: '#--------------------------------------------------------------------------

Sub UnknownGroupUserSearch(strInput) strHTML = "<table style=""border-collapse:collapse;table-layout: fixed;"">" strHTML = strHTML & "<tr><td style=""width:46%;height:0px""><td style=""width:46%;height:0px""><td style=""height:0px""></tr>" strHTML = strHTML & "<tr><th colspan=3 style=""background-color: black;color:white;"">" strHTML = strHTML & "<span style=""float:left;margin-left:125px; "">Search</span>" strHTML = strHTML & "<span style=""float:right;cursor:hand;margi n-right:10px;"" onClick=""CloseGroupSearch()"" title=""Close"">X</span></th></tr >" Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(&(|(objectClass=user)(objectClass=group))(|(sAMAcc ountName=*" & strInput & "*)(name=*" & strInput & "*)))" strAttributes = "distinguishedName,sAMAccountName,name,objectCat egory" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False objCommand.Properties("Sort on") = "sAMAccountName" On Error Resume Next Set objRecordset = objCommand.Execute If objRecordset.EOF = True Then CloseGroupSearch() MsgBox "No users / groups have been found.", vbInformati on, "AD Management Utility" Exit Sub End If Do Until objRecordset.EOF strUser = objRecordset.Fields("sAMAccountName").Value strName = objRecordset.Fields("name").Value strCategory = objRecordset.Fields("objectCategory").Valu e objRecordset.MoveNext If NOT IsNull(strUser) AND NOT IsNull(strName) Then strNewUser = Replace(strUser, "'", "||") strNewUser = Replace(strNewUser, Chr(34), "{}") strNewUser = Replace(strNewUser, " ", "<>") If Left(strUser, 1) = "$" Then strUser = strName strUser = Replace(strUser, "'", "")

strUser = Replace(strUser, Chr(34), "") strName = Replace(strName, "'", "") strName = Replace(strName, Chr(34), "") strHTML = strHTML & "<tr>" strHTML = strHTML & "<td style=""backgroundcolor:white;border-left:1px solid black;border-bottom:1px solid black;width:48%; "">" strHTML = strHTML & "<span class=""s panlink"" onClick='ShowSearchGroupUser """ & strNewUser & """' title=""Pick '" & strUser & "'"">" & strUser & "</span>" strHTML = strHTML & "</td>" strHTML = strHTML & "<td style=""backgroundcolor:white;border-bottom:1px solid black;width:48%;"">" strHTML = strHTML & strName strHTML = strHTML & "</td>" strHTML = strHTML & "<td style=""backgroundcolor:white;border-right:1px solid black;border-bottom:1px solid black;text-alig n:center;font-weight:bold;"">" If Left(LCase(strCategory), 8) = "cn=group" Then strHTML = strHTML & "G" Else strHTML = strHTML & "U" End If strHTML = strHTML & "</td>" strHTML = strHTML & "</tr>" End If Loop objRecordset.Close strHTML = strHTML & "</table>" GroupSelect.Disabled = True btnLGDelete.Disabled = True btnLGDelete.className = "button disabled" btnLGDelete.title = "" GroupMembersSelect.Disabled = True UsernameSearchSpan.InnerHTML = strHTML UsernameSearchSpan.className = "" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ShowSearchGroupUser(strUser) '# PURPOSE........: Shows the info for the chosen user '# ARGUMENTS......: strUser = Username '# EXAMPLE........: ShowSearchGroupUser("johsmi") '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowSearchGroupUser(strUser) UsernameSearchSpan.className = "hidden" GroupSelect.Disabled = False btnLGDelete.Disabled = False btnLGDelete.className = "button" btnLGDelete.title = "Delete group" If GroupMembersSelect.Disabled = False Then GroupMembersSelect.D

isabled = True strUser = Replace(strUser, "||", "'") strUser = Replace(strUser, "{}", Chr(34)) strUser = Replace(strUser, "<>", " ") txtLGUsername.Value = strUser AddGroupUser() End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: CloseGroupSearch() '# PURPOSE........: Closes Group search box '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub CloseGroupSearch() GroupSelect.Disabled = False btnLGDelete.Disabled = False btnLGDelete.className = "button" btnLGDelete.title = "Delete group" GroupMembersSelect.Disabled = False txtLGUsername.Value = "User / Group" txtLGUsername.style.color = "#888888" UsernameSearchSpan.className = "hidden" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ShowUserGroups() '# PURPOSE........: Retrieve user groups in Group Memberships area '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowUserGroups() On Error Resume Next Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D strUser = txtLGUsername2.Value i = 0 ResetGroupMemberships() If strUser = "" OR _ (txtLGUsername2.style.color = "#888888" AND txtLGUsername2.Value = "Username") Then txtLGUsername2.Value = "Username" txtLGUsername2.style.color = "#888888" Exit Sub End If Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command")

objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False Set objRecordset = objCommand.Execute booOptimiseSearch = objShell.RegRead("HKCU\Software\SKB\ADManage mentUtil\Setup\booOptimiseSearch") If booOptimiseSearch = 0 Then If objRecordset.EOF = True Then UnknownUserSearch strUser, 2 Exit Sub End If Else If booSearched = 0 Then UnknownUserSearch strUser, 2 Exit Sub End If booSearched = 0 End If Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedName").Val ue objRecordset.MoveNext Loop objRecordset.Close Set objUser = GetObject("LDAP://" & strUserDN) intPrimaryGroupID = objUser.Get("primaryGroupID") arrGroups = objUser.GetEx("memberOf") If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then MsgBox "The memberOf attribute is not set.", vbExclamati on, "Error" txtLGUsername2.Value = "Username" txtLGUsername2.style.color = "#888888" Else Set GroupTmpDataList = CreateObject("ADOR.Record set") GroupTmpDataList.Fields.Append "distinguishedNam e", adVarChar, MaxCharacters GroupTmpDataList.Fields.Append "name", adVarChar , MaxCharacters GroupTmpDataList.Open

For Each strGroup In arrGroups arrName = Split(strGroup, ",") strName = Replace(arrName(0), "CN=", "") GroupTmpDataList.AddNew GroupTmpDataList("distinguishedName") = strGroup GroupTmpDataList("name") = strName GroupTmpDataList.Update Next GroupTmpDataList.Sort = "name" GroupTmpDataList.MoveFirst Do Until GroupTmpDataList.EOF strGroup = GroupTmpDataList("distinguish edName").Value strName = GroupTmpDataList("name").Value GroupTmpDataList.MoveNext Set objOption = Document.createElement(" OPTION") objOption.Text = strName objOption.Title = strName & " (Double-cl ick to view)" objOption.Value = strGroup UserGroupsSelect.Add(objOption) i = i + 1 Loop txtLGUsername2.style.color = "black" UserGroupsSelect.className = "" L1intGroupMembership.InnerHTML = i End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ChooseUserGroup() '# PURPOSE........: Action performed when clicking on group in Group '# Memberships area '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ChooseUserGroup() btnLGRemove2.Disabled = False btnLGRemove2.className = "button" btnLGRemove2.title = "Remove user from group" End Sub '#------------------------------------------------------------------------'# '# '# '# SUBROUTINE.....: PURPOSE........: ARGUMENTS......: EXAMPLE........: RemoveUserGroup() Remove user from group in Group Memberships area

'# NOTES..........: '#-------------------------------------------------------------------------Sub RemoveUserGroup() strUser = txtLGUsername2.Value ContinuePrompt = MsgBox("Are you sure you wish to remove the use r '" & _ strUser & "' from this group?", vbQuestion+vbYesNo, "AD Manageme nt Utility") If ContinuePrompt = vbYes Then Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory" strQuery = strBase & ";" & strFilter & ";" & strAttribut es & ";subtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "The username '" & strUser & "' cannot be found.", vbExclamation, "Error" Exit Sub End If Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedNa me").Value objRecordset.MoveNext Loop objRecordset.Close strGroupDN = UserGroupsSelect.Value Set objGroup = GetObject("LDAP://" & strGroupDN) strUserPath = "LDAP://" & strUserDN For Each objMember In objGroup.Members If LCase(objMember.adspath) = LCase(strUserPath) Then objGroup.Remove(strUserPath) ShowUserGroups() If GroupSelect.Value <> "" Then ShowMemb ers() MsgBox "The user '" & strUser & "' has n

ow been removed from this group", _ vbInformation, "AD Management Utility" Exit Sub End If Next ShowUserGroups() MsgBox "The user '" & strUser & "' could not be removed from this group.", _ vbExclamation, "Error" Else UserGroupsSelect.Value = "" End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ResetGroupMemberships() '# PURPOSE........: Reset Group Memberships listbox '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ResetGroupMemberships() L1intGroupMembership.InnerHTML = "" ClearListBox(UserGroupsSelect) UserGroupsSelect.className = "disabled" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ChangeGroup(intType) '# PURPOSE........: Handles double click action of select boxes to '# view info as appropriate '# ARGUMENTS......: intType = Select box action triggered from '# EXAMPLE........: ChangeGroup(1) '# NOTES..........: '#-------------------------------------------------------------------------Sub ChangeGroup(intType) On Error Resume Next Select Case intType Case 1 arrValue strValue strEmail Case 2 strValue End Select

= Split(GroupMembersSelect.Value, "||") = arrValue(1) = arrValue(2) = UserGroupsSelect.Value

If strEmail <> "" Then objShell.Run "mailto://" & strEmail Exit Sub End If If strValue = "" Then Exit Sub For Each objMember In GroupSelect If InStr(objMember.Value, strValue) > 0 Then ClearFilter()

GroupSelect.className = "" GroupFilterSelect.className = "hidden" objMember.Selected = True L1intGroups.InnerHTML = intTotalGroups ShowMembers() Exit Sub End If Next Set objUser = GetObject("LDAP://" & strValue) strUser = objUser.sAMAccountName If strUser <> "" AND NOT IsNull(strUser) Then txtLGUsername2.Value = strUser ShowUserGroups() End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ResetLayoutGroup() '# PURPOSE........: Reset group menu '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ResetLayoutGroup() On Error Resume Next GroupMembersSelect.Value = "" UserGroupsSelect.Value = "" txtLGUsername.Value = "User / Group" txtLGUsername.style.color = "#888888" txtLGUsername.Disabled = True txtLGUsername.className = "text disabled" txtLGUsername.title = "" txtLGUsername2.Value = "Username" txtLGUsername2.style.color = "#888888" btnLGAdd.Disabled = True btnLGAdd.className = "button disabled" btnLGAdd.title = "" btnLGRemove.Disabled = True btnLGRemove.className = "button disabled" btnLGRemove.title = "" btnLGRemove2.Disabled = True btnLGRemove2.className = "button disabled" btnLGRemove2.title = "" ClearFilter() ResetGroupMemberships() ClearListbox(GroupMembersSelect) Set optGroup = document.getElementById("optGroupSelect") optGroup.RemoveNode Set optGroup = document.getElementById("optUserSelect") optGroup.RemoveNode Set optGroup = document.getElementById("optOtherSelect") optGroup.RemoveNode GroupMembersSelect.className = "disabled" L1intMembers.InnerHTML = "" L1intGroups.InnerHTML = "" GroupDescSpan.InnerHTML = ""

GetGroupInfo() End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: '# o '# ARGUMENTS......: strUser = user to be searched '# EXAMPLE........: ShowL3UserInfo(johsmi) '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowL3UserInfo(strUser) On Error Resume Next If strUser <> "" Then txtL3Username.Value = strUser If strUser = "" OR (txtL3Username.Value = "Username" _ AND txtL3Username.style.color = "#888888") Then ChangeLayout(Layout3) ResetLayout3() Exit Sub End If strUser = Trim(strUser) Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False Set objRecordset = objCommand.Execute booOptimiseSearch = objShell.RegRead("HKCU\Software\SKB\ADManage mentUtil\Setup\booOptimiseSearch") If booOptimiseSearch = 0 Then If objRecordset.EOF = True Then UnknownUserSearch strUser, 3 Exit Sub End If Else If booSearched = 0 Then UnknownUserSearch strUser, 3 Exit Sub ShowL3UserInfo(strUser) Performs search in AD for specified user and displays current UAC inf

End If booSearched = 0 End If Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedName").Val ue objRecordset.MoveNext Loop objRecordset.Close Set objUser = GetObject("LDAP://" & strUserDN) intUACFlag = objUser.Get("UserAccountControl") lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Con trol\" _ & "TimeZoneInformation\ActiveTimeBias") If (UCase(TypeName(lngBiasKey)) = "LONG") Then lngBias = lngBiasKey ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then lngBias = 0 For k = 0 To UBound(lngBiasKey) lngBias = lngBias + (lngBiasKey(k) * 256 ^k) Next End If If (TypeName(objUser.accountExpires) = "Object") Then Set objExpiry = objUser.accountExpires dtmExpiry = Integer8Date(objExpiry, lngBias) Else dtmExpiry = 0 End If If (TypeName(objUser.lastLogon) = "Object") Then Set objLastLogon = objUser.lastLogon dtmLastLogon = Integer8Date(objLastLogon, lngBias) If dtmLastLogon = 0 Then L3dtmLastLogon.InnerHTML = "Never logged on" L3dtmLastLogon.Title = "Last Logon: Never logged on" Else L3dtmLastLogon.InnerHTML = dtmLastLogon L3dtmLastLogon.Title = "Last Logon: " & dtmLastLogon End If Else L3dtmLastLogon.InnerHTML = "Never logged on" L3dtmLastLogon.Title = "Last Logon: Never logged on" End If If dtmExpiry = 0 Then If (intUACFlag AND ADS_UF_ACCOUNTDISABLE) <> 0 Then L3Enabled.InnerHTML = "<span style=""color:red;" ">Disabled</span>" strEnabledStatus = "Disabled" booDisabled = 1 L3Box10.InnerHTML = "Enable Account:"

cbxL3DisableAcc.Title = "Enable Account" L3PassStatus.InnerHTML = "&nbsp;" Else L3Enabled.InnerHTML = "<span style=""col or:green;"">Enabled</span>" strEnabledStatus = "Enabled" booDisabled = 0 L3Box10.InnerHTML = "Disable Account:" cbxL3DisableAcc.Title = "Disable Account " End If Else If dtmExpiry > Now Then L3Enabled.InnerHTML = "<span style=""col or:red;"">Expiring (" & _ dtmExpiry & ")</span>" strEnabledStatus = "Expiring (" & dtmExp iry & ")" Else L3Enabled.InnerHTML = "<span sty le=""color:red;"">Expired (" & _ dtmExpiry & ")</span>" strEnabledStatus = "Expired (" & dtmExpiry & ")" End If L3Box10.InnerHTML = "Unexpire Account:" cbxL3DisableAcc.Title = "Unexpire Account" End If Set objPwdLastSet = objUser.pwdLastSet dtmPwdLastSet = Integer8Date(objPwdLastSet, lngBias) If (intUACFlag AND ADS_UF_DONT_EXPIRE_PASSWD) <> 0 Then L3PassStatus.InnerHTML = "The password <span class=""red bold"">does not</span> expire" L3dtmPwdLastSet.InnerHTML = dtmPwdLastSet L3dtmPwdLastSet.Title = "Password Set: " & dtmPwdLastSet L3dtmPwdLastSet.style.color = "black" Else intTimeInterval = Int(Now - dtmPwdLastSet) If intTimeInterval >= intMaxPwdAge AND booDisabl ed = 0 Then L3PassStatus.InnerHTML = "Password <span class=""redbold"">has expired</span>" L3dtmPwdLastSet.InnerHTML = "Expired" L3dtmPwdLastSet.Title = "Password has Ex pired" L3dtmPwdLastSet.style.color = "red" Else If booDisabled = 0 Then intExpireDays = Int((dtm PwdLastSet + intMaxPwdAge) - Now) L3PassStatus.InnerHTML = "Password will expire in <span class=""redbold"">" & _ intExpireDays & "</span> days" L3dtmPwdLastSet.InnerHTM L = dtmPwdLastSet L3dtmPwdLastSet.Title = "Password Set: " & dtmPwdLastSet

L3dtmPwdLastSet.style.co lor = "black" End If End If End If If objUser.IsAccountLocked = True Then L3Locked.InnerHTML = "<span style=""color:red;"">Locked< /span>" strLockedStatus = "Locked" cbxL3UnlockAcc.Disabled = False cbxL3UnlockAcc.className = "checkbox" cbxL3UnlockAcc.Title = "Unlock Account" Else L3Locked.InnerHTML = "<span style=""color:green; "">Not Locked</span>" strLockedStatus = "Not Locked" cbxL3UnlockAcc.Disabled = True cbxL3UnlockAcc.className = "checkbox disabled" cbxL3UnlockAcc.title = "" End If strDispName = objUser.Get("displayName") strPhone = objUser.Get("telephoneNumber") strEmail = objUser.Get("mail") dtmCreated = objUser.Get("whenCreated") dtmCreated = DateAdd("n", -lngBias, dtmCreated) dtmChanged = objUser.Get("whenChanged") dtmChanged = DateAdd("n", -lngBias, dtmChanged) L3Name.InnerHTML = strDispName L3Phone.InnerHTML = strPhone L3Email.InnerHTML = "<a href=""mailto:" & strEmail & """>" & str Email & "</a>" L3dtmCreatedOn.InnerHTML = dtmCreated L3dtmChangedOn.InnerHTML = dtmChanged EditUserSpan.InnerHTML = "Edit User" L3Enabled.className = "InfoTD" L3Locked.className = "InfoTD" L3dtmCreatedOn.className = "InfoTD" L3dtmChangedOn.className = "InfoTD" L3dtmPwdLastSet.className = "InfoTD" L3Name.className = "InfoTD" L3Phone.className = "InfoTD" L3Email.className = "InfoTD" L3dtmLastLogon.className = "InfoTD" pwdL3Pwd.className = "InfoTD" btnL3ResetPwd.className = "button" cbxL3ForceChange.className = "checkbox" cbxL3ShowPwd.className = "checkbox" btnL3Commit.className = "button" cbxL3DisableAcc.className = "checkbox" btnL3Commit.className = "button" btnL3Reset.className = "button" btnL3PrintNow.className = "button" StrengthSpan.style.color = "" For i = 1 to 11

If i < 10 Then i = 0 & i document.getElementByID("L3Box" & i).className = "" Next btnL3PrintNow.Title = "Print Window" btnL3Reset.Title = "Reset Form" cbxL3ShowPwd.Title = "Show Password" cbxL3ForceChange.Title = "Force user to change password at next logon" L3Name.Title = "Display Name: " & strDispName L3Phone.Title = "Telephone: " & strPhone L3Email.Title = "Send email to " & strEmail L3dtmCreatedOn.Title = "Created On: " & dtmCreated L3dtmChangedOn.Title = "Last Modified: " & dtmChanged L3Enabled.Title = "Status: " & strEnabledStatus L3Locked.Title = "Locked Status: " & strLockedStatus EditUserSpan.Title = "View / change user info for '" & strUser & "'" pwdL3Pwd.Title = "Password" btnL3ResetPwd.Title = "Set password" btnL3Commit.Title = "Commit action(s)" L3Box01.className = "L3 L3Upper L3Left L3Right" L3Box01.style.backgroundcolor = "white" L3Box02.className = "L3 L3Left" L3Box03.className = "L3 L3Right" L3Box04.className = "L3 L3Left L3Right" L3Box05.className = "L3 L3Left L3Right" L3Box06.className = "L3 L3Middle L3Left" L3Box07.className = "L3 L3Middle" L3Box08.className = "L3 L3Middle" L3Box09.className = "L3 L3Middle L3Right" L3Box10.className = "L3 L3Left" L3Box11.className = "L3" L3Box12.className = "L3 L3Lower L3Left L3Right" StrengthSpan.InnerHTML = "" pwdL3Pwd.Value = "" pwdL3Pwd.Disabled = False btnL3ResetPwd.Disabled = False cbxL3ForceChange.Disabled = False cbxL3ShowPwd.Disabled = False btnL3Commit.Disabled = False cbxL3DisableAcc.Disabled = False btnL3Commit.Disabled = False btnL3Reset.Disabled = False btnL3PrintNow.Disabled = False btnL3Search.Disabled = True btnL3Search.className = "button disabled" txtL3Username.className = "text userdis" txtL3Username.Disabled = True txtL3Username.Value = " " & Trim(txtL3Username.Value) ChangeLayout(Layout3) End Sub '#-------------------------------------------------------------------------

'# SUBROUTINE.....: CommitL3Action() '# PURPOSE........: Performs action(s) to User Account control '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub CommitL3Action() strUser = txtL3Username.Value Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False On Error Resume Next Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "The username '" & strUser & "' cannot be found." , vbExclamation, "Error" Exit Sub End If Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedName").Val ue objRecordset.MoveNext Loop objRecordset.Close Set objUser = GetObject("LDAP://" & strUserDN) If cbxL3ForceChange.Checked = True Then objUser.Put "pwdLastSet" , 0 If cbxL3UnlockAcc.Checked = True Then objUser.put "lockoutTime", 0 If cbxL3DisableAcc.Checked = True Then Select Case L3Box10.InnerHTML Case "Disable Account:" objUser.Put "userAccountControl", 514 Case "Enable Account:" objUser.Put "userAccountControl", 512

Case "Unexpire Account:" objUser.Put "accountExpires", 0 End Select End If Err.Clear objUser.SetInfo If Err.Number <> 0 Then ShowL3UserInfo(strUser) MsgBox "There was an error performing the operations for '" & _ Trim(txtL3Username.Value) & "':" & vbCrLf & vbCrLf & _ Err.Description, vbExclamation, "Error" Else ShowL3UserInfo(strUser) MsgBox "The action(s) have been committed succes sfully.", vbInformation, "AD Management Utility" End If pwdL3Pwd.Value = "" cbxL3DisableAcc.Checked = False cbxL3ForceChange.Checked = False cbxL3UnlockAcc.Checked = False End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ResetPassword() '# PURPOSE........: Resets user password '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ResetPassword() strUser = txtL3Username.Value If cbxL3ShowPwd.Checked Then strPassword = txtL3Pwd.Value Else strPassword = pwdL3Pwd.Value End If Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(sAMAccountName=" & strUser & ")" strAttributes = "distinguishedName,objectCategory" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000

objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False On Error Resume Next Set objRecordset = objCommand.Execute If (objRecordset.EOF = True) Then MsgBox "The username '" & strUser & "' cannot be found." , vbExclamation, "Error" Exit Sub End If Do Until objRecordset.EOF strUserDN = objRecordset.Fields("distinguishedName").Val ue objRecordset.MoveNext Loop objRecordset.Close Set objUser = GetObject("LDAP://" & strUserDN) If cbxL3ForceChange.Checked = True Then objUser.Put "pwdLastSet" , 0 Err.Clear If Trim(strPassword) <> "" Then objUser.SetPassword strPassword objUser.SetInfo intErr = Err.Number If intErr <> 0 Then Select Case intErr Case -2147022651, -2147016651 MsgBox "There was an error setting the p assword for '" & _ Trim(txtL3Username.Value) & "':" & vbCrL f & vbCrLf & _ "The password does not meet the password policy requirements. " & _ "Check the minimum password length, pass word complexity and " & _ "password history requirements, as state d in the Info section.", _ vbExclamation, "Error" Case Else MsgBox "There was an unspecified error s etting the password for '" & _ Trim(txtL3Username.Value) & "'", vbExcla mation, "Error" End Select Else MsgBox "The password for '" & Trim(txtL3Username .Value) & _ "' has now been amended.", vbInformation, "AD Ma nagement Utility" End If pwdL3Pwd.Value = ""

txtL3Pwd.Value = "" cbxL3ForceChange.Checked = False cbxL3ShowPwd.Checked = False ShowPassword() ShowL3UserInfo(strUser) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ShowPassword() '# PURPOSE........: Shows the password in the password box '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ShowPassword() If cbxL3ShowPwd.Checked Then pwdL3Pwd.className = "hidden" txtL3Pwd.className = "infoTD" txtL3Pwd.Value = pwdL3Pwd.Value Else txtL3Pwd.className = "infoTD hidden" pwdL3Pwd.className = "infoTD" pwdL3Pwd.Value = txtL3Pwd.Value End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: CheckStrength(strPassword) '# PURPOSE........: Checks the strength of the password entered and '# displays info to user '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub CheckStrength(strPassword) Dim arrStrength(6) arrStrength(0) = "" arrStrength(1) = "Very Weak" arrStrength(2) = "Weak" arrStrength(3) = "Medium" arrStrength(4) = "Strong" arrStrength(5) = "Very Strong" intScore = 1 x = 0 L3Box01.style.color = "black" If Len(strPassword) < 1 Then L3Box01.style.backgroundcolor = "white" L3Box01.Title = "" StrengthSpan.InnerHTML = arrStrength(0) Exit Sub End If If Len(strPassword) > 4 AND InStr(LCase(strPassword),"password") = 0 Then If Len(strPassword) >= 8 Then

intScore = intScore + 1 End If If Len(strPassword) >= 12 Then intScore = intScore + 1 End If Set regex = New RegExp regex.Pattern = "\d+" If regex.Test(strPassword) Then x = x + 1 End If regex.Pattern = "[a-z]" If regex.Test(strPassword) Then x = x + 1 End If regex.Pattern = "[A-Z]" If regex.Test(strPassword) Then x = x + 1 End If regex.Pattern = ".[!,@,#,$,%,^,&,*,?,_,~,-,,(,)]" If regex.Test(strPassword) Then intScore = intScore + 1 x = x + 1 End If For i = 1 to Len(strPassword) z = 0 strTestLetter = LCase(Mid(strPassword, i, 1)) For y = 1 To Len(strPassword) If strTestLetter = LCase(Mid(strPassword , y, 1)) Then z = z + 1 End If Next pctTest = z / Len(strPassword) * 100 If pctTest > 40 Then If intScore <> 1 Then intScore = intScore - 1 Else x = 0 intScore = 1 End If End If If pctTest = 100 Then x = 0 intScore = 1 End If Next If x >= 2 Then intScore = intScore + 1 If intScore >= 5 Then intScore = 5 If Len(strPassword) < 12 AND intScore = 5 Then intScore = 4 If Len(strPassword) < 8 AND intScore > 3 Then intScore = 3

End If Select Case intScore Case 1 L3Box01.style.backgroundcolor Case 2 L3Box01.style.backgroundcolor Case 3 L3Box01.style.backgroundcolor Case 4 L3Box01.style.backgroundcolor Case 5 L3Box01.style.backgroundcolor L3Box01.style.color = "white" End Select

= "red" = "#FF9900" = "#FFFF00" = "99FF00" = "green"

L3Box01.Title = "Password Strength: " & arrStrength(intScore) StrengthSpan.InnerHTML = arrStrength(intScore) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ResetLayout3() '# PURPOSE........: Resets form for the UAC info '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub ResetLayout3() L3Enabled.InnerHTML = "&nbsp;" L3dtmLastLogon.InnerHTML = "&nbsp;" L3Locked.InnerHTML = "&nbsp;" L3dtmCreatedOn.InnerHTML = "&nbsp;" L3dtmChangedOn.InnerHTML = "&nbsp;" L3dtmPwdLastSet.InnerHTML = "&nbsp;" L3Name.InnerHTML = "&nbsp;" L3Phone.InnerHTML = "&nbsp;" L3Email.InnerHTML = "&nbsp;" L3PassStatus.InnerHTML = "&nbsp;" EditUserSpan.InnerHTML = "" pwdL3Pwd.Value = "" StrengthSpan.InnerHTML = "" cbxL3ForceChange.Checked = False cbxL3ShowPwd.Checked = False cbxL3DisableAcc.Checked = False cbxL3DisableAcc.Checked = False cbxL3UnlockAcc.Checked = False L3Enabled.className = "InfoTD disabled" L3dtmLastLogon.className = "InfoTD disabled" L3Locked.className = "InfoTD disabled" L3dtmCreatedOn.className = "InfoTD disabled" L3dtmChangedOn.className = "InfoTD disabled" L3dtmPwdLastSet.className = "InfoTD disabled" L3Name.className = "InfoTD disabled" L3Phone.className = "InfoTD disabled" L3Email.className = "InfoTD disabled" StrengthSpan.style.color = "" pwdL3Pwd.className = "InfoTD disabled"

txtL3Pwd.className = "InfoTD hidden" btnL3ResetPwd.className = "button disabled" cbxL3ForceChange.className = "checkbox disabled" cbxL3ShowPwd.className = "checkbox disabled" btnL3Commit.className = "button disabled" cbxL3DisableAcc.className = "checkbox disabled" cbxL3UnlockAcc.className = "checkbox disabled" btnL3Commit.className = "button disabled" btnL3Reset.className = "button disabled" btnL3PrintNow.className = "button disabled" L3Box10.InnerHTML = "Disable Account:" L3Box01.className = "L3 L3Upper L3Left L3Right disabled" L3Box01.style.backgroundcolor = "#eeeeee" L3Box02.className = "L3 L3Left disabled" L3Box03.className = "L3 L3Right disabled" L3Box04.className = "L3 L3Left L3Right disabled" L3Box05.className = "L3 L3Left L3Right disabled" L3Box06.className = "L3 L3Middle L3Left disabled" L3Box07.className = "L3 L3Middle disabled" L3Box08.className = "L3 L3Middle disabled" L3Box09.className = "L3 L3Middle L3Right disabled" L3Box10.className = "L3 L3Left disabled" L3Box11.className = "L3 disabled" L3Box12.className = "L3 L3Lower L3Left L3Right disabled" btnL3PrintNow.Title = "" btnL3Reset.Title = "" cbxL3DisableAcc.Title = "" cbxL3ShowPwd.Title = "" cbxL3ForceChange.Title = "" L3Name.Title = "" L3Phone.Title = "" L3Email.Title = "" L3dtmCreatedOn.Title = "" L3dtmChangedOn.Title = "" L3dtmPwdLastSet.Title = "" L3dtmLastLogon.Title = "" L3Enabled.Title = "" L3Locked.Title = "" EditUserSpan.Title = "" pwdL3Pwd.Title = "" btnL3ResetPwd.Title = "" btnL3Commit.Title = "" pwdL3Pwd.Disabled = True btnL3ResetPwd.Disabled = True cbxL3ForceChange.Disabled = True cbxL3ShowPwd.Disabled = True btnL3Commit.Disabled = True cbxL3DisableAcc.Disabled = True cbxL3UnlockAcc.Disabled = True btnL3Commit.Disabled = True btnL3Reset.Disabled = True btnL3PrintNow.Disabled = True txtL3Username.Disabled = False txtL3Username.className = "text"

txtL3Username.Value = "Username" txtL3Username.style.color = "#888888" btnL3Search.Disabled = False btnL3Search.className = "button" ChangeLayout(Layout3) End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ClearUsername(objUsernameItem) '# PURPOSE........: Clears the "Username" text onClick '# ARGUMENTS......: objUsernameItem = ID of username search box '# EXAMPLE........: ClearUsername(txtLUUsername) '# NOTES..........: '#-------------------------------------------------------------------------Sub ClearUsername(objUsernameItem) If Right(objUsernameItem.Value, 8) = "Username" OR Right(objUser nameItem.Value, 12) = "User / Group" Then objUsernameItem.style.color = "black" objUsernameItem.Value = "" End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: UnknownUserSearch(strInput, intSource) '# PURPOSE........: Performs search where unknown username entered, '# shows info in table on l eft of app '# ARGUMENTS......: strInput = Username entered '# intSource = Original rou tine '# EXAMPLE........: UnknownUserSearch("john", 1) '# NOTES..........: '#-------------------------------------------------------------------------Sub UnknownUserSearch(strInput, intSource) i = 0 strHTML = "<table style=""border-collapse:collapse;table-layout: fixed;"">" strHTML = strHTML & "<tr><th colspan=2 style=""background-color: black;color:white;"">" strHTML = strHTML & "<span style=""float:left;margin-left:125px; "">Search</span>" strHTML = strHTML & "<span style=""float:right;cursor:hand;margi n-right:10px;"" onClick=""CloseSearch(" & intSource & ")"" title=""Close"">X</sp an></th></tr>" Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection Set objCommand.ActiveConnection = objConnection strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(&(objectClass=user)(|(sAMAccountName=*" & strInput & "*)(displayName=*" & strInput & "*)))"

strAttributes = "distinguishedName,sAMAccountName,displayName,ob jectCategory" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery objCommand.Properties("Page Size") = 1000 objCommand.Properties("Timeout") = 30 objCommand.Properties("Cache Results") = False objCommand.Properties("Sort on") = "sAMAccountName" On Error Resume Next Set objRecordset = objCommand.Execute If objRecordset.EOF = True Then CloseSearch(intSource) MsgBox "No users have been found.", vbInformation, "AD M anagement Utility" Exit Sub End If booSearched = 1 Set objRecordset = objCommand.Execute Do Until objRecordset.EOF strUser = objRecordset.Fields("sAMAccountName").Value strName = objRecordset.Fields("displayName").Value objRecordset.MoveNext If NOT IsNull(strUser) AND NOT IsNull(strName) Then strNewUser = Replace(strUser, "'", "||") strNewUser = Replace(strNewUser, Chr(34), "{}") strNewUser = Replace(strNewUser, " ", "<>") strUser = Replace(strUser, "'", "") strUser = Replace(strUser, Chr(34), "") strName = Replace(strName, "'", "") strName = Replace(strName, Chr(34), "") strHTML = strHTML & "<tr>" strHTML = strHTML & "<td style=""backgroundcolor:white;border-left:1px solid black;border-bottom:1px solid black;"">" strHTML = strHTML & "<span class=""s panlink"" onClick='ShowSearchUser """ & strNewUser & """," & intSource & "' titl e=""Pick user '" & strUser & "'"">" & strUser & "</span>" strHTML = strHTML & "</td>" strHTML = strHTML & "<td style=""backgroundcolor:white;border-right:1px solid black;border-bottom:1px solid black;"">" strHTML = strHTML & strName strHTML = strHTML & "</td>" strHTML = strHTML & "</tr>" i = i + 1 End If Loop objRecordset.Close strHTML = strHTML & "</table>" If intSource = 2 OR intSource = 4 Then

GroupSelect.Disabled = True btnLGDelete.Disabled = True btnLGDelete.className = "button disabled" btnLGDelete.title = "" 'If GroupMembersSelect.Disabled = False Then GroupMember sSelect.Disabled = True End If UsernameSearchSpan.InnerHTML = strHTML If i > 1 Then UsernameSearchSpan.className = "" Else ShowSearchUser strNewUser, intSource End If objRecordset.Close End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: '# ARGUMENTS......: '# tine '# EXAMPLE........: '# NOTES..........: hsmi '#-------------------------------------------------------------------------Sub ShowSearchUser(strUser, intChoice) UsernameSearchSpan.className = "hidden" GroupSelect.Disabled = False btnLGDelete.Disabled = False btnLGDelete.className = "button" btnLGDelete.title = "Delete group" 'If GroupMembersSelect.Disabled = False Then GroupMembersSelect. Disabled = True strUser = Replace(strUser, "||", "'") strUser = Replace(strUser, "{}", Chr(34)) strUser = Replace(strUser, "<>", " ") Select Case intChoice Case 1 ShowUserInfo(strUser) Case 2 txtLGUsername2.Value = strUser ShowUserGroups() Case 3 ShowL3UserInfo(strUser) Case 4 txtLGUsername.Value = strUser AddGroupUser() End Select End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: '# PURPOSE........: '# ARGUMENTS......: CloseSearch(intChoice) Closes search box intChoice = Original routine CloseSearch("johsmi", 1) Above example would open Edit screen for user jo ShowSearchUser(strUser, intChoice) Shows the info for the chosen user strUser = Username intChoice = Original rou

'# EXAMPLE........: CloseSearch(1) '# NOTES..........: Above example would close search for Edit screen '#-------------------------------------------------------------------------Sub CloseSearch(intChoice) GroupSelect.Disabled = False btnLGDelete.Disabled = False btnLGDelete.className = "button" btnLGDelete.title = "Delete group" GroupMembersSelect.Disabled = False Select Case intChoice Case 1 txtLUUsername.Value = "Username" txtLUUsername.style.color = "#888888" Case 2 txtLGUsername2.Value = "Username" txtLGUsername2.style.color = "#888888" Case 3 txtL3Username.Value = "Username" txtL3Username.style.color = "#888888" Case 4 txtLGUsername.Value = "User / Group" txtLGUsername.style.color = "#888888" Case Else End Select UsernameSearchSpan.className = "hidden" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ClearListbox(objListbox) '# PURPOSE........: Clears specified listbox '# ARGUMENTS......: objListbox = name of listbox to clear '# EXAMPLE........: ClearListbox(EmailSelect) '# NOTES..........: '#-------------------------------------------------------------------------Sub ClearListbox(objListbox) For Each objOption In objListbox.Options objOption.RemoveNode Next End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: ChangeLayout(strLayout) '# PURPOSE........: Changes display to show required tab in app '# ARGUMENTS......: strLayout = html div to show '# EXAMPLE........: ChangeLayout(layout1) '# NOTES..........: '#-------------------------------------------------------------------------Sub ChangeLayout(strLayout) loadingdiv.className = "hidden" layout1.className = "hidden" layout2.className = "hidden" layout3.className = "hidden" layoutuser.className = "hidden" layoutgroup.className = "hidden" layoutsettings.className = "hidden" UserTableSpan.className = "hidden" PCTableSpan.className = "hidden"

GroupTableSpan.className = "hidden" UserExportOptionsSpan.className = "hidden" CloseExportScreen() CloseSearch(0) strLayout.className = "" End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: SetRootOU() '# PURPOSE........: Sets the Root OU for the search '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub SetRootOU() On Error Resume Next strOU = txtRootOU.Value If strOU = "" Then Exit Sub Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 1000 strBase = "<LDAP://" & strOU & ">" strFilter = "(&(objectclass=user)(objectcategory=person))" strAttributes = "adspath" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";s ubtree" objCommand.CommandText = strQuery Set objRecordSet = objCommand.Execute If objRecordset.EOF = True Then MsgBox "There are no users in the specified OU, or the O U has been entered " & _ "incorrectly.", vbInformation, "AD Management Utility" txtRootOU.Value = strRootOU Else strRootOU = strOU objShell.RegWrite "HKCU\Software\SKB\ADManagemen tUtil\Setup\strRootOU", _ strRootOU, "REG_SZ" UserTableSpan.InnerHTML = "" PCTableSpan.InnerHTML = "" GroupTableSpan.InnerHTML = "" Set UserDataList = CreateObject("ADOR.Recordset" ) Set PCDataList = CreateObject("ADOR.Recordset") Set GroupDataList = CreateObject("ADOR.Recordset ") PopulateLayout1() ChangeLayout(Layout1)

End If End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: GetDomain() '# PURPOSE........: Retrieves current domain and Root OU '# ARGUMENTS......: '# EXAMPLE........: '# NOTES..........: '#-------------------------------------------------------------------------Sub GetDomain() On Error Resume Next strVersion = objShell.RegRead("HKCU\Software\SKB\ADManagementUti l\Setup\strVersion") If strVersion < 1.2 Then strDomain = objShell.RegRead("HKCU\Software\SKB\ADEvalua tor\Setup\strDomain") strDNSDomain = objShell.RegRead("HKCU\Software\SKB\ADEva luator\Setup\strDNSDomain") strRootOU = objShell.RegRead("HKCU\Software\SKB\ADEvalua tor\Setup\strRootOU") If strDomain <> "" Then _ objShell.RegWrite "HKCU\Software\SKB\ADManagemen tUtil\Setup\strDomain", _ strDomain, "REG_SZ" If strDNSDomain <> "" Then _ objShell.RegWrite "HKCU\Software\SKB\ADManagemen tUtil\Setup\strDNSDomain", _ strDNSDomain, "REG_SZ" If strRootOU <> "" Then _ objShell.RegWrite "HKCU\Software\SKB\ADManagemen tUtil\Setup\strRootOU", _ strRootOU, "REG_SZ" objShell.RegDelete("HKCU\Software\SKB\ADEvaluator\Setup\ strDomain") objShell.RegDelete("HKCU\Software\SKB\ADEvaluator\Setup\ strDNSDomain") objShell.RegDelete("HKCU\Software\SKB\ADEvaluator\Setup\ strRootOU") objShell.RegDelete("HKCU\Software\SKB\ADEvaluator\Setup\ ") objShell.RegDelete("HKCU\Software\SKB\ADEvaluator\") End If strDomain = objShell.RegRead("HKCU\Software\SKB\ADManagementUtil \Setup\strDomain") strDNSDomain = objShell.RegRead("HKCU\Software\SKB\ADManagementU til\Setup\strDNSDomain") strRootOU = objShell.RegRead("HKCU\Software\SKB\ADManagementUtil \Setup\strRootOU") objShell.RegWrite "HKCU\Software\SKB\ADManagementUtil\Setup\strV ersion", _ objADManage.Version, "REG_SZ"

If strDomain = "" OR strDNSDomain = "" Then Set objNetwork = CreateObject("WScript.Network") strDomain = objNetwork.UserDomain Set objRootDSE = GetObject("LDAP://RootDSE") strDNSDomain = objRootDSE.Get("defaultNamingContext") objShell.RegWrite "HKCU\Software\SKB\ADManagementUtil\Se tup\strDomain", _ strDomain, "REG_SZ" objShell.RegWrite "HKCU\Software\SKB\ADManagementUtil\Se tup\strDNSDomain", _ strDNSDomain, "REG_SZ" End If If strRootOU = "" Then strRootOU = strDNSDomain objShell.RegWrite "HKCU\Software\SKB\ADManagementUtil\Se tup\strRootOU", _ strRootOU, "REG_SZ" End If txtRootOU.Value = strRootOU txtRootOU.title = "Root OU: " & strRootOU End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: PauseScript(intPause) '# PURPOSE........: Pauses the script '# ARGUMENTS......: intPause = number of milliseconds to pause '# EXAMPLE........: PauseScript(1000) '# NOTES..........: Above example will pause script for 1 second '#-------------------------------------------------------------------------Sub PauseScript(intPause) objShell.Run "%COMSPEC% /c ping -w " & intPause & " -n 1 1.0.0.0 ", 0, True End Sub '#------------------------------------------------------------------------'# SUBROUTINE.....: OpenURL(strURL) '# PURPOSE........: Opens the supplied URL in default browser '# ARGUMENTS......: strURL = URL '# EXAMPLE........: OpenURL("http://www.imdb.com/find?q=The_Social_N etwork" '# NOTES..........: Any spaces in URL must be encoded as underscores ( _ ) '#-------------------------------------------------------------------------Sub OpenURL(strURL) strURL = Replace(strURL, "_", " ") objShell.Run(Chr(34) & strURL & Chr(34)) End Sub '#------------------------------------------------------------------------'# '# '# '# '# SUBROUTINE.....: PURPOSE........: ARGUMENTS......: EXAMPLE........: NOTES..........: OpenSettings() Opens Settings menu

'#------------------------------------------------------------------------Sub OpenSettings() booDisableCount = objShell.RegRead("HKCU\Software\SKB\ADManageme ntUtil\Setup\booDisableCount") booShowListMsg = objShell.RegRead("HKCU\Software\SKB\ADManagemen tUtil\Setup\booShowListMsg") booOptimiseSearch = objShell.RegRead("HKCU\Software\SKB\ADManage mentUtil\Setup\booOptimiseSearch") booCacheGroups = objShell.RegRead("HKCU\Software\SKB\ADManagemen tUtil\Setup\booCacheGroups") If booDisableCount = 1 Then cbxDisableCount.Checked = True Else cbxDisableCount.Checked = False End If If booShowListMsg = 1 Then cbxShowListMsg.Checked = True Else cbxShowListMsg.Checked = False End If If booCacheGroups = 1 Then cbxCacheGroups.Checked = True Else cbxCacheGroups.Checked = False End If LSEfficiencySelect.Value = booOptimiseSearch ChangeLayout(LayoutSettings) End Sub '#------------------------------------------------------------------------'# '# '# '# '# ---Sub ChangeSettings(intChoice) On Error Resume Next Select Case intChoice Case 1 If cbxDisableCount.Checked = True Then booDisableCount = 1 Else booDisableCount = 0 End If objShell.RegWrite "HKCU\Software\SKB\ADManagemen tUtil\Setup\booDisableCount", _ booDisableCount, "REG_DWORD" RestartPrompt = MsgBox("This requires a restart of the app to become effective. " & _ vbCrLf & vbCrLf & "Do you wish to restart the ap p now?", vbQuestion+vbYesNo, "AD Management Utility") If RestartPrompt = vbYes Then Window.Close SUBROUTINE.....: ChangeSettings() PURPOSE........: Opens Settings menu ARGUMENTS......: EXAMPLE........: NOTES..........: '#----------------------------------------------------------------------

objShell.Run objADManage.commandLine Exit Sub End If Case 2 If cbxShowListMsg.Checked = True Then booShowListMsg = 1 Else booShowListMsg = 0 End If objShell.RegWrite "HKCU\Software\SKB\ADManagemen tUtil\Setup\booShowListMsg", _ booShowListMsg, "REG_DWORD" Case 3 booOptimiseSearch = LSEfficiencySelect.Value objShell.RegWrite "HKCU\Software\SKB\ADManagemen tUtil\Setup\booOptimiseSearch", _ booOptimiseSearch, "REG_DWORD" Case 4 If cbxCacheGroups.Checked = True Then booCacheGroups = 1 Else booCacheGroups = 0 End If objShell.RegWrite "HKCU\Software\SKB\ADManagemen tUtil\Setup\booCacheGroups", _ booCacheGroups, "REG_DWORD" End Select End Sub '#------------------------------------------------------------------------'# '# '# '# '# ---Sub Window_onLoad() self.ResizeTo 810,610 GetDomain() PauseScript(1) On Error Resume Next booDisableCount = objShell.RegRead("HKCU\Software\SKB\ADManageme ntUtil\Setup\booDisableCount") booShowListMsg = objShell.RegRead("HKCU\Software\SKB\ADManagemen tUtil\Setup\booShowListMsg") booOptimiseSearch = objShell.RegRead("HKCU\Software\SKB\ADManage mentUtil\Setup\booOptimiseSearch") booCacheGroups = objShell.RegRead("HKCU\Software\SKB\ADManagemen tUtil\Setup\booCacheGroups") If booDisableCount = "" Then booDisableCount = 1 objShell.RegWrite "HKCU\Software\SKB\ADManagementUtil\Se tup\booDisableCount", _ booDisableCount, "REG_DWORD" SUBROUTINE.....: Window_onLoad() PURPOSE........: Performs onLoad actions ARGUMENTS......: EXAMPLE........: NOTES..........: '#----------------------------------------------------------------------

End If If booShowListMsg = "" Then booShowListMsg = 1 objShell.RegWrite "HKCU\Software\SKB\ADManagementUtil\Se tup\booShowListMsg", _ booShowListMsg, "REG_DWORD" End If If booOptimiseSearch = "" Then booOptimiseSearch = 0 objShell.RegWrite "HKCU\Software\SKB\ADManagementUtil\Se tup\booOptimiseSearch", _ booOptimiseSearch, "REG_DWORD" End If If booCacheGroups = "" Then booCacheGroups = 0 objShell.RegWrite "HKCU\Software\SKB\ADManagementUtil\Se tup\booCacheGroups", _ booCacheGroups, "REG_DWORD" End If VersionSpan.InnerHTML = "Version " & objADManage.Version & "&nbs p;&nbsp;&nbsp;" & _ "Created by Stuart Barrett" SettingsLabel.className = "" PopulateLayout1() ChangeLayout(Layout1) strSortUserDataList = "sAMAccountName ASC" strSortPCDataList = "name ASC" strSortGroupDataList = "name ASC" ResetSortOrders(1) ResetSortOrders(2) ResetSortOrders(3) booUserSort = 2 booPCNameSort = 2 booGroupNameSort = 2 End Sub '#------------------------------------------------------------------------'# FUNCTION.......: EncodeCsv(strText) '# PURPOSE........: Encode provided text for CSV export '# ARGUMENTS......: strText = text to encode '# EXAMPLE........: EncodeCsv("Some text, etc.") '# NOTES..........: '#-------------------------------------------------------------------------Function EncodeCsv(strText) strText = Replace(strText, Chr(34), "") strText = Replace(strText, VbCrLf, ", ") strText = Chr(34) & strText & Chr(34) EncodeCsv = strText End Function '#------------------------------------------------------------------------'# FUNCTION.......: '# PURPOSE........: Integer8Date(objDate, lngBias) Converts an Integer8 (64-bit) value to a date,

'# adjusted for local time zone bias '# ARGUMENTS......: objDate = date value to be converted '# lngBias = local time zon e bias '# EXAMPLE........: Integer8Date(x, -60) '# NOTES..........: '#-------------------------------------------------------------------------Function Integer8Date(objDate, lngBias) lngAdjust = lngBias lngHigh = objDate.HighPart lngLow = objDate.LowPart If (lngLow < 0) Then lngHigh = lngHigh + 1 End If If (lngHigh = 0) And (lngLow = 0) Then lngAdjust = 0 End If lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _ + lngLow) / 600000000 - lngAdjust) / 1440 On Error Resume Next Integer8Date = CDate(lngDate) If Err.Number <> 0 OR Integer8Date = #1/1/1601# Then Integer8Date = 0 End If On Error GoTo 0 End Function </script> <body> <div id="LoadingDiv"> <table id="sublayout"> <tr><td class="layoutheader" style="text-decoration:none;font-si ze:1.3em">Loading, please wait...</td></tr> </table> </div> <div id="TopBar"> <span id="SettingsLabel" class="hidden" style="color:blue;cursor:hand;" onClick="OpenSettings()" title="Open Settings menu">Settings</span>&nbsp;&nbsp;< span id="VersionSpan">&nbsp;</span> </div> <div id="Layout1" class="hidden"> <table id="sublayout1"> <tr><td class="layoutheader">Active Directory Settings</td></tr> <tr> <td style="width:50%;vertical-align:top;"> <table> <tr> <td> Domain Name: </td> <td> <span id="L1strDomain">& nbsp;</span> </td>

</tr> <tr> <td> Root DN: </td> <td> <span id="L1strDNSDomain ">&nbsp;</span> </td> </tr> <tr><td colspan=2>&nbsp;</td></tr> <tr> <td> Lockout Threshold: </td> <td> <span id="L1strLockoutTh reshold" title="The number of failed logon attempts that causes a user account t o be locked out">&nbsp;</span> </td> </tr> <tr> <td> Max Password Age: </td> <td> <span id="L1strMaxPwdAge Days" title="The number of days that a password can be used before the system re quires the user to change it">&nbsp;</span> </td> </tr> <tr> <td> Min Password Age: </td> <td> <span id="L1strMinPwdAge Days" title="The number of days that a password must be used before the user can change it">&nbsp;</span> </td> </tr> <tr> <td> Min Password Length: </td> <td> <span id="L1strMinPwdLen gth" title="The least number of characters that a password for a user account ma y contain">&nbsp;</span> </td> </tr> <tr> <td> Password History: </td> <td> <span id="L1strPwdHistor yLength" title="The number of unique new passwords that have to be associated wi th a user account before an old password can be reused">&nbsp;</span> </td>

</tr> <tr> <td> Password Complexity Poli cy: </td> <td> <span id="L1strPasswordC omplex" title="Determines whether passwords must meet set complexity requirement s.">&nbsp;</span> </td> </tr> <tr><td colspan=2>&nbsp;</td></tr> <tr> <td colspan=2> <span id="L1strLockOutOb servationWindowMinutes">&nbsp;</span> </td> </tr> <tr> <td colspan=2> <span id="L1strLockoutDu rationMinutes">&nbsp;</span> </td> </tr> </table> </td> <td style="width:50%;vertical-align:top;"> <table> <tr> <td> Total OUs: </td> <td> <span id="L1intNumOUs">& nbsp;</span> </td> </tr> <tr> <td> Total Users: </td> <td> <span id="L1intNumUsers" class="spanlink" onClick="ShowTable(1)" style="text-decoration:none;" title="Sh ow a list of all users in AD">&nbsp;</span> </td> </tr> <tr> <td> Total Groups: </td> <td> <span id="L1intNumGroups " class="spanlink" onClick="ShowTable(3)" style="text-decoration:none;" title="S how a list of all groups in AD">&nbsp;</span> </td> </tr> <tr> <td>

Total Computers: </td> <td> <span id="L1intNumPCs" c lass="spanlink" onClick="ShowTable(2)" style="text-decoration:none;" title="Show a list of all computers in AD">&nbsp;</span> </td> </tr> <tr><td colspan=2>&nbsp;</td></tr> <tr> <td> Last User Created: </td> <td> <span id="L1strLastUserC reated" class="spanlink" onClick="ReloadLayoutUser(strLastUserCreated)">&nbsp;</ span> </td> </tr> </table> </td> </tr> </table> <span class="bottommenuright"> <input class="button" type="button" value="REFRESH" style="widt h:100;" name="btnL1Refresh" onClick="RefreshLayout1()" title="Refresh AD Info" o nMouseOver="btnL1Refresh.className='button btnhov'" onMouseOut="btnL1Refresh.cla ssName='button'"> &nbsp;&nbsp;&nbsp; </span> </div> <div id="LayoutUser" class="hidden"> <table id="sublayout2"> <tr><td class="layoutheader">View / Update User Info</td></tr> <tr> <td style="width:55%;vertical-align:top;"> <table> <tr> <td style="vertical-align:bottom ;"> Display Name: </td> </tr> <tr> <td> <input type="text" name= "txtLUDispName" size="53" title="Display Name" disabled=true class="text disable d"> </td> </tr> <tr> <td style="vertical-align:bottom ;"> Title: </td> </tr> <tr> <td> <input type="text" name=

"txtLUTitle" size="53" title="Title" disabled=true class="text disabled"> </td> </tr> <tr> <td style="vertical-align:bottom ;"> <span style="float:left; "> Telephone: </span> <span style="color:red;f ont-size:0.9em;float:right;"> Example: +44 (12 34) 567890 </span> </td> </tr> <tr> <td> <input type="text" name= "txtLUPhN" size="53" title="Telephone" disabled=true class="text disabled"> </td> </tr> <tr> <td style="vertical-align:bottom ;"> <span style="float:left; "> Mobile Phone: </span> <span style="color:red;f ont-size:0.9em;float:right;"> Example: +44 (72 34) 567890 </span> </td> </tr> <tr> <td> <input type="text" name= "txtLUMobile" size="53" title="Mobile Phone" disabled=true class="text disabled" > </td> </tr> <tr> <td style="vertical-align:bottom ;"> Email Address: </td> </tr> <tr> <td> <select name="EmailSelec t" style="width:262;" onChange="SelectEmailAdd()" class="disabled" disabled=true ></select> <input type="text" name= "txtLUEmailAdd" size="41" title="Email Address" class="text hidden" style="margi n-right:7px;"> <span id="EmailLabel" cl

ass="spanlink" style="text-decoration:none;" onClick="ChangeEmailType()"></span> &nbsp; <span id="DelProxyLabel" onClick="DeleteProxyAddress()" class="redbold" style="cursor:hand;"></span> </td> </tr> <tr> <td style="vertical-align:bottom ;" id="LUDelgateLabeltd"> Distinguished Name: </td> </tr> </table> </td> <td style="width:45%;vertical-align:top;"> <table> <tr> <td colspan=2 style="vertical-al ign:bottom;"> Street Address: </td> </tr> <tr> <td colspan=2> <input type="text" name= "txtLUAdd" size="52" title="Street Address" disabled=true class="text disabled"> </td> </tr> <tr> <td colspan=2 style="vertical-al ign:bottom;"> City: </td> </tr> <tr> <td colspan=2> <input type="text" name= "txtLUCity" size="52" title="City" disabled=true class="text disabled"> </td> </tr> <tr> <td colspan=2 style="vertical-al ign:bottom;"> County: </td> </tr> <tr> <td colspan=2> <input type="text" name= "txtLUCounty" size="52" title="Office" disabled=true class="text disabled"> </td> </tr> <tr> <td colspan=2 style="vertical-al ign:bottom;"> Postcode: </td> </tr> <tr> <td colspan=2>

<input type="text" name= "txtLUPostcode" size="52" title="Postcode" disabled=true class="text disabled"> </td> </tr> <tr> <td colspan=2 style="vertical-al ign:bottom;"> Other: </td> </tr> <tr> <td style="width:30%;"> <select name="LUOtherSel ect" disabled=true class="disabled" onChange="GetOtherInfo()" title="Other Field s" style="width:110;"> <option value="0 "> </option> <option value="g ivenName"> First Na me </option> <option value="s n"> Surname </option> <option value="c ompany"> Company </option> <option value="c o"> Country </option> <option value="d epartment"> Departme nt </option> <option value="f acsimileTelephoneNumber"> Fax Numb er </option> <option value="d escription"> Descript ion </option> <option value="p hysicalDeliveryOfficeName"> Office </option> </select> </td> <td> <input type="text" name= "txtLUCustom" size="30" disabled=true class="text disabled"> </td>

</tr> <tr> <td style="vertical-align:bottom ;" id="LUDelgateLabel2td"> &nbsp; </td> </tr> </table> </td> </tr> <tr> <td colspan=2 id="LUDNtd"> <span id="LUDNSpan" class="LUDNSpan disabled" ti tle="Distinguished Name"> &nbsp; </span> </td> <td id="LUDelegatetd" class="hidden"> &nbsp; </td> <td id="LUDelegateBLtd" class="hidden"> &nbsp; </td> </tr> </table> <span class="bottommenuleft"> &nbsp;&nbsp;&nbsp; <input class="button" type="button" value="UPDATE" style="width: 100;" name="btnLUUpdateInf" onClick="UpdateUserInfo()" onMouseOver="btnLUUpdateI nf.className='button btnhov'" onMouseOut="btnLUUpdateInf.className='button'"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input class="button" type="button" value="DELEGATES" style="wid th:100;" name="btnLUDelegates" onClick="ToggleDelegates()" onMouseOver="btnLUDel egates.className='button btnhov'" onMouseOut="btnLUDelegates.className='button'" > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input class="button" type="button" value="PRINT" style="width:6 0;border-right:0px;" name="btnLUPrintNow" onClick="window.print()" onMouseOver=" btnLUPrintNow.className='button btnhov'" onMouseOut="btnLUPrintNow.className='bu tton'"><input class="button" type="button" value="RESET" style="width:60;" name= "btnLUReset" onClick="ResetLayoutUser()" title="Reset form" onMouseOver="btnLURe set.className='button btnhov'" onMouseOut="btnLUReset.className='button'"> </span> <span class="bottommenuright"> <span id="ViewUACSpan" class="spanlink" onClick="ShowL3UserInfo( txtLUUsername.Value)"></span> <p style="margin-top:5px;"> <input type="text" name="txtLUUsername" size="20" title= "Username" class="text" style="border-width:2px;border-right:0px;height:27;color :#888888;" value="Username" onFocus="ClearUsername(txtLUUsername)"><input class= "button" type="button" value="SEARCH" style="width:60;" name="btnLUSearch" onCli ck="ShowUserInfo(txtLUUsername.Value)" title="Search username" onMouseOver="btnL USearch.className='button btnhov'" onMouseOut="btnLUSearch.className='button'"> &nbsp;&nbsp;&nbsp; </p> </span> </div> <div id="LayoutGroup" class="hidden"> <table id="sublayout4">

<tr><td class="layoutheader">Manage Groups</td></tr> <tr> <td rowspan=2> <p> <input type="text" name="txtLGFilter" si ze="40" class="text" style="border-width:2px;height:27;border-right:0px;color:#8 88888;" onFocus="ClearFilterText()" onKeyUp="FilterGroups()" value="Filter...">< input class="button" type="button" value="CLEAR" style="width:75;" name="btnLGCl earFilter" onClick="ResetLayoutGroup()" onMouseOver="btnLGClearFilter.className= 'button btnhov'" onMouseOut="btnLGClearFilter.className='button'" title="Clear f ilter"> </p> <p style="font-weight:bold;float:left;">Groups</ p> <p id="L1intGroups" style="font-weight:bold;floa t:right;margin-right:5px;"></p> <select name="GroupSelect" size="15" style="widt h:100%;height:auto;" onChange="ShowMembers()"></select> <select name="GroupFilterSelect" size="15" style ="width:100%;height:auto;" onChange="ShowFilterMembers()" class="hidden"></selec t> <table style="width:100%"><tr><td> <span style="display:block;"> <p style="float:left;"> <input class="button" type="butt on" value="RELOAD" style="width:90;" name="btnLGReload" onClick="ReloadGroups()" onMouseOver="btnLGReload.className='button btnhov'" onMouseOut="btnLGReload.cla ssName='button'" title="Reload cached groups"> </p> <p style="float:right;"> <input class="button" type="butt on" value="DELETE" style="width:90;" name="btnLGDelete" onClick="DeleteGroup()" onMouseOver="btnLGDelete.className='button btnhov'" onMouseOut="btnLGDelete.clas sName='button'"> </p> </span> </td></tr> <tr><td> <span style="font-weight:bold;">Description</spa n><br /> <span id="GroupDescSpan" style="height:40;width: 100%;overflow:auto;padding:5px;">&nbsp;</span></td></tr></table> </td> <td style="vertical-align:top;"> <p style="font-weight:bold;float:left;">Members< /p> <p id="L1intMembers" style="font-weight:bold;flo at:right;margin-right:5px;"></p> <select name="GroupMembersSelect" size="8" style ="width:100%;height:auto;" onChange="ChooseMember()" onDblClick="ChangeGroup(1)" class="disabled"></select> <p style="float:left;"> <input class="button disabled" type="but ton" value="REMOVE" style="width:100;" name="btnLGRemove" onClick="RemoveGroupUs er()" onMouseOver="btnLGRemove.className='button btnhov'" onMouseOut="btnLGRemov e.className='button'" disabled=true> </p> <p style="float:right;">

<input type="text" name="txtLGUsername" size="20" class="text disabled" style="border-width:2px;height:27;color:#888888; border-right:0px" value="User / Group" onFocus="ClearUsername(txtLGUsername)" di sabled=true><input class="button disabled" type="button" value="ADD" style="widt h:60;" name="btnLGAdd" onClick="AddGroupUser()" onMouseOver="btnLGAdd.className= 'button btnhov'" onMouseOut="btnLGAdd.className='button'" disabled=true> </p> </td> </tr> <tr> <td style="vertical-align:bottom;"> <p style="font-weight:bold;float:left;">User Gro up Membership</p> <p id="L1intGroupMembership" style="font-weight: bold;float:right;margin-right:5px;"></p> <select name="UserGroupsSelect" size="8" style=" width:100%;height:auto;" onChange="ChooseUserGroup()" class="disabled" onDblClic k="ChangeGroup(2)"></select> <p style="float:left;"> <input class="button disabled" type="but ton" value="REMOVE" style="width:100;" name="btnLGRemove2" onClick="RemoveUserGr oup()" onMouseOver="btnLGRemove2.className='button btnhov'" onMouseOut="btnLGRem ove2.className='button'" disabled=true> </p> <p style="float:right;"> <input type="text" name="txtLGUsername2" size="20" title="Username" class="text" style="border-width:2px;height:27;color :#888888;border-right:0px" value="Username" onFocus="ClearUsername(txtLGUsername 2)" onKeyDown="ResetGroupMemberships()"><input class="button" type="button" valu e="SEARCH" style="width:60;" name="btnLGUserSearch" onClick="ShowUserGroups()" t itle="View group memberships for user" onMouseOver="btnLGUserSearch.className='b utton btnhov'" onMouseOut="btnLGUserSearch.className='button'"> </p> </td> </tr> </table> <span class="bottommenuleft"> &nbsp;&nbsp;&nbsp; <input class="button" type="button" value="RESET" style="width:9 0;" name="btnLGReset" onClick="ResetLayoutGroup()" onMouseOver="btnLGReset.class Name='button btnhov'" onMouseOut="btnLGReset.className='button'" title="Reset fo rm"> </span> </div> <div id="LayoutSettings" class="hidden"> <table id="sublayout5"> <tr><td class="layoutheader">Settings</td></tr> <tr> <td>Disable AD counts on Info menu (requires app restart )</td> <td><input type="checkbox" name="cbxDisableCount" onClic k="ChangeSettings(1)" title="Disable AD counts and Last Created user on Info men u to make opening app quicker (requires app restart)"></td> </tr> <tr> <td>Show Warning message on opening List menu</td> <td><input type="checkbox" name="cbxShowListMsg" onClick ="ChangeSettings(2)" title="Show Warning message on opening List menu to eradica

te opening it by accident thus hanging the app in large domains"></td> </tr> <tr> <td>Cache Group Names</td> <td><input type="checkbox" name="cbxCacheGroups" onClick ="ChangeSettings(4)" title="Cache group info so that they will not be pulled fro m AD on opening the Groups menu"></td> </tr> <tr> <td>Optimise searches for</td> <td> <select name="LSEfficiencySelect" title="Choose how to optimise searches" onChange="ChangeSettings(3)" style="width:150;"> <option value=0 title="Optimise for quic ker searches - on searching a username with a near duplicate in AD only the firs t will be shown">Quicker Searches</option> <option value=1 title="Optimise for bett er search results - on searching a username with a near duplicate in AD all will be shown but it will take longer to process">Better Results</option> </select> </td> </tr> <tr> </table> <br /> <hr style="width:90%;" /> <br> <table><tr><td> Thank you for using my AD Management Utility, created with love (and a little bit of code!) <p> If you find it useful and feel like making a donation... well, you can't, so just bask in the glory of the fact that you're such a wonde rful person that you actually thought about it, and let's face it.. it's the tho ught that counts! </p> </td></tr></table> <span id="SpiceworksGush" title="I heart Spiceworks!"> For more scripts like this and a whole plethora of other IT good ness please head on over to the <a href="#" style="font-weight:bold" title="http ://www.spiceworks.com/community" onClick="OpenURL('http://www.spiceworks.com/com munity')">Spiceworks Community</a> where you will be welcomed like an old <span style="font-weight:bold;" title="Spicehead (n) - the name given to a user of Spi ceworks">Spicehead!</span> <p> Also please take a look at the <a href="#" style="font-w eight:bold" title="http://www.spiceworks.com" onClick="OpenURL('http://www.spice works.com/referrer/stubar')">Spiceworks app</a>, if you're in IT you need this " Everything IT" tool in your life! </p> </span> </div> <div id="Layout2" class="hidden"> <select name="L2TypeSelect" title="Choose the data to show" onCh ange="ShowTable(L2TypeSelect.Value)" style="width:150;"> <option value=1 title="Show a list of all users in AD">U sers</option> <option value=2 title="Show a list of all computers in A

D">Computers</option> <option value=3 title="Show a list of all groups in AD"> Groups</option> </select> &nbsp;&nbsp; <select name="ExportSelect" title="Export the list" onChange="Ex portDetails()" style="width:150;"> <option value="0">Export to:</option> <option value="1" title="Export list to a Comma Seperate d Values (csv) file">Export to csv</option> <option value="2" title="Export list to an Excel (xls) f ile">Export to xls</option> <option value="3" title="Export list to a Web page (html ) file">Export to html</option> </select> &nbsp;&nbsp; <input class="button" type="button" value="REFRESH" style="width :100;height:23px" name="btnL2Refresh" onClick="RefreshTableData()" onMouseOver=" btnL2Refresh.className='button btnhov'" onMouseOut="btnL2Refresh.className='butt on'" title="Refresh data in current list view"> <br /> </div> <span id="UserExportOptionsSpan" class="hidden"> <table style="width:100%;border-bottom:1px solid black;"> <tr> <th style="color:white;background-color:black;"> <span style="float:left;margin-left:145px;">Expo rt</span> <span style="float:right;cursor:hand;margin-righ t:10px;" onClick="CloseExportScreen()" title="Close">X</span> </th> </tr> </table> <form name="UserExportForm" method="post"> <table style="width:100%;margin-top:0px;"> <tr> <td> <table> <tr> <td>Username</td> <td><input type="checkbo x" disabled=true checked=true></td> </tr> <tr> <td>Display Name</td> <td><input type="checkbo x" name="cbxDispNameX"></td> </tr> <tr> <td>First Name</td> <td><input type="checkbo x" name="cbxFirstNameX"></td> </tr>

<tr> <td>Surname</td> <td><input type="checkbo x" name="cbxSurnameX"></td> </tr> <tr> <td>Title</td> <td><input type="checkbo x" name="cbxTitleX"></td> </tr> <tr> <td>Telephone</td> <td><input type="checkbo x" name="cbxTelephoneNumberX"></td> </tr> <tr> <td>Mobile</td> <td><input type="checkbo x" name="cbxMobileX"></td> </tr> <tr> <td>Fax No</td> <td><input type="checkbo x" name="cbxFaxNoX"></td> </tr> <tr> <td>Email</td> <td><input type="checkbo x" name="cbxEmailX"></td> </tr> <tr> <td>Description</td> <td><input type="checkbo x" name="cbxDescriptionX"></td> </tr> </table> </td> <td> <table> <tr> <td>Street Address</td> <td><input type="checkbo x" name="cbxStreetAddressX"></td> </tr> <tr> <td>City</td> <td><input type="checkbo x" name="cbxCityX"></td> </tr> <tr> <td>County</td> <td><input type="checkbo x" name="cbxCountyX"></td> </tr> <tr> <td>Postcode</td> <td><input type="checkbo x" name="cbxPostcodeX"></td> </tr> <tr>

<td>Country</td> <td><input type="checkbo x" name="cbxCountryX"></td> </tr> <tr> <td>Office</td> <td><input type="checkbo x" name="cbxOfficeX"></td> </tr> <tr> <td>Department</td> <td><input type="checkbo x" name="cbxDepartmentX"></td> </tr> <tr> <td>Company</td> <td><input type="checkbo x" name="cbxCompanyX"></td> </tr> <tr> <td>DN</td> <td><input type="checkbo x" name="cbxDNX"></td> </tr> </table> </td> </tr> <tr> <td style="height:23px;vertical-align:bottom;"> <span style="width:60%;text-align:center "> <a href="#" title="Check all opt ions" onClick="CheckUserExport(1)" style="color:blue">All</a> &nbsp;&nbsp; <a href="#" title="Uncheck all o ptions" onClick="CheckUserExport(0)" style="color:blue">None</a> </span> </td> <td style="text-align:center;"> <input class="button" type="button" valu e="Done" style="width:90;" name="btnUserOptionsDone" onClick="ExportDetails()" o nMouseOver="btnUserOptionsDone.className='button btnhov'" onMouseOut="btnUserOpt ionsDone.className='button'" title="Export using selected fields"> </td> </tr> </table> </form> </span> <span id="UserTableSpan" class="hidden"></span> <span id="PCTableSpan" class="hidden"></span> <span id="GroupTableSpan" class="hidden"></span> <div id="Layout3" class="hidden"> <table id="sublayout3"> <tr><td class="layoutheader">User Account Control</td></tr> <tr> <td style="width:55%;vertical-align:top;padding-top:2px; "> <table class="controltable">

<tr> <td style="width:35%;"> Display Name: </td> <td id="L3Name" class="infoTD di sabled" style="font-weight:bold;"> &nbsp; </td> </tr> <tr> <td> Last Logon: </td> <td id="L3dtmLastLogon" class="i nfoTD disabled"> &nbsp; </td> </tr> <tr> <td style="width:35%;"> Email: </td> <td id="L3Email" class="infoTD d isabled" style="font-weight:bold;"> &nbsp; </td> </tr> <tr> <td style="width:35%;"> Telephone: </td> <td id="L3Phone" class="infoTD d isabled" style="font-weight:bold;"> &nbsp; </td> </tr> <tr><td colspan=2>&nbsp;</td></tr> <tr><td colspan=2>&nbsp;</td></tr> <tr> <td> Created On: </td> <td id="L3dtmCreatedOn" class="i nfoTD disabled"> &nbsp; </td> </tr> <tr> <td> Last Modified: </td> <td id="L3dtmChangedOn" class="i nfoTD disabled"> &nbsp; </td> </tr> <tr> <td> Password Set: </td>

<td id="L3dtmPwdLastSet" class=" infoTD disabled"> &nbsp; </td> </tr> <tr><td colspan=2>&nbsp;</td></tr> <tr> <td> Status: </td> <td id="L3Enabled" class="infoTD disabled"> &nbsp; </td> </tr> <tr> <td> Locked Status: </td> <td id="L3Locked" class="infoTD disabled"> &nbsp; </td> </tr> <tr><td colspan=2>&nbsp;</td></tr> <tr> <td colspan=2 id="L3PassStatus"> &nbsp; </td> </tr> </table> </td> <td style="width:45%;padding-top:2px;"> <table class="controltable"> <tr> <td style="width:25%;height:20px ;">&nbsp;</td> <td style="width:20%;height:20px ;">&nbsp;</td> <td style="width:15%;height:20px ;">&nbsp;</td> <td style="width:30%;height:20px ;">&nbsp;</td> <td style="width:10%;height:20px ;">&nbsp;</td> </tr> <tr><td <tr><td <tr><td <tr><td <tr> colspan=5>&nbsp;</td></tr> colspan=5>&nbsp;</td></tr> colspan=5>&nbsp;</td></tr> colspan=5>&nbsp;</td></tr>

<td id="L3Box01" class="L3 L3Upp er L3Left L3Right disabled" colspan=5 style="text-align:center;"> <span id="StrengthSpan" style="font-weight:bold;">&nbsp;</span> </td> </tr> <tr> <td id="L3Box02" class="L3 L3Lef t disabled" style="height:35px;">

Password: </td> <td id="L3Box03" class="L3 L3Rig ht disabled" colspan=4> <input id="pwdL3Pwd" typ e="password" class="infoTD disabled" style="width:160;border-right:0px;verticalalign:middle;" onKeyUp="CheckStrength(pwdL3Pwd.value)" disabled=true><input id=" txtL3Pwd" type="text" class="infoTD hidden" style="width:160;border-right:0px;ve rtical-align:middle;" onKeyUp="CheckStrength(txtL3Pwd.value)"><input class="butt on disabled" type="button" value="SET" style="width:60;height:23px;vertical-alig n:middle;" name="btnL3ResetPwd" onClick="ResetPassword()" onMouseOver="btnL3Rese tPwd.className='button btnhov'" onMouseOut="btnL3ResetPwd.className='button'" di sabled=true> </td> </tr> <tr> <td id="L3Box04" class="L3 L3Lef t L3Right disabled" colspan=5 style="text-align:right;height:30px;"> <span style="float:left" > Show:&nbsp;&nbsp ;<input type="checkbox" id="cbxL3ShowPwd" class="checkbox disabled" onClick="Sho wPassword()" disabled=true> </span> <span style="float:right :"> Force change at logon:&nbsp;&nbsp;<input type="checkbox" id="cbxL3ForceChange" class="checkbox d isabled" disabled=true> </span> </td> </tr> <tr><td id="L3Box05" class="L3 L3Left L3 Right disabled" colspan=5 style="height:15px">&nbsp;</td></tr> <tr> <td id="L3Box06" class="L3 L3Lef t L3Middle disabled" colspan=2 style="height:45px;"> Unlock Account: </td> <td id="L3Box07" class="L3 L3Mid dle disabled"> <input type="checkbox" i d="cbxL3UnlockAcc" disabled=true class="checkbox disabled"> </td> <td id="L3Box08" rowspan=2 class ="L3 L3Middle disabled" style="text-align:center;"> <input class="button dis abled" type="button" value="COMMIT" style="width:60;height:53px" name="btnL3Comm it" onClick="CommitL3Action()" onMouseOver="btnL3Commit.className='button btnhov '" onMouseOut="btnL3Commit.className='button'" disabled=true> </td> <td id="L3Box09" rowspan=2 class ="L3 L3Middle L3Right disabled"> &nbsp; </td> </tr> <tr> <td id="L3Box10" class="L3 L3Lef t disabled" colspan=2 style="height:34px;"> Disable Account:

</td> <td id="L3Box11" class="L3 L3Rig ht disabled"> <input type="checkbox" i d="cbxL3DisableAcc" disabled=true class="checkbox disabled"> </td> </tr> <tr><td id="L3Box12" class="L3 L3Lower L 3Left L3Right disabled" colspan=5 style="height:10px;">&nbsp;</td></tr> </table> </td> </tr> </table> <span class="bottommenuleft"> &nbsp;&nbsp;&nbsp; <input class="button disabled" type="button" value="PRINT" style ="width:60;border-right:0px;" name="btnL3PrintNow" onClick="window.print()" onMo useOver="btnL3PrintNow.className='button btnhov'" onMouseOut="btnL3PrintNow.clas sName='button'" disabled=true><input class="button disabled" type="button" value ="RESET" style="width:60;" name="btnL3Reset" onClick="ResetLayout3()" onMouseOve r="btnL3Reset.className='button btnhov'" onMouseOut="btnL3Reset.className='butto n'" disabled=true> </span> <span class="bottommenuright"> <span id="EditUserSpan" class="spanlink" onClick="ReloadLayoutUs er(txtL3Username.Value)"></span> <p style="margin-top:5px;"> <input type="text" name="txtL3Username" size="20" title= "Username" class="text" style="border-width:2px;height:27;color:#888888;border-r ight:0px" value="Username" onFocus="ClearUsername(txtL3Username)"><input class=" button" type="button" value="SEARCH" style="width:60;" name="btnL3Search" onClic k="ShowL3UserInfo(txtL3Username.Value)" title="Search username" onMouseOver="btn L3Search.className='button btnhov'" onMouseOut="btnL3Search.className='button'"> &nbsp;&nbsp;&nbsp; </p> </span> </div> <span id="UsernameSearchSpan" class="hidden" onBlur="UsernameSearchSpan.classNam e='hidden'"> &nbsp; </span> <div> <span style="float:left;"> <input class="button" type="button" value="Info" style="width:90 ;border-right:0px;" name="btnL1" onClick="ChangeLayout(Layout1)" onMouseOver="bt nL1.className='button btnhov'" onMouseOut="btnL1.className='button'" title="Retr ieve info regarding the AD environment"><input class="button" type="button" valu e="List" style="width:90;border-right:0px;" name="btnL2" onClick="ShowTable(0)" onMouseOver="btnL2.className='button btnhov'" onMouseOut="btnL2.className='butto n'" title="Show a list of all objects in Active Directory"><input class="button" type="button" value="Edit" style="width:90;border-right:0px;" name="btnLU" onCl ick="ResetLayoutUser()" onMouseOver="btnLU.className='button btnhov'" onMouseOut ="btnLU.className='button'" title="View / change an individual user's informatio n"><input class="button" type="button" value="Groups" style="width:90;border-rig ht:0px;" name="btnLG" onClick="ResetLayoutGroup()" onMouseOver="btnLG.className= 'button btnhov'" onMouseOut="btnLG.className='button'" title="View / change grou p membership information"><input class="button" type="button" value="Control" st yle="width:90;" name="btnL3" onClick="ResetLayout3()" onMouseOver="btnL3.classNa

me='button btnhov'" onMouseOut="btnL3.className='button'" title="User Account Co ntrol"> </span> <span style="float:right;font-weight:bold;vertical-align:middle;"> Root OU: <input type="text" style="border:2px solid black;height :27px;border-right:0px;" name="txtRootOU" size="25" title="Root OU"><input class ="button" type="button" value="Set" style="width:50;" name="btnSetRootOU" onClic k="SetRootOU()" onMouseOver="btnSetRootOU.className='button btnhov'" onMouseOut= "btnSetRootOU.className='button'" title="Set Root OU"> </span> </div> </body> </html>

Вам также может понравиться

  • CSS for Hotel Bookings
    CSS for Hotel Bookings
    От Everand
    CSS for Hotel Bookings
    Оценок пока нет
  • AD Management Utility HTA
    AD Management Utility HTA
    Документ116 страниц
    AD Management Utility HTA
    Ruth Peralta Wilson
    Оценок пока нет
  • Anonymous Cyber Team by MR - tl25
    Anonymous Cyber Team by MR - tl25
    Документ107 страниц
    Anonymous Cyber Team by MR - tl25
    k m
    Оценок пока нет
  • Dsafds
    Dsafds
    Документ7 страниц
    Dsafds
    Poornachandu Rachakonda
    Оценок пока нет
  • Gots 14
    Gots 14
    Документ5 508 страниц
    Gots 14
    Gaurav Junawa
    Оценок пока нет
  • Code:: Assessment - 2
    Code:: Assessment - 2
    Документ26 страниц
    Code:: Assessment - 2
    asmit gupta
    Оценок пока нет
  • Puja Girase - AI - A2
    Puja Girase - AI - A2
    Документ6 страниц
    Puja Girase - AI - A2
    bhamrekomal2003
    Оценок пока нет
  • Harshada Girase - AI - A2
    Harshada Girase - AI - A2
    Документ6 страниц
    Harshada Girase - AI - A2
    bhamrekomal2003
    Оценок пока нет
  • HTML 222
    HTML 222
    Документ5 страниц
    HTML 222
    Isam el-laymouny
    Оценок пока нет
  • Source Code Uk e Book
    Source Code Uk e Book
    Документ11 страниц
    Source Code Uk e Book
    Ankit Jain
    Оценок пока нет
  • 8 CSS Microproject
    8 CSS Microproject
    Документ9 страниц
    8 CSS Microproject
    Scary Nightmare
    Оценок пока нет
  • Fracciones
    Fracciones
    Документ3 страницы
    Fracciones
    José Alejandro Hernández
    Оценок пока нет
  • CSS Code - New - 2022
    CSS Code - New - 2022
    Документ54 страницы
    CSS Code - New - 2022
    kaushik
    Оценок пока нет
  • <html>.txt
    <html>.txt
    Документ8 страниц
    <html>.txt
    Ipo Apa
    Оценок пока нет
  • ARM Old
    ARM Old
    Документ39 страниц
    ARM Old
    Gangadhar L
    Оценок пока нет
  • Deepawali 2023 Script 2023
    Deepawali 2023 Script 2023
    Документ23 страницы
    Deepawali 2023 Script 2023
    Harshit Chaudhary
    Оценок пока нет
  • New Text Document
    New Text Document
    Документ10 страниц
    New Text Document
    Hoàng Nguyễn Bá
    Оценок пока нет
  • Java Script Calculator: Sanjay M
    Java Script Calculator: Sanjay M
    Документ11 страниц
    Java Script Calculator: Sanjay M
    Sanjay Muthu
    Оценок пока нет
  • Aquí Hay Mas Código de Estilos
    Aquí Hay Mas Código de Estilos
    Документ21 страница
    Aquí Hay Mas Código de Estilos
    Jerson Ramirez Ortiz
    Оценок пока нет
  • Code Email Annoce Recharge Mobile
    Code Email Annoce Recharge Mobile
    Документ20 страниц
    Code Email Annoce Recharge Mobile
    Novalabs Studios
    Оценок пока нет
  • Winxp Srcfile
    Winxp Srcfile
    Документ10 страниц
    Winxp Srcfile
    ytfgaquestioner477
    Оценок пока нет
  • Orca Share Media1575780332098
    Orca Share Media1575780332098
    Документ56 страниц
    Orca Share Media1575780332098
    angelica
    Оценок пока нет
  • Sigle Page Website HTML Code Helper GD
    Sigle Page Website HTML Code Helper GD
    Документ110 страниц
    Sigle Page Website HTML Code Helper GD
    arainwaleed332211
    Оценок пока нет
  • Message
    Message
    Документ3 страницы
    Message
    Phú Vũ
    Оценок пока нет
  • Profilecard
    Profilecard
    Документ19 страниц
    Profilecard
    iqbal zahra telbissi
    Оценок пока нет
  • HTML CC
    HTML CC
    Документ49 страниц
    HTML CC
    Arul Raj
    Оценок пока нет
  • Slider Solo
    Slider Solo
    Документ6 страниц
    Slider Solo
    esaulcontreras102
    Оценок пока нет
  • Hatsune Miku Blogger Templates
    Hatsune Miku Blogger Templates
    Документ25 страниц
    Hatsune Miku Blogger Templates
    Fauziah Mahirani
    Оценок пока нет
  • M
    M
    Документ45 страниц
    M
    H
    Оценок пока нет
  • HTML Dir
    HTML Dir
    Документ151 страница
    HTML Dir
    sahabatpayy00
    Оценок пока нет
  • Dise Nio Valid A Dorm in
    Dise Nio Valid A Dorm in
    Документ18 страниц
    Dise Nio Valid A Dorm in
    Oscar Yunda
    Оценок пока нет
  • Write HTML / Java Scripts To Display Resume' in Web Browser
    Write HTML / Java Scripts To Display Resume' in Web Browser
    Документ37 страниц
    Write HTML / Java Scripts To Display Resume' in Web Browser
    lakshmi
    Оценок пока нет
  • Yahoo
    Yahoo
    Документ48 страниц
    Yahoo
    Jainish Patel
    100% (1)
  • Kalkulator
    Kalkulator
    Документ5 страниц
    Kalkulator
    OssaKusdiana
    Оценок пока нет
  • Web Programming Surya
    Web Programming Surya
    Документ59 страниц
    Web Programming Surya
    Aswath Vikranth
    Оценок пока нет
  • Auth Bypass
    Auth Bypass
    Документ7 страниц
    Auth Bypass
    BARBER HENSEM
    Оценок пока нет
  • DND Script
    DND Script
    Документ6 страниц
    DND Script
    Thala Pathi
    Оценок пока нет
  • Sdoc 03 22 Si
    Sdoc 03 22 Si
    Документ5 страниц
    Sdoc 03 22 Si
    earljoyvaldez5
    Оценок пока нет
  • Graphical Calculator
    Graphical Calculator
    Документ4 страницы
    Graphical Calculator
    Muskan agarwal
    Оценок пока нет
  • Progweb UTS
    Progweb UTS
    Документ11 страниц
    Progweb UTS
    Jeremy Kevin
    Оценок пока нет
  • Listing Program Kalkulator Sederhana
    Listing Program Kalkulator Sederhana
    Документ3 страницы
    Listing Program Kalkulator Sederhana
    Roby Gonzales Prasetyo
    Оценок пока нет
  • Rekap Gizi
    Rekap Gizi
    Документ3 страницы
    Rekap Gizi
    Dwiyanti Mayasari
    Оценок пока нет
  • Menu
    Menu
    Документ7 страниц
    Menu
    Simon Valenzuela Diaz
    Оценок пока нет
  • Caluclator
    Caluclator
    Документ5 страниц
    Caluclator
    AbdulkhadarJilani Shaik
    Оценок пока нет
  • Library
    Library
    Документ35 страниц
    Library
    lohit krishna
    Оценок пока нет
  • Freebitco - in Roll Verifier
    Freebitco - in Roll Verifier
    Документ54 страницы
    Freebitco - in Roll Verifier
    sandeepkhandayatray
    Оценок пока нет
  • App
    App
    Документ14 страниц
    App
    Shimul Zahan
    Оценок пока нет
  • 3
    3
    Документ17 страниц
    3
    said khliouel
    Оценок пока нет
  • Wtminiproject
    Wtminiproject
    Документ22 страницы
    Wtminiproject
    1814 Rutwik Ingawale
    Оценок пока нет
  • ResultPart2 Aspx
    ResultPart2 Aspx
    Документ11 страниц
    ResultPart2 Aspx
    Hamayon Mushtaq
    Оценок пока нет
  • Folio
    Folio
    Документ264 страницы
    Folio
    Ira Meida
    Оценок пока нет
  • Application Status Report
     Application Status Report
    Документ11 страниц
    Application Status Report
    Raghu
    Оценок пока нет
  • Untitled
    Untitled
    Документ42 страницы
    Untitled
    Marco Vega
    Оценок пока нет
  • 6
    6
    Документ15 страниц
    6
    said khliouel
    Оценок пока нет
  • Email Recharge Envoyée
    Email Recharge Envoyée
    Документ20 страниц
    Email Recharge Envoyée
    Novalabs Studios
    Оценок пока нет
  • C 1 B
    C 1 B
    Документ7 страниц
    C 1 B
    Ashutosh Pandey
    Оценок пока нет
  • Balaksix 0101000
    Balaksix 0101000
    Документ30 страниц
    Balaksix 0101000
    Balaksix
    Оценок пока нет
  • PO Printout
    PO Printout
    Документ7 страниц
    PO Printout
    ihpco website
    Оценок пока нет
  • 15 GQ Ohx 1 Svuh SZW Ams 1 E4 Yud Vux 9 R WEhy
    15 GQ Ohx 1 Svuh SZW Ams 1 E4 Yud Vux 9 R WEhy
    Документ41 страница
    15 GQ Ohx 1 Svuh SZW Ams 1 E4 Yud Vux 9 R WEhy
    kim che
    Оценок пока нет
  • Home Gratis
    Home Gratis
    Документ13 страниц
    Home Gratis
    Bisma Cadae
    Оценок пока нет
  • бббббббббббб
    бббббббббббб
    Документ7 страниц
    бббббббббббб
    hug1515
    Оценок пока нет
  • 02.03.2017 SR Mechanical Engineer Externe Vacature Innolux
    02.03.2017 SR Mechanical Engineer Externe Vacature Innolux
    Документ1 страница
    02.03.2017 SR Mechanical Engineer Externe Vacature Innolux
    Michel van Wordragen
    Оценок пока нет
  • Policy Analysis Report
    Policy Analysis Report
    Документ16 страниц
    Policy Analysis Report
    Ghelvin Auriele Aguirre
    Оценок пока нет
  • D027B Omron
    D027B Omron
    Документ141 страница
    D027B Omron
    irfanWPK
    Оценок пока нет
  • Assignment Diffraction 2016
    Assignment Diffraction 2016
    Документ3 страницы
    Assignment Diffraction 2016
    Ritesh Meel
    Оценок пока нет
  • 1 SM
    1 SM
    Документ9 страниц
    1 SM
    Selly Manalu
    Оценок пока нет
  • Project Plan
    Project Plan
    Документ8 страниц
    Project Plan
    Rodsheen
    100% (1)
  • Practical Means For Energy-Based Analyses of Disproportionate Collapse Potential
    Practical Means For Energy-Based Analyses of Disproportionate Collapse Potential
    Документ13 страниц
    Practical Means For Energy-Based Analyses of Disproportionate Collapse Potential
    Nhut Nguyen
    Оценок пока нет
  • UCOL Online Style Guide
    UCOL Online Style Guide
    Документ8 страниц
    UCOL Online Style Guide
    ucoledtech
    Оценок пока нет
  • Oliver vs. Philippine Savings Bank
    Oliver vs. Philippine Savings Bank
    Документ14 страниц
    Oliver vs. Philippine Savings Bank
    Ameir Muksan
    Оценок пока нет
  • The Evolution of Management Theory
    The Evolution of Management Theory
    Документ49 страниц
    The Evolution of Management Theory
    Anjali Mehara
    Оценок пока нет
  • Agents Socialization
    Agents Socialization
    Документ4 страницы
    Agents Socialization
    instinct92
    0% (1)
  • Đề Đề Nghị Gởi Sở
    Đề Đề Nghị Gởi Sở
    Документ13 страниц
    Đề Đề Nghị Gởi Sở
    Phú Tô
    Оценок пока нет
  • Lesson Plan: Instructor: Date Topic: Grade Level: Subject Objectives
    Lesson Plan: Instructor: Date Topic: Grade Level: Subject Objectives
    Документ5 страниц
    Lesson Plan: Instructor: Date Topic: Grade Level: Subject Objectives
    api-340265930
    Оценок пока нет
  • Computer Graphics Question For Final Exam
    Computer Graphics Question For Final Exam
    Документ3 страницы
    Computer Graphics Question For Final Exam
    Md Rifat Bhuiyan
    Оценок пока нет
  • Cubic Functions
    Cubic Functions
    Документ9 страниц
    Cubic Functions
    Shrey Jain
    Оценок пока нет
  • I. Objectives: A. Power Point Presentation
    I. Objectives: A. Power Point Presentation
    Документ3 страницы
    I. Objectives: A. Power Point Presentation
    John Brad Angelo Lacuata
    Оценок пока нет
  • Culvert Design Write Up
    Culvert Design Write Up
    Документ8 страниц
    Culvert Design Write Up
    ifylasy
    Оценок пока нет
  • 500 Grammar Based Conversation Question12
    500 Grammar Based Conversation Question12
    Документ16 страниц
    500 Grammar Based Conversation Question12
    Ivo Barry Ward
    100% (1)
  • Biology File
    Biology File
    Документ10 страниц
    Biology File
    Michael Kors
    Оценок пока нет
  • Mixed Methods Research PDF
    Mixed Methods Research PDF
    Документ14 страниц
    Mixed Methods Research PDF
    Chin Ing Khang
    Оценок пока нет
  • Raglio 2015 Effects of Music and Music Therapy On Mood in Neurological Patients PDF
    Raglio 2015 Effects of Music and Music Therapy On Mood in Neurological Patients PDF
    Документ12 страниц
    Raglio 2015 Effects of Music and Music Therapy On Mood in Neurological Patients PDF
    simaso
    0% (1)
  • Normality in The Residual - Hossain Academy Note
    Normality in The Residual - Hossain Academy Note
    Документ2 страницы
    Normality in The Residual - Hossain Academy Note
    Abdullah Khatib
    Оценок пока нет
  • Chapter 12 My Nursing Test Banks
    Chapter 12 My Nursing Test Banks
    Документ10 страниц
    Chapter 12 My Nursing Test Banks
    نمر نصار
    100% (1)
  • Kelompok 5
    Kelompok 5
    Документ16 страниц
    Kelompok 5
    bintang
    Оценок пока нет
  • 21st Cent Lit DLP Kim
    21st Cent Lit DLP Kim
    Документ7 страниц
    21st Cent Lit DLP Kim
    Kim Bandola
    Оценок пока нет
  • Spirolab III
    Spirolab III
    Документ1 страница
    Spirolab III
    Dzenan Delija
    Оценок пока нет
  • Swarm Intelligence PDF
    Swarm Intelligence PDF
    Документ7 страниц
    Swarm Intelligence PDF
    Ganesh Bisht
    Оценок пока нет
  • Sop For Retail
    Sop For Retail
    Документ13 страниц
    Sop For Retail
    karthika suresh
    100% (6)
  • Performing and Reporting Cost Analysis During The Design Phase of A Project
    Performing and Reporting Cost Analysis During The Design Phase of A Project
    Документ4 страницы
    Performing and Reporting Cost Analysis During The Design Phase of A Project
    Ahmad Zubair Rasuly
    Оценок пока нет