Introduction
This VBScript enumerates information about domain PCs. The script prompts you to enter the distinguished name of your domain, then using WMI polls all available computer objects for hardware/software information. Logs are created to store computer information and recommended upgrades (based on memory).
Background
We use this script to gather hardware/software information along with the Dell service tag #'s for all new clients.
Using the Code
Enter the distinguished name of your domain in the format dc=your_domain,dc=com.
On error resume next
Const ADS_SCOPE_SUBTREE = 2
Set fso = CreateObject("Scripting.FileSystemObject")
set list = fso.CreateTextFile("./output.txt")
Set upgrade = fso.CreateTextFile("./upgrade.txt")
strDomainDn = InputBox("Enter the DN of your domain." & _
vbCrLf & "(i.e. dc=domain,dc=com)")
If strDomainDn = "" Then
WScript.Echo "Exiting!"
WScript.Quit
End If
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select Name, Location from 'LDAP://" & strDomainDn & "' " _
& "Where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
strComputer = objRecordSet.Fields("Name").Value
Set objShell = CreateObject("WScript.Shell")
strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & ""
Set objExecObject = objShell.Exec(strCommand)
Do While Not objExecObject.StdOut.AtEndOfStream
strText = objExecObject.StdOut.ReadAll()
If Instr(strText, "Reply") > 0 Then
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_OperatingSystem")
Set colItems2 = objWMIService.ExecQuery("Select * from Win32_BIOS",,48)
Set colItems3 = objWMIService.ExecQuery_
("Select * from Win32_ComputerSystem",,48)
Set colItems4 = objWMIService.ExecQuery_
("SELECT * FROM Win32_Processor", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem in ColItems
strOS = objItem.Caption
Next
For Each objItem in colItems2
strDellTag = objItem.SerialNumber
strManu = objItem.Manufacturer
Next
For Each objItem in colitems3
strUserName = objItem.Username
strModel = objItem.Model
strRAM = objItem.TotalPhysicalMemory
strTimeZone = (objItem.CurrentTimeZone / 60)
strDayLightSavings = objItem.DaylightInEffect
Next
For Each objItem in colitems4
strProcessor = objItem.Name
Next
If Err.Number > 0 then
strErrorSystems = strComputer & ", " & strErrorSystems
Else
list.write "-----------------------------------------" & vbcrlf & vbcrlf
list.write "Computer Name: " & strComputer & ", " & strUserName & vbcrlf
list.write "-----------------------------------------" & vbcrlf & vbcrlf
list.write "Operating System: " & strOS & vbcrlf
list.write "Current User: " & strUserName & vbcrlf
list.write "::::" & vbcrlf
list.write "Manufacturer: " & strManu & vbcrlf
list.write "Model: " & strModel & vbcrlf
list.write "Dell Service Tag: " & strDellTag & vbcrlf
list.write "Processor type: " & strProcessor & vbcrlf
list.write "RAM: " & strRAM & vbcrlf
list.write "Time Zone: " & strTimeZone & vbcrlf
list.write "Daylight Savings in effect: " & strDayLightSavings & vbcrlf
list.write "----------------------------------------" & vbcrlf & vbCrLf
memory = (strRam/1024)/1024
memory = Int(memory)
memory = memory + 2
If strRam < 526454784 Then
upgrade.Write strComputer & " has only " & memory & _
"MB of Ram! We seriously recommend an upgrade!" _
& vbCrLf & "Dell Service Tag (if Dell): " & strDellTag
End If
End If
Err.Clear
Else
UnavailableSystems = strComputer & ", " & UnavailableSystems
End If
Loop
objRecordSet.MoveNext
Loop
list.write "The following systems were unavailable: " & UnavailableSystems & vbcrlf
list.write " " & vbcrlf & vbcrlf
list.write "The following systems were on, but returned an error: " & _
strErrorSystems & vbcrlf
WScript.Echo "Done!"
Points of Interest
This script is pretty utilitarian.
History