Solved

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

Posted on 2016-10-26
10
47 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 49

Expert Comment

by:Rgonzo1971
ID: 41860490
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
ID: 41860584
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
ID: 41860595
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
ID: 41860627
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
ID: 41860948
Any suggestions?
0
Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 
LVL 35

Expert Comment

by:Kimputer
ID: 41861768
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
ID: 41861815
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
ID: 41861823
Also, how do I get it to skip or write offline?
0
 
LVL 35

Accepted Solution

by:
Kimputer earned 500 total points
ID: 41861910
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
ID: 41863155
Worked great thanks.
0

Featured Post

Zoho SalesIQ

Hassle-free live chat software re-imagined for business growth. 2 users, always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
active directory 6 74
Change AD password via MS Access DB 2 17
Troubles Logging On Creating New Profile 3 44
inplace upgrade from Windows 2003 R2 to 2012 8 49
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Is your Office 365 signature not working the way you want it to? Are signature updates taking up too much of your time? Let's run through the most common problems that an IT administrator can encounter when dealing with Office 365 email signatures.
This tutorial will show how to configure a new Backup Exec 2012 server and move an existing database to that server with the use of the BEUtility. Install Backup Exec 2012 on the new server and apply all of the latest hotfixes and service packs. The…
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…

912 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

15 Experts available now in Live!

Get 1:1 Help Now