Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

VBS script - help needed

Posted on 2006-07-20
11
Medium Priority
?
894 Views
Last Modified: 2008-01-09
Hi,

Bit of a noob when it comes to this I'm afraid :-(

I have a script that pics up computer names (that are on the network) from a file (comps.txt) and creates another file with information (results.txt) about the PC's in the list.

What I want to end up with is a file with the computer name, followed by the serial number of the PC and the username of the person who's PC it is.  I have found a script that will do most of this but I cannot integrate the code for finding the user name.

The script is as follows:

----------------------------------------------------------------------------------------------------------------

'START CODE
const FSO_READ_MODE = 1
const FSO_WRITE_MODE = 2
const COMPUTER_NAMES_FILE = "D:\comps.txt"
const RESULTS_FILE = "D:\results.txt" 'warning - will be overwritten each time script runs

Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")

ReadFile(COMPUTER_NAMES_FILE)
Set fso = Nothing

function CheckSerial(ComputerName)
     Dim System
     Dim retVal
     retVal=""
     if Wscript.Arguments.Count > 0 then
          sSystem=Wscript.Arguments(0)
     end if
     winmgmt1 = "winmgmts:{impersonationLevel=impersonate}!//"& ComputerName &""
     Set SNSet = GetObject( winmgmt1 ).InstancesOf ("Win32_BIOS")
     for each SN in SNSet
          retVal = retVal & "The serial number for " & ComputerName & " is: " & SN.SerialNumber
     Next
     CheckSerial = retVal
end function

function ReadFile(sFilePath)
     If fso.FileExists(sFilePath) then
          'The file exists, so open it and output its contents
          dim file: set file = fso.OpenTextFile(sFilePath, FSO_READ_MODE)
          dim sLine
          dim sResults: sResults = ""
          Do While file.AtEndOfStream = False
              sLine = file.ReadLine
              sResults = sResults & CheckSerial(sLine) & vbcrlf
          Loop
          file.Close()
          Set file = Nothing
          WriteResults sResults
     Else
          'The file did not exist
          msgbox sFilePath & " was not found."
     End If
end function

sub WriteResults(sResults)
     dim file: set file = fso.OpenTextFile(RESULTS_FILE, FSO_WRITE_MODE, true)
     file.write(sResults)
     file.Close()
     Set file = Nothing
end sub
'END CODE

----------------------------------------------------------------------------------------------------------------

If anyone could shed any light on how I can get the user name into the text file as well I would be very greatful.

Thanks,

Giles
0
Comment
Question by:Gilesmp
11 Comments
 
LVL 7

Expert Comment

by:yotamsher
ID: 17149145
what do you mean the user of this computer
currently logged on?
list of all users?

Yotam
0
 
LVL 5

Expert Comment

by:Dbergert
ID: 17149413
0
 
LVL 5

Expert Comment

by:Isaac
ID: 17149416
Do you have an example of what the contents of the file "comps.txt" looks like?
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 23

Expert Comment

by:gecko_au2003
ID: 17149422
That just gets the currently logged on user ( how do you know if that user is the person who owns the pc or not ? ) I mean you can have more then one user per pc and just because you get a username at the time you run the script, doesnt mean to say that the person who is logged on there and then owns it, unless I am missing something.

You can enumerate all the user accounts on each machine but then how do you know who owns the machine ?
0
 
LVL 7

Expert Comment

by:yotamsher
ID: 17149439
'the following will give you all the users of the machine

'START CODE
const FSO_READ_MODE = 1
const FSO_WRITE_MODE = 2
const COMPUTER_NAMES_FILE = "c:\comps.txt"
const RESULTS_FILE = "c:\results.txt" 'warning - will be overwritten each time script runs

Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")

ReadFile(COMPUTER_NAMES_FILE)
Set fso = Nothing

function CheckSerial(ComputerName)
     Dim System
     Dim retVal
     retVal=""
     if Wscript.Arguments.Count > 0 then
          sSystem=Wscript.Arguments(0)
     end if
     winmgmt1 = "winmgmts:{impersonationLevel=impersonate}!//"& ComputerName &""
     Set SNSet = GetObject( winmgmt1 ).InstancesOf ("Win32_BIOS")
     for each SN in SNSet
          retVal = retVal & "The serial number for " & ComputerName & " is: " & SN.SerialNumber
     Next
     CheckSerial = retVal
end function

function CheckUsers(ComputerName)
     Dim retVal
     retVal=""
     if Wscript.Arguments.Count > 0 then
          sSystem=Wscript.Arguments(0)
     end if
      Set objWMIService = GetObject("winmgmts:\\" & ComputerName & "\root\cimv2")
      Set colItems = objWMIService.ExecQuery("Select * from Win32_Account",,48)
      retVal = retVal & "The users of " & ComputerName & " are: "
      For Each objItem in colItems
            if objItem.SIDType = 1 then
                retVal = retVal & " , "& objItem.Name
            end if
      Next
      CheckSerial = retVal
end function

function ReadFile(sFilePath)
     If fso.FileExists(sFilePath) then
          'The file exists, so open it and output its contents
          dim file: set file = fso.OpenTextFile(sFilePath, FSO_READ_MODE)
          dim sLine
          dim sResults: sResults = ""
          Do While file.AtEndOfStream = False
              sLine = file.ReadLine
              sResults = sResults & CheckSerial(sLine) & CheckUsers(sLine) & vbcrlf
          Loop
          file.Close()
          Set file = Nothing
          WriteResults sResults
     Else
          'The file did not exist
          msgbox sFilePath & " was not found."
     End If
end function

sub WriteResults(sResults)
     dim file: set file = fso.OpenTextFile(RESULTS_FILE, FSO_WRITE_MODE, true)
     file.write(sResults)
     file.Close()
     Set file = Nothing
end sub
'END CODE
0
 
LVL 7

Expert Comment

by:yotamsher
ID: 17149456
if you want to know who "owns" the machine, I guess you will have to create some methodology of your own:
something like a file called owner.txt which resides in some directory.

good luck Yotam
0
 
LVL 3

Author Comment

by:Gilesmp
ID: 17152336
Yes, the username of the user currently logged on ... am I correct in saying this is what this script would give you?

------------------------
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colCSItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem")
For Each objCSItem In colCSItems
  WScript.Echo "User Name: " & objCSItem.UserName
Next
------------------------

The comps.txt file is just the name of each PC per line i.e.

computername1
computername2
computername3
etc.


------------------------

Thanks Yotam,

I tried that script, however, it came back with error:

Line: 41
Char: 6
Error: Illegal assignment: 'CheckSerial'
Code: 800A01F5
Source: Microsoft VBScript runtime error

Any ideas?

Thanks for all your help so far guys,

Giles
0
 
LVL 7

Expert Comment

by:yotamsher
ID: 17152387
sorry my mistake
I had moved this between vbscript and jscript, and then mad a mistake in the returning from the function      
line 41 which now shows:
CheckSerial = retVal
should be:
CheckUsers = retVal

Yotam

but I see that you want the currently logged on user, I'll post it soon
0
 
LVL 3

Author Comment

by:Gilesmp
ID: 17153232
Great, that ammendment has made the script run fine now.

I eagerly await your next post :-)

Many thanks,

Giles
0
 
LVL 7

Accepted Solution

by:
yotamsher earned 2000 total points
ID: 17156455
'I hope this is what you need:
 
'Yotam
'START CODE
const FSO_READ_MODE = 1
const FSO_WRITE_MODE = 2
const COMPUTER_NAMES_FILE = "c:\comps.txt"
const RESULTS_FILE = "c:\results.txt" 'warning - will be overwritten each time script runs

Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")

ReadFile(COMPUTER_NAMES_FILE)
Set fso = Nothing

function CheckSerial(ComputerName)
     Dim System
     Dim retVal
     retVal=""
     if Wscript.Arguments.Count > 0 then
          sSystem=Wscript.Arguments(0)
     end if
   
     winmgmt1 = "winmgmts:{impersonationLevel=impersonate}!//"& ComputerName &""

     Set SNSet = GetObject( winmgmt1 ).InstancesOf ("Win32_BIOS")
     for each SN in SNSet
          retVal = retVal & "The serial number for " & ComputerName & " is: " & SN.SerialNumber
     Next
     CheckSerial = retVal
end function

function CheckLoggedOn(ComputerName)
     Dim retVal

     retVal=""
     if Wscript.Arguments.Count > 0 then
          sSystem=Wscript.Arguments(0)
     end if
     winmgmt1 = "winmgmts:{impersonationLevel=impersonate}!//"& ComputerName &"\root\cimv2"
     Set objWMIService = GetObject(winmgmt1)

     Set colComputer = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")
    retVal = retVal & "Loggedon users of " & ComputerName & " are: "
    For Each objComputer in colComputer
       retVal = retVal &  CRLF & objComputer.UserName
    Next

    CheckLoggedOn = retVal
end function


function ReadFile(sFilePath)
     If fso.FileExists(sFilePath) then
          'The file exists, so open it and output its contents
          dim file: set file = fso.OpenTextFile(sFilePath, FSO_READ_MODE)
          dim sLine
          dim sResults: sResults = ""
          Do While file.AtEndOfStream = False
              sLine = file.ReadLine
              sResults = sResults & CheckSerial(sLine) & vbcrlf & CheckLoggedOn(sLine) & vbcrlf
          Loop
          file.Close()
          Set file = Nothing
          WriteResults sResults
     Else
          'The file did not exist
          msgbox sFilePath & " was not found."
     End If
end function

sub WriteResults(sResults)
     dim file: set file = fso.OpenTextFile(RESULTS_FILE, FSO_WRITE_MODE, true)
     file.write(sResults)
     file.Close()
     Set file = Nothing
end sub
'END CODE
0
 
LVL 3

Author Comment

by:Gilesmp
ID: 17166017
Brilliant - that works a charm

Thank you very much

Giles
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

In real business world data are crucial and sometimes data are shared among different information systems. Hence, an agreeable file transfer protocol need to be established.
This article will show how Aten was able to supply easy management and control for Artear's video walls and wide range display configurations of their newsroom.
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …
Starting up a Project

972 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