Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Explicit
- Dim strExcelPath, objExcel, objSheet, intRow, strUserDN, strPassword, comp
- Dim objUser
- ' Spreadsheet file.
- strExcelPath = "c:List.xls"
- ' Bind to Excel object.
- On Error Resume Next
- Set objExcel = CreateObject("Excel.Application")
- If (Err.Number <> 0) Then
- On Error GoTo 0
- Wscript.Echo "Excel application not found."
- Wscript.Quit
- End If
- On Error GoTo 0
- ' Open spreadsheet.
- On Error Resume Next
- objExcel.Workbooks.Open strExcelPath
- If (Err.Number <> 0) Then
- On Error GoTo 0
- Wscript.Echo "Spreadsheet cannot be opened: " & strExcelPath
- Wscript.Quit
- End If
- On Error GoTo 0
- ' Bind to worksheet.
- Set objSheet = objExcel.ActiveWorkbook.Worksheets(1)
- intRow = 2
- Do While objSheet.Cells(intRow, 1).Value <> ""
- comp = objSheet.Cells(intRow, 1).Value
- strUserDN = objSheet.Cells(intRow, 2).Value
- strPassword = objSheet.Cells(intRow, 3).Value
- On Error Resume Next
- Set objuser = GetObject ("WinNT://" & comp & "/" & strUserDN & ",user")
- If (Err.Number <> 0) Then
- On Error GoTo 0
- Wscript.Echo "Data NOT found: "
- Else
- objUser.SetPassword strPassword
- If (Err.Number <> 0) Then
- On Error GoTo 0
- Wscript.Echo "Password NOT set for: " & strUserDN
- Else
- End If
- End If
- intRow = intRow + 1
- Loop
- ' Close the workbook.
- objExcel.ActiveWorkbook.Close
- ' Quit Excel.
- objExcel.Application.Quit
- Wscript.Echo "Done"
- server = "YourServerName"
- Set oComputer = GetObject("WinNT://" & server & "")
- oComputer.Filter = Array("User")
- For Each oUser in oComputer
- WScript.Echo oUser.Name
- Next
- 'Objective: check multiple servers for admin accounts status and report to html file
- Set iFSO = CreateObject("Scripting.FilesyStemObject")
- Set oFSO = CreateObject("Scripting.FilesyStemObject")
- InputFile = WScript.Arguments.Named("servers")
- if len(InputFile) < 1 then
- wscript.echo "Error: Servers Parameter not found" & vbCrLf
- show_usage
- wscript.quit
- end if
- Outputfile= InputFile & "_guest_admins_" + cstr(Month(now()))+"_"+cstr(day(now()))+".htm"
- if not ofso.FileExists(inputfile) then
- wscript.echo "Error: Server list file not Found."
- wscript.quit
- end if
- Set ofile = ofso.createTextFile(OutputFile, True)
- Set ifile = iFSO.OpenTextFile(inputfile)
- ofile.writeline "<html>" & html_head & "<body>"
- ofile.writeline "<table border=1 cellpadding=1 cellspacing=0>"
- ofile.writeline o
- ofile.writeline "<tr><td>Hostname</td><td>User</td><td>Disabled</td><td>Locked</td><td>Expiration Date</td><td>Flags</td><td>BuiltIn</td></tr>"
- Do until ifile.AtEndOfLine
- Computer = ifile.ReadLine
- if ping(Computer) then
- Builtin = ""
- if Check_WMI(Computer) then
- Builtin = GetBuiltInAccount(Computer)
- else
- Builtin = "WMI Fail"
- end if
- strt = now
- wscript.echo "Checking Users for server: " & Computer
- on error resume next
- Set objGroup = GetObject("WinNT://" & Computer & "/Administrators,group")
- if err.number <> 0 then
- wscript.echo "GetObject WinNT Failed"
- ofile.writeline "<tr><td>" & computer & "</td><td colspan=6 align=center>GetObject WinNT Fail: "& err.number &"</td></tr>"
- else
- on error goto 0
- For Each objUser in objGroup.Members
- ofile.writeline GetUserNT(computer, objUser.Name, Builtin)
- Next
- wscript.echo "Elapsed Time: " & datediff("s", strt, now) & " seconds"
- end if
- else
- wscript.echo computer & " does not reply ping"
- ofile.writeline "<tr><td>" & computer & "</td><td colspan=6 align=center>No Ping Reply</td></tr>"
- end if
- Loop
- ofile.writeline "</table>"
- ofile.writeline "</body></html>"
- function ping(target)
- strComputer = "."
- Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
- Set colPingedComputers = objWMIService.ExecQuery("Select * from Win32_PingStatus Where Address = '"& target & "'")
- For each objComputer in colPingedComputers
- ' If the status code is Null or Not 0 then the ping failed
- If IsNull( objComputer.StatusCode ) Or objComputer.StatusCode <> 0 Then
- ' Set the function to return Boolean FALSE
- Ping = False
- Else
- ' Set the function to return Boolean TRUE
- Ping = True
- End If
- Next
- end function
- sub show_usage
- wscript.echo "Usage: cscript chkusers /servers:list.txt" & vbcrlf
- wscript.echo vbtab & "/servers Parameter is a Text File one Servername per Line" & vbcrlf
- wscript.echo "Notes: This script generates an html report of server admin accounts."
- wscript.echo " Results are saved in a file named + date + htm extension."
- wscript.echo " Output example filename: list_guest_admins_" + cstr(Month(now()))+"_"+cstr(day(now()))+".htm"
- end sub
- Function Check_WMI(strServer)
- On Error Resume Next ' error handling off
- ' create object reference, connect to namespace rootdefault
- Set oCimOmId = GetObject("winmgmts:"& strServer & "rootdefault:__cimomidentification=@")
- ' Test whether WMI is present or not.
- If Err <> 0 then
- Check_WMI= true
- else
- Check_WMI= false
- end if
- on error goto 0
- end function
- Sub EnumNameSpaces(strNameSpace)
- 'call enumnamespaces("root")
- Set objWMIService = GetObject("winmgmts:\" & strComputer & "" & strNameSpace)
- Set colNameSpaces = objWMIService.InstancesOf("__NAMESPACE")
- For Each objNameSpace In colNameSpaces
- Call EnumNameSpaces(strNameSpace & "" & objNameSpace.Name)
- Next
- End Sub
- function CSS
- tt = "<style type=""text/css"">" & vbcrlf
- tt=tt & " body {font-family:Verdana;font-size: 10px;color: #49403B;background: #EFEFEF;}" & vbcrlf
- tt=tt & "table {font-family:Verdana;font-size: 12px; empty-cells:show; }" & vbcrlf
- tt=tt & "</style>" & vbcrlf
- CSS = tt
- end function
- function html_head
- tt="<head>" & vbcrlf
- tt=tt & CSS
- html_head = tt & "</head>" & vbcrlf
- end function
- function GetUserNT(strComputer, usr, bltin)
- Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000
- o=""
- On Error Resume Next
- Set objUser = GetObject("WinNT:// " & strComputer & "/" & usr & " ")
- o=o& "<tr><td>"& strcomputer &"</td><td>"& usr &"</td>"
- if len(objUser.AccountDisabled) = 0 then exit function
- o=o& "<td> "& StrDisabled(objUser.AccountDisabled) &"</td>"
- o=o& "<td> "& StrLocked(objUser.IsAccountLocked) &"</td>"
- o=o& "<td> "
- o=o& objUser.Get("UserFlags") AND ADS_UF_DONT_EXPIRE_PASSWD
- o=o& "</td>"
- o=o& "<td> "
- o=o& objUser.AccountExpirationDate
- o=o& "</td>"
- if lcase(bltin) = lcase(usr) then
- o=o & "<td> Built-In</td>"
- elseif instr(bltin, "[[Fail]]") > 0 then
- o=o & "<td> "& bltin &"</td>"
- else
- o=o & "<td> </td>"
- end if
- o = o & "</tr>"
- GetUserNT = o
- end function
- function StrLocked(str)
- if str = "True" then
- StrLocked = "Locked"
- else
- StrLocked = "Unlocked"
- end if
- end function
- function StrDisabled(str)
- if str = "True" then
- StrDisabled = "Disabled"
- else
- StrDisabled = "Enabled"
- end if
- end function
- function GetUsers(strComputer,grp,usr)
- On Error Resume Next
- Set objWMIService = GetObject("winmgmts:\" & strComputer & "rootcimv2")
- Set colItems = objWMIService.ExecQuery("Select * from Win32_UserAccount Where name = '"& usr &"'")
- o=""
- For Each objItem in colItems
- o=o& "<tr>"
- o=o& "<td>" & strComputer & "</td>"
- o=o& "<td>" & grp & "</td>"
- o=o& "<td>" & objItem.AccountType & "</td>"
- o=o& "<td>" & objItem.Caption & "</td>"
- o=o& "<td>" & objItem.Description & "</td>"
- o=o& "<td>" & objItem.Disabled & "</td>"
- o=o& "<td>" & objItem.Domain & "</td>"
- o=o& "<td>" & objItem.FullName & "</td>"
- o=o& "<td>" & objItem.LocalAccount & "</td>"
- o=o& "<td>" & objItem.Lockout & "</td>"
- o=o& "<td>" & objItem.Name & "</td>"
- o=o& "<td>" & objItem.PasswordChangeable & "</td>"
- o=o& "<td>" & objItem.PasswordExpires & "</td>"
- o=o& "<td>" & objItem.PasswordRequired & "</td>"
- o=o& "<td>" & objItem.SID & "</td>"
- o=o& "<td>" & objItem.SIDType & "</td>"
- o=o& "<td>" & objItem.Status & "</td>"
- o=o& "</tr>"
- Next
- on error goto 0
- GetUsers = o
- end function
- Function getlcl(srvname)
- Set objComputer = GetObject("WinNT://" & srvname & "/Administrators,group")
- wscript.echo "Local Accounts on " & srvname
- wscript.echo "-------------------------------------------------"
- For Each objUser in objComputer.Members
- Wscript.Echo vbTab & objUser.Name
- Next
- wscript.echo "-------------------------------------------------"
- end Function
- function GetBuiltInAccount(strComputer)
- on error resume next
- Set objWMIService = GetObject("winmgmts:\" & strComputer & "rootcimv2")
- if err.number <> 0 then
- GetBuiltInAccout = "Get Object WMI [[Fail]]: " & err.number & ":: " & err.description
- err.clear
- exit function
- end if
- on error goto 0
- on error resume next
- Set colAccounts = objWMIService.ExecQuery("Select * From Win32_UserAccount Where Domain = '" & strComputer & "'")
- if err.number <> 0 then
- GetBuiltInAccout = "WMI_ExecQuery [[Fail]]: " & err.number & ":: " & err.description
- err.clear
- exit function
- end if
- on error goto 0
- on error resume next
- For Each objAccount in colAccounts
- if err.number <> 0 then
- GetBuiltInAccout = "WMI_ExecQuery_ForEachAccount [[Fail]]: " & err.number & ":: " & err.description
- wscript.echo "WMI_ExecQuery_ForEachAccount [[Fail]]: " & err.number & ":: " & err.description
- err.clear
- exit function
- end if
- on error goto 0
- If Left (objAccount.SID, 6) = "S-1-5-" and Right(objAccount.SID, 4) = "-500" Then
- GetBuiltInAccount = objAccount.Name
- exit function
- End If
- Next
- end function
- Option Explicit
- Dim strExcelPath, objExcel, objSheet, intRow, strUserDN, strPassword, comp
- Dim objUser
- ' Spreadsheet file.
- strExcelPath = "c:List.xls"
- ' Bind to Excel object.
- On Error Resume Next
- Set objExcel = CreateObject("Excel.Application")
- If (Err.Number <> 0) Then
- On Error GoTo 0
- Wscript.Echo "Excel application not found."
- Wscript.Quit
- End If
- On Error GoTo 0
- ' Open spreadsheet.
- On Error Resume Next
- objExcel.Workbooks.Open strExcelPath
- If (Err.Number <> 0) Then
- On Error GoTo 0
- Wscript.Echo "Spreadsheet cannot be opened: " & strExcelPath
- Wscript.Quit
- End If
- On Error GoTo 0
- ' Bind to worksheet.
- Set objSheet = objExcel.ActiveWorkbook.Worksheets(1)
- intRow = 2
- Do While objSheet.Cells(intRow, 1).Value <> ""
- comp = objSheet.Cells(intRow, 1).Value
- strUserDN = objSheet.Cells(intRow, 2).Value
- strPassword = objSheet.Cells(intRow, 3).Value
- On Error Resume Next
- Set objuser = GetObject ("WinNT://" & comp & "/" & strUserDN & ",user")
- If (Err.Number <> 0) Then
- On Error GoTo 0
- Wscript.Echo "Data NOT found: "
- Else
- objUser.SetPassword strPassword
- If (Err.Number <> 0) Then
- On Error GoTo 0
- Wscript.Echo "Password NOT set for: " & strUserDN
- Else
- End If
- End If
- intRow = intRow + 1
- Loop
- ' Close the workbook.
- objExcel.ActiveWorkbook.Close
- ' Quit Excel.
- objExcel.Application.Quit
- Wscript.Echo "Done"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement