I need to write VBS WScript.Echo output to text or cvs
Asked Answered
M

3

9

I am attempting to write a VBScript that will list all of the installed application on a system in a text file or csv. I was able to find an existing code to list all of the software (including name, version, date, and size). When I currently run it as I have found it the echo comes up as a host echo pop up. What do I need to add to the vbs to make it output each of the echos to a File? I am sure this is easy, but i can't seem to find a solution.

Below is the script I found:

Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
' List All Installed Software





Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
strComputer = "."
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
strEntry1b = "QuietDisplayName"
strEntry2 = "InstallDate"
strEntry3 = "VersionMajor"
strEntry4 = "VersionMinor"
strEntry5 = "EstimatedSize"

Set objReg = GetObject("winmgmts://" & strComputer & _
 "/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
WScript.Echo "Installed Applications" & VbCrLf
For Each strSubkey In arrSubkeys
  intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _
   strEntry1a, strValue1)
  If intRet1 <> 0 Then
    objReg.GetStringValue HKLM, strKey & strSubkey, _
     strEntry1b, strValue1
  End If
  If strValue1 <> "" Then
    WScript.Echo VbCrLf & "Display Name: " & strValue1
  End If
  objReg.GetStringValue HKLM, strKey & strSubkey, _
   strEntry2, strValue2
  If strValue2 <> "" Then
    WScript.Echo "Install Date: " & strValue2
  End If
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry3, intValue3
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry4, intValue4
  If intValue3 <> "" Then
     WScript.Echo "Version: " & intValue3 & "." & intValue4
  End If
  objReg.GetDWORDValue HKLM, strKey & strSubkey, _
   strEntry5, intValue5
  If intValue5 <> "" Then
    WScript.Echo "Estimated Size: " & Round(intValue5/1024, 3) & " megabytes"
  End If
Next
Melainemelamed answered 19/6, 2013 at 14:48 Comment(0)
O
17

One way to go about this would be to run the script via cscript.exe and redirect the output to a file:

cscript.exe //NoLogo "C:\path\to\your.vbs" >"C:\output.txt"

If you want to modify the script to write its output to a file regardless of how it's run, you need to add code for opening/closing the output file:

Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set f = fso.OpenTextFile("C:\output.txt", 2)

...

f.Close
'End of Script

and replace each occurrence of WScript.Echo with f.WriteLine.

Ostrowski answered 19/6, 2013 at 14:56 Comment(0)
H
2

Skarykid - I know you received and answer to this almost 6 months ago, but I've been looking for a similar script & haven't had much success getting exactly what I wanted. I've modified the script you provided, added Ansgar's suggestions & a little code of my own to come up with the following souped-up version.

This script will generate a tabulated text file of all 32bit and 64bit applications installed on the local machine & will then open the resulting file in notepad.

Hope this helps you or anyone else coming across this thread.

'listapps.vbs
'Generates a text file listing all 32bit & 64bit apps installed on the local machine
'===================================================================================

'Declare constants, variables and arrays
'---------------------------------------

'Registry keys and values
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE 

Dim arrKeys(1)
arrKeys(0) = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
arrKeys(1) = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"

strComputer = "." 
strEntry1a = "DisplayName" 
strEntry1b = "QuietDisplayName" 
strEntry2 = "Publisher"
strEntry3 = "InstallDate"
strEntry4 = "EstimatedSize"
strEntry5 = "DisplayVersion"

'Create the output file
Dim objShell, objShellEnv, strComputerName, objFso
Set objShell = WScript.CreateObject("WScript.Shell")
Set objShellEnv = objShell.Environment("Process")
strComputerName = objShellEnv("ComputerName")
Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
Set outputFile = objFso.CreateTextFile(strComputerName & ".txt", True)
'===================================================================================

Set objReg = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv") 

'Print header (comment out the line below if you do not want headers in your output file)
'outputFile.WriteLine"Name" & vbTab & "Publisher" & vbTab & "Installed On" & vbTab & "Size" & vbTab & "Version" & VbCrLf 

For i = 0 to 1

  'Check to ensure registry key exists
  intCheckKey = objReg.EnumKey(HKLM, arrKeys(i), arrSubkeys)

  If intCheckKey = 0 Then
    For Each strSubkey In arrSubkeys 
      intReturn = objReg.GetStringValue(HKLM, arrKeys(i) & strSubkey, strEntry1a, strValue1) 

      If intReturn <> 0 Then 
        objReg.GetStringValue HKLM, arrKeys(i) & strSubkey, strEntry1b, strValue1 
      End If 

      objReg.GetStringValue HKLM, arrKeys(i) & strSubkey, strEntry2, strValue2
      objReg.GetStringValue HKLM, arrKeys(i) & strSubkey, strEntry3, strValue3
      objReg.GetDWORDValue HKLM, arrKeys(i) & strSubkey, strEntry4, strValue4
      objReg.GetStringValue HKLM, arrKeys(i) & strSubkey, strEntry5, strValue5

    If strValue1 <> "" Then
      outputFile.WriteLine strValue1 & vbTab & strValue2 & vbTab & strValue3 & vbTab & strValue4 & vbTab & strValue5
    End If

    Next 

  End If

Next 

'Close the output file
outputFile.Close

'Launch output file for review
objShell.run "notepad.exe " & strComputerName & ".txt"

'Clean up and exit
Set objShell = Nothing
Set objFso = Nothing
Hardesty answered 1/1, 2014 at 19:56 Comment(0)
R
2

In addition to Ansgar's top-rated answer, changing

Set f = fso.OpenTextFile("C:\output.txt", 2)

to

Set f = fso.CreateTextFile("C:\output.txt", 2)

allows VBS script to create the output files rather than requiring an existing blank file to already be in the destination.

Reshape answered 20/7, 2015 at 23:58 Comment(4)
Read msdn.microsoft.com/en-us/library/314cz14s%28v=vs.84%29.aspx and msdn.microsoft.com/en-us/library/5t9b5c0c%28v=vs.84%29.aspx to see why this dangerous misinformation.Polyunsaturated
I've read through both links carefully but don't see why this is "dangerous"Reshape
It hides the 3rd 'create' parameter of .OpenTextFile and wrongly implies that the 2nd parameter of .CreateTextFile is an io-mode.Polyunsaturated
But the first one was not gerendasi's statement and the second one is working as intended, although by mistake and coincidence. Which is as bad as if it wasn't. But a little explanation would be suited if he gets "-1" for it. To add third parameter, True, to .OpenTextFile would mean "create if non-existant". Second parameter in CreateTextFile is "overwrite", your number 2 is cast to True so it's working, but not as you though it is. Still these two methods, while used as just described, will act differently. First will add, second overwrite the output.txt fileEvangelist

© 2022 - 2024 — McMap. All rights reserved.