web-dev-qa-db-fra.com

J'ai besoin d'écrire la sortie VBS WScript.Echo en texte ou en cvs

J'essaye d'écrire un VBScript qui listera toute l'application installée sur un système dans un fichier texte ou csv. J'ai pu trouver un code existant pour répertorier tous les logiciels (y compris le nom, la version, la date et la taille). Lorsque je l’utilise actuellement, j’ai trouvé que l’écho apparaissait comme un écho d’hôte. Que dois-je ajouter au vbs pour que chacun des échos soit exporté dans un fichier? Je suis sûr que c'est facile, mais je n'arrive pas à trouver une solution.

Ci-dessous, le script que j'ai trouvé:

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

Une façon de procéder consiste à exécuter le script via cscript.exe et à rediriger la sortie vers un fichier:

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

Si vous souhaitez modifier le script pour écrire sa sortie dans un fichier, quel que soit son mode d'exécution, vous devez ajouter du code pour ouvrir/fermer le fichier de sortie:

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

...

f.Close
'End of Script

et remplacez chaque occurrence de WScript.Echo par f.WriteLine.

15
Ansgar Wiechers

Skarykid - Je sais que vous avez reçu et répondu à cette question il y a presque 6 mois, mais je cherchais un scénario similaire et je n'ai pas eu beaucoup de succès pour obtenir exactement ce que je voulais. J'ai modifié le script que vous avez fourni, ajouté les suggestions d'Ansgar et un petit code de ma part pour proposer la version améliorée suivante.

Ce script générera un fichier texte tabulé de toutes les applications 32 bits et 64 bits installées sur la machine locale et ouvrira ensuite le fichier obtenu dans le bloc-notes.

J'espère que cela vous aidera ou aidera quelqu'un d'autre à trouver ce fil.

'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
2
kenundrum

En plus de la réponse très appréciée d’Ansgar, changer 

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

à

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

permet au script VBS de créer les fichiers de sortie plutôt que de demander à un fichier vierge existant de figurer déjà dans la destination. 

0
gerendasi