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
1 thought on “Get Local Admins”