Remotely Get Local Admins Users inside Administrators group, for Workstations
Also tests the connectivity, it gets computers from AD object type “computer”
and it prints out a nice report.
 
 

'Remotely Get Local Admins Users inside Administrators group, for Workstations
 'Author: Felipe Ferreira fel[a)gmail.com
 'Date 18/05/09
 'Version 1.0
 'todo(next version):
 'Get LastLoginTime, get account stauts: disable or enable
 'Allow reset administrator pass
 'nslookup in AD to
 'remove server from AD if not ping
 Const ForAppending = 8
 Dim strPingit,strList
 Dim strcomputer
 Dim strLocalGroup  : strLocalGroup = "Administradores"   'spanish
 Dim strLocalGroup2 : strLocalGroup2 = "Administrators"   'english
 Dim verbose : verbose = 1                      'debuging =1, silent =0
 Dim IPAddress
 Dim oFSO : Set oFSO = CreateObject("Scripting.FilesyStemObject")
 Dim Outputfile : outputfile = "list_pcs.txt"
 'Get list of all computer objects from AD
 Set objOU = GetObject("LDAP://CN=Computers, DC=YOURDOMAIN, DC=es" )         '!!EDIT HERE!!
 objOU.Filter = Array(" Computer" )
 Set ofile = oFso.OpenTextFile(Outputfile, ForAppending, TRUE)
 oFile.Writeline "#################START##################"
 oFile.Writeline "Script: started in " & Date & " at " & Time & VbCrLf
 For Each objComputer in objOU
         Wscript.StdOut.Write(".")
        if instr(lcase(objComputer.CN),"bcn") then                         ' EDIT IF YOU WANT JUST CERTAIN COMPUTERS
          strComputer = objComputer.CN
          IPAddress = GetIP(strcomputer)
          GetStatus strcomputer
          pt " =================================================="
          if strPingit = true then
                pt vbcrlf & "--> " & strComputer & " "& IPAddress & ", UP"
                pt " =================================================="
 'build list
                oFile.Writeline strComputer &", "& IPAddress
 'Remotely get the local Administrators group members
                err.clear
                on error resume next
                Set objGroup = GetObject("WinNT://" & strComputer & "/" & strLocalGroup)  
                if err.level <> 0 then
                    pt "Maybe OS is in English,testing..."
                    Set objGroup = GetObject("WinNT://" & strComputer & "/" & strLocalGroup2)  
                end if
                For Each objUser In objGroup.Members
                     pt vbTab & objUser.Name
                     oFile.Writeline vbTab & objUser.Name
               next ' next user in Admins group
           else
 'List PCs that are in AD but have no ping. bad entries, or connectivity problems!
                pt strComputer & " "& IPAddress & ", DOWN"
                strList = strList & "," & strComputer &"  "& IPAddress
           end if
        end if
 IP = 0
 next 'next computer
 pt "BCN Computers in AD but no Ping: " & vbcrlf & strList
 oFile.WriteLine "Computers in AD but no Ping: " & vbcrlf & strList
 oFile.Writeline "#################END##################"
 oFile.Writeline "Script: finished in " & Date & " at " & Time & VbCrLf
 wscript.quit(0)
 Function GetStatus(strComputer)
 'Check if computer is UP
 On Error Resume Next
                Dim wmiQuery, objWMIService, objPing, objStatus, intReply, i
                intReply = 0
                ' Define WMI query to ping
                wmiQuery = "Select * From Win32_PingStatus Where " & _
                        "Address = '" & strComputer & "'"
                ' Make WMI connection to local machine
                Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
                ' Execute Query
                For i = 1 To 4
                        Set objPing = objWMIService.ExecQuery(wmiQuery)
                        ' Retrieve the status code of each ping request
                        For Each objStatus In objPing
                                Select Case objStatus.StatusCode
                                        Case 0
                                                intReply = intReply + 1
                                End Select
                        Next
                Next
                Set objPing = Nothing
                Set objWMIService = Nothing
                ' Determine the image color depending on the number of pings successfully received
                Select Case True
                        Case (intReply = 0)                              
                                strPingit = false
                        Case (intReply => 3)
                                strPingit = true
                        Case Else
                                strPingit = true
                End Select
 End Function
 Function GetIP(strcomputer)
          Dim ws : Set ws = CreateObject("WScript.Shell")
          Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
          Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "ip.txt"
          Dim ThisLine, IP,p1,p2,p3
          p1 = 0
          p2 = 0
          p3 = 0
           ' pt "cmd.exe /c ping -a -n 1 -w 900 " & strcomputer & " | find "&chr(34)& "["&chr(34)& " > "  & TmpFile
            ws.run ("cmd.exe /c ping -a -n 1 -w 900 " & strcomputer & " | find "&chr(34)& "["&chr(34)& ">" & TmpFile),0,true
          wscript.sleep 1200
          Dim ifile : Set ifile = fso.OpenTextFile(TmpFile)  
          Do until ifile.AtEndOfLine
               ThisLine = ifile.ReadLine      
        '              pt "Parse Ping Debug: " & ThisLine
              If InStr(ThisLine, strcomputer) then
                p1 = InStr(ThisLine,"[")        
                p2 = InStr(ThisLine,"]")
                p3 =  (p2 - p1) + 1    
                ThisLine=right(ThisLine,p1)    
                IP=left(ThisLine,p3)
                'pt "ip: " & IP
              end if
          loop
          ifile.close
          if (IP <> "") or (IP <> "0") then
           GetIP = IP
          else
           pt "Error getting remote IP for " & strComputer
          end if
          wscript.sleep 300
          fso.DeleteFile TmpFile
          Set fso = Nothing
          Set ws = Nothing
 End Function
 function pt(txt)
        if verbose=1 then
                wscript.echo txt
        end if
 end function
Tags:

1 thought on “Get Local Admins

Leave a Reply

Your email address will not be published. Required fields are marked *

*