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