Home > VbScripts > Get Local Admins

Get Local Admins

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
Categories: VbScripts Tags: , , , , , , , , ,

VAMOVE *

*