Solved

VBScript:  Loop through computers.txt instead of strComputer = "."

Posted on 2016-10-26
10
39 Views
Last Modified: 2016-10-27
Hi All,

The script below writes WMI info on a PC into a CSV file.

Could someone help edit it, so it loops through a text file computers.txt instead of being a single PC

On Error Resume Next

Set objFSO=CreateObject("Scripting.FileSystemObject")

outFile="output.csv"
Set objFile = objFSO.CreateTextFile(outFile,True)

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)


For Each objItem in colItems
    objFile.Write "Caption: " & objItem.Caption & ","
    objFile.Write "Description: " & objItem.Description & ","
    objFile.Write "Domain: " & objItem.Domain & ","
    objFile.Write "Manufacturer: " & objItem.Manufacturer & ","
    objFile.Write "Model: " & objItem.Model & ","
    objFile.Write "Name: " & objItem.Name & ","
    objFile.Write "NumberOfProcessors: " & objItem.NumberOfProcessors & ","
    objFile.Write "SystemType: " & objItem.SystemType & ","
    objFile.Write "TotalPhysicalMemory: " & objItem.TotalPhysicalMemory & ","
    objFile.Write "UserName: " & objItem.UserName & ","
Next

objFile.Close

Open in new window


Many thanks
D
0
Comment
Question by:detox1978
  • 6
  • 3
10 Comments
 
LVL 48

Expert Comment

by:Rgonzo1971
Comment Utility
Hi,

pls try
On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Names = objFSO.OpenTextFile("C:\computers.txt", ForReading)

outFile = "output.csv"
Set objFile = objFSO.CreateTextFile(outFile, True)
Do Until Names.AtEndOfStream
    strComputer = Names.ReadLine
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem", , 48)
    
    
    For Each objItem In colItems
        objFile.Write "Caption: " & objItem.Caption & ","
        objFile.Write "Description: " & objItem.Description & ","
        objFile.Write "Domain: " & objItem.Domain & ","
        objFile.Write "Manufacturer: " & objItem.Manufacturer & ","
        objFile.Write "Model: " & objItem.Model & ","
        objFile.Write "Name: " & objItem.Name & ","
        objFile.Write "NumberOfProcessors: " & objItem.NumberOfProcessors & ","
        objFile.Write "SystemType: " & objItem.SystemType & ","
        objFile.Write "TotalPhysicalMemory: " & objItem.TotalPhysicalMemory & ","
        objFile.Write "UserName: " & objItem.UserName & ","
    Next
Loop
objFile.Close

Open in new window

Regards
0
 
LVL 2

Author Comment

by:detox1978
Comment Utility
Thanks,

When I run the script it creates the CSV file, but not data.  It just seems to hang.

Any suggestions?
0
 
LVL 35

Expert Comment

by:Kimputer
Comment Utility
Are you running as the domain admin? A normal user can't just suddenly access all information of any random computer.
0
 
LVL 2

Author Comment

by:detox1978
Comment Utility
If I run it as a domain admin it only returns one row?

My script can be run without domain admin rights, as it's just looking at WMI
0
 
LVL 2

Author Comment

by:detox1978
Comment Utility
Any suggestions?
0
Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

 
LVL 35

Expert Comment

by:Kimputer
Comment Utility
Add this at the top and it should work
Const ForReading = 1

Open in new window


Works even better if you change the Write to WriteLine.

You are suggesting that WMI releases info to guest connection, this is not correct. I suggest you test it as domain admin (it works, output file will be filled up), and try again on a normal PC as a guest or normal user (doesn't work, output file will be mostly empty).
Obviously, if you lowered WMI rights from the default, I'd say you opened up a security hole all by yourself.

Also note the line On Error Resume Next
This will cause offline computer to have the labels from the previous WMI request.
If you have PC1 PC2 and PC3, and you run the script when PC3 is offline, you will have PC3 reported with the info of PC2. Quite dangerous if you ask me. Well, not dangerous literally, but maybe if you depend a next budget meeting on this info, you may be replacing good hardware with new hardware or you skipped old hardware that won't be replaced due to the budget meeting not reflecting the need.
0
 
LVL 2

Author Comment

by:detox1978
Comment Utility
Struggling to get this to work.

Could you put the whole script together and I'll run it as a domain admin.
0
 
LVL 2

Author Comment

by:detox1978
Comment Utility
Also, how do I get it to skip or write offline?
0
 
LVL 35

Accepted Solution

by:
Kimputer earned 500 total points
Comment Utility
CONST ForReading = 1

On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Names = objFSO.OpenTextFile("C:\computers.txt", ForReading)

outFile = "output.csv"
Set objFile = objFSO.CreateTextFile(outFile, True)
Do Until Names.AtEndOfStream
    strComputer = Names.ReadLine
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem", , 48)
    
	If Err.Number = 0 Then
		For Each objItem In colItems
			objFile.WriteLine "Caption: " & objItem.Caption & ","
			objFile.WriteLine "Description: " & objItem.Description & ","
			objFile.WriteLine "Domain: " & objItem.Domain & ","
			objFile.WriteLine "Manufacturer: " & objItem.Manufacturer & ","
			objFile.WriteLine "Model: " & objItem.Model & ","
			objFile.WriteLine "Name: " & objItem.Name & ","
			objFile.WriteLine "NumberOfProcessors: " & objItem.NumberOfProcessors & ","
			objFile.WriteLine "SystemType: " & objItem.SystemType & ","
			objFile.WriteLine "TotalPhysicalMemory: " & objItem.TotalPhysicalMemory & ","
			objFile.WriteLine "UserName: " & objItem.UserName & ","
		Next
	Else
		objFile.WriteLine "Skipped " & strComputer
		Err.Clear
	End If
Loop
objFile.Close

Open in new window

0
 
LVL 2

Author Closing Comment

by:detox1978
Comment Utility
Worked great thanks.
0

Featured Post

Want to promote your upcoming event?

Is your company attending an event or exhibiting at a trade show soon? Are you speaking at a conference? Spread the word by using a promotional banner in your email signature. This will ensure your organization’s most important contacts are in the know.

Join & Write a Comment

Sometimes drives fill up and we don't know why.  If you don't understand the best way to use the tools available, you may end up being stumped as to why your drive says it's not full when you have no space left!  Here's how you can find out...
A procedure for exporting installed hotfix details of remote computers using powershell
This tutorial will walk an individual through the steps necessary to configure their installation of BackupExec 2012 to use network shared disk space. Verify that the path to the shared storage is valid and that data can be written to that location:…
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles from a Windows Server 2008 domain controller to a Windows Server 2012 domain controlle…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now