Solved

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

Posted on 2016-10-26
10
54 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 50

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
Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.

 
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
 
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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

In this article, I am going to show you how to simulate a multi-site Lab environment on a single Hyper-V host. I use this method successfully in my own lab to simulate three fully routed global AD Sites on a Windows 10 Hyper-V host.
When you see single cell contains number and text, and you have to get any date out of it seems like cracking our heads.
This tutorial will give a short introduction and overview of Backup Exec 2012 and how to navigate and perform basic functions. Click on the Backup Exec button in the upper left corner. From here, are global settings for the application such as conne…
This tutorial will walk an individual through locating and launching the BEUtility application to properly change the service account username and\or password in situation where it may be necessary or where the password has been inadvertently change…

840 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