Add, Remove, Query domain User to Local Machine

Author Message
Wakawaka

  • Total Posts : 456
  • Scores: 23
  • Reward points : 0
  • Joined: 8/27/2009
  • Status: offline
Add, Remove, Query domain User to Local Machine Tuesday, January 19, 2010 3:13 AM (permalink)
0
This HTA allows you to remotely connect to a machine or multiple machines to add or delete a domain user from a local account in addition to querying the local accounts for users.

You can alter it for adding domain groups, I didn't have a need for it so it wasn't added.  It also queries the machine running the HTA for the local accounts that it uses.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <html>
      <!--
      '********************************************************************
      '*  File:          Remote Local Group Manager.hta
      '*  Author:        Justin Thomas
      '*  Created:       Nov 2009
      '*  Modified:      Nov 2009
      '*  Version:       2.1
      '********************************************************************
      -->
      <head>
      <title>Remote Local Group Manager</title>
      <HTA:APPLICATION
          applicationName = "Remote Local Group Manager"
          singleInstance = "yes"
          showInTaskbar = "yes"
          border = "thin"
          scroll = "no"
          maximizeButton = "no"
          contextMenu = "no"
          version = "2.1"
      >
 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
      <style>
          body{
              background-color: buttonface;
          }
          p{
              text-align: right;
          }
          button{
              clear: both;
          }
          #left{
              float: left;
              width: 200px;
          }
          #right{
              float: right;
              width: 225px;
          }
      </style>
      
      <SCRIPT LANGUAGE="vbScript">
          OPTION EXPLICIT
          Const DOMAIN = "YOUR DOMAIN HERE"
          Const READ_ONLY = 1
          Const FOR_WRITING = 2
          Const FOR_APPENDING = 8
          Const OUTPUT_FILE = "Remote Local Group Manager Results.log"
          
          Sub Window_OnLoad()
              Call CenterWindow(500, 395)
              Call GetLocalGroups()
              pcList.Focus()
          End Sub 'End Window_OnLoad()
          
          Sub CenterWindow(intWidth, intHeight)
              self.ResizeTo intWidth, intHeight
              self.MoveTo (screen.Width - intWidth)/2, (screen.Height - intHeight)/2
          End Sub 'End CenterWindow(intWidth, intHeight)
          
          Sub GetLocalGroups()
              Dim objGroup
              Dim colGroups : Set colGroups = GetObject("WinNT://.")
              colGroups.Filter = Array("group")
              For Each objGroup in colGroups
                  Dim objOption : Set objOption = Document.CreateElement("option")
                  objOption.value = objGroup.Name
                  objOption.Text = objGroup.Name
                  sel_Groups.Add(objOption)
              Next
              Set objGroup = Nothing
              Set colGroups = Nothing
              Set objOption = Nothing
          End Sub 'End GetLocalGroups()
          
          Sub Execute_OnClick()
              Dim strComputer, blnLog, objTask, intRtnCode, strAction
              Dim arrComputers : arrComputers = Split(pcList.Value, vbCrLf)
              If UBound(arrComputers) < 0 Then
                  Msgbox "At least one remote PC required!", vbApplicationModal & vbExclamation, "Remote PC's - Error"
                  pcList.Focus()
              ElseIf LEN(txt_User.Value) < 4 Then
                  Msgbox "Invalid User ID!", vbApplicationModal & vbExclamation, "User ID - Error"
                  txt_User.Focus()
              Else
                  Dim strUser : strUser = UCase(txt_User.Value)
                  Dim strGroup : strGroup = sel_Groups.Value
                  
                  If chk_log.checked Then
                      blnLog = True
                      Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
                      Dim objOutput : Set objOutput = objFSO.OpenTextFile(OUTPUT_FILE, FOR_WRITING, True)
                      objOutput.WriteLine Now
                  Else
                      blnLog = False
                  End If
                  
                  
                  Dim arrTasks : Set arrTasks = Document.GetElementsByName("rad_shutdownOpt")
                  For Each strComputer In arrComputers
                          strComputer = UCASE(TRIM(strComputer))
                          Dim blnExecuteNext : blnExecuteNext = ValidatePC(strComputer)
                          If blnExecuteNext = True Then
                              For each objTask In arrTasks
                                  If objTask.Checked Then
                                      Select Case objTask.id
                                      Case "add"
                                          intRtnCode = AddUser(strComputer, strUser)
                                          strAction = " added " & strUser & " to " & strGroup
                                      Case "delete"
                                          intRtnCode = DeleteUser(strComputer, strUser)
                                          strAction = " removed " & strUser & " from " & strGroup
                                      Case "query"
                                          Call QueryGroup(strComputer, strGroup, objOutput)
                                      Case Else
                                          Msgbox "There has been a fatal error and the application needs to close.", vbApplicationModal & vbCritical, "User Options - Fatal Error"
                                          self.Close()
                                      End Select
                                  End If
                              Next
                          Else
                              If blnLog = True Then
                                  objOutput.WriteLine "Failed to connect\access " & strComputer
                                  objOutput.WriteBlankLines(2)
                              End If
                          End If 'End ValidatePC Check
 
                          If blnLog = True And blnExecuteNext = True Then
                          Select Case intRtnCode
                              Case "0"
                                  objOutput.WriteLine "Successfully" & strAction & " on " & strComputer
                              Case "-2147023518"
                                  objOutput.WriteLine "User " & strUser & " is already in " & strGroup & " on " & strComputer
                              Case "-2147023519"
                                  objOutput.WriteLine "User " & strUser & " not found in " & strGroup & " on " & strComputer
                              Case "-2147024844"
                                  objOutput.WriteLine "A duplicate name exists on the network for " & strComputer
                              Case "424"
                                  objOutput.WriteLine "User " & strUser & " does not exist in the Active Directory"
                              Case Else
                                  If strUser <> "DISABLED" Then
                                      objOutput.WriteLine "Unknown Error for user " & strUser & " for " & strGroup & " on " & strComputer
                                  End If
                              End Select
                          End If
                  Next
                  
                  If blnLog = True Then
                      objOutput.WriteBlankLines(2)
                      objOutput.Close
                  End If
                  
                  Dim objWSH : Set objWSH = CreateObject("WScript.Shell")
                  objWSH.Run "notepad.exe " & OUTPUT_FILE
              End If
              Set objWSH = Nothing
              Set objFSO = Nothing
              Set objOutput = Nothing
          End Sub 'End Execute_OnClick()
          
          Function ValidatePC(strComputer)
               If strComputer = "" Then
                  ValidatePC = False
                  Exit Function
              End If
              
              ON ERROR RESUME NEXT
              Dim colPing : Set colPing = GetObject("winmgmts:\\").ExecQuery("Select * from Win32_PingStatus where Address='" & strComputer & "'")
              Dim objPingStatus
 
              For Each objPingStatus in colPing
                  If objPingStatus.StatusCode = 0 Then
                      If IsNull(GetObject("winmgmts:\\" & strComputer & "\root\cimv2")) Then
                           ValidatePC = False
                      Else
                          ValidatePC = True
                      End If
                  Else
                      ValidatePC = False
                  End If
              Next
              Set objPingStatus = Nothing
              Set colPing = Nothing
          End Function 'End ValidatePC(strComputer)
          
          Function AddUser(strComputer, strUser)
              On Error Resume Next
              Dim objGroup : Set objGroup = GetObject("WinNT://" & strComputer & "/" & sel_Groups.Value & ",group")
              Dim objUser : Set objUser = GetObject("WinNT://" & DOMAIN &"/" & strUser & ",user")
              If Err.Number <> "-2147024844" Then
                  objGroup.Add(objUser.ADsPath)
              End If
              Set objGroup = Nothing
              Set objUser = Nothing
              AddUser = Err.Number
          End Function 'End AddUser(strUser, strComputer)
          
          Function DeleteUser(strComputer, strUser)
              On Error Resume Next
              Dim objGroup : Set objGroup = GetObject("WinNT://" & strComputer & "/" & sel_Groups.Value & ",group")
              Dim objUser : Set objUser = GetObject("WinNT://" & DOMAIN &"/" & strUser & ",user")
              If Err.Number <> "-2147024844" Then
                  objGroup.Remove(objUser.ADsPath)
              End If
              Set objGroup = Nothing
              Set objUser = Nothing
              DeleteUser = Err.Number
          End Function 'End DeleteUser(strUser, strComputer)
          
          Sub QueryGroup(strComputer, strGroup, objOutput)
              On Error Resume Next
              Dim objMember
              Dim objGroup : Set objGroup = GetObject("WinNT://" & strComputer & "/" & sel_Groups.Value & ",group")
              If Err.Number = "-2147024844" Then
                  objOutput.WriteLine "A duplicate name exists on the network for " & strComputer
                  objOutput.WriteBlankLines(2)
              Else
                  objOutput.WriteLine "The following Users are in the " & strGroup & " group on " & strComputer
                  objOutput.WriteLine "--------------------------------------------------------------------"
                  For Each objMember in objGroup.Members
                      objOutput.WriteLine objMember.Name
                  Next
                  objOutput.WriteLine "--------------------------------------------------------------------"
                  objOutput.WriteBlankLines(2)
              End If
              Set objGroup = Nothing
          End Sub
          
          Sub ChangeState()
              If Document.GetElementByID("query").Checked = True Then
                  txt_User.Disabled = True
                  txt_User.Value = "Disabled"
                  chk_Log.Checked = True
                  chk_Log.Disabled = True
              Else
                  txt_User.Disabled = False
                  chk_Log.Checked = True
                  chk_Log.Disabled = False
                  If txt_User.Value = "Disabled" Then
                      txt_User.Value = ""
                  End If
              End If
          End Sub
          
          Sub LoadFile_OnClick()
              Dim objDialog : Set objDialog = CreateObject("UserAccounts.CommonDialog")
  
              With objDialog
                  .Filter = "Text Files (*.txt)|*.txt"
                  .FilterIndex = 1
                  .InitialDir = "C:\"
              End With
              objDialog.ShowOpen
 
              If objDialog.FileName <> "" Then
                  Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
                  If objFSO.FileExists(objDialog.FileName) Then
                      Dim objFile : Set objFile = objFSO.OpenTextFile(objDialog.FileName, READ_ONLY)
                      pcList.Value = ""
                      Do Until objFile.AtEndOfStream
                          Dim strLine : strLine = TRIM(objFile.ReadLine)
                          pcList.Value = pcList.Value & strLine & vbCrLf
                      Loop
                  Else
                      Msgbox objDialog.FileName & " not found!", vbExclamation,"Open File - Error"
                  End If
              End If
              Set objFile = Nothing
              Set objFSO = Nothing
              Set objDialog = Nothing
          End Sub 'End GetFile_OnClick()
 
          Sub Exit_OnClick()
              self.Close()
          End Sub 'End CloseApplication()
      </SCRIPT>
      </head>
      
      <body>
      <div id="left">
          Remote PC(s):
          <br>
          <textarea id="pcList" rows="15" cols="25"></textarea>
          <br>
      </div>
      <div id="right">
          <fieldset>
              <legend>Task</legend>
                  <input type="radio" name="rad_shutdownOpt" id="add" onClick="ChangeState" checked />Add User<br>
                  <input type="radio" name="rad_shutdownOpt" id="delete" onClick="ChangeState"/>Delete User<br>
                  <input type="radio" name="rad_shutdownOpt" id="query" onClick="ChangeState"/>Query Group<br>
          </fieldset>
          <br>
          <fieldset>
              <legend>User</legend>
                  <input type="text" id="txt_User" size="29"
                  />
          </fieldset>
          <br>
          <fieldset>
              <legend>Local Group</legend>
                  <select id="sel_Groups"></select>
          </fieldset>
          <br>
          <fieldset>
              <legend>Logging</legend>
              <input type="checkbox" id="chk_log" checked/>Enable
          </fieldset>
      </div>
      <p>
          <button name="LoadFile" accesskey="l"><u>L</u>oad File...</button>&nbsp
          <button name="Execute" accesskey="e"><u>E</u>xecute</button>&nbsp
          <button name="Exit" accesskey="x">E<u>x</u>it</button>&nbsp
      </p>
      </body>
 </html>

 
#1

    Online Bookmarks Sharing: Share/Bookmark

    Jump to:

    Current active users

    There are 0 members and 1 guests.

    Icon Legend and Permission

    • New Messages
    • No New Messages
    • Hot Topic w/ New Messages
    • Hot Topic w/o New Messages
    • Locked w/ New Messages
    • Locked w/o New Messages
    • Read Message
    • Post New Thread
    • Reply to message
    • Post New Poll
    • Submit Vote
    • Post reward post
    • Delete my own posts
    • Delete my own threads
    • Rate post

    2000-2012 ASPPlayground.NET Forum Version 3.9