Précédent   Forum du club des développeurs et IT Pro > Autres langages > Général Visual Basic 6 et VBScript > VBScript
VBScript Le forum d'entraide sur VBScript. Avant de poster -> La FAQ VBScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Discussion fermée
 
Outils de la discussion
Publicité
'
Vieux 09/11/2012, 11h54   #1
olivier1209
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : novembre 2006
Messages : 147
Points : 18
Points : 18
Par défaut Afficher programme(s) récemment installé(s)

Bonjour,

Je souhaiterais afficher le nom d'un programme installé entre un temps t et t+1. Je commence avec ce code permettant d'afficher tous les programmes installés, et souhaiterais ensuite en afficher un différentiel, peut être en passant par un des fichiers CSV. Afin de n'en ressortir uniquement le ou les programmes qui ont été installés dans le temps impartis.

Merci pour votre aide

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Set oShell = CreateObject("wscript.Shell")
Set env = oShell.environment("Process")
strComputer = env.Item("Computername")
Const HKEY_LOCAL_MACHINE = &H80000002
Const UnInstPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
".\root\default:StdRegProv")
oReg.EnumKey HKEY_LOCAL_MACHINE, UnInstPath, arrSubKeys
software = "*******************************" & Now & "****************************" & vbCrLf
software = software & "*******************************Logiciels installés********************************" & vbCrLf
For Each subkey In arrSubKeys
        'MsgBox subkey
        If Left (subkey, 1) <> "{" Then
                software = software & subkey & vbCrLf
        End If
Next
software = software & "*********************************************************" & vbCrLf
 
Set fso = CreateObject("Scripting.FileSystemObject")
 
'Détermine si le fichier csv existe déjà ou s'il doit le créer
If Not fso.FileExists("inventaire " & strComputer & ".csv") Then
        set ts = fso.CreateTextFile("inventaire " & strComputer & ".csv", True)
Else
        set ts = fso.OpenTextFile("inventaire " & strComputer & ".csv", 2, True)
End If
 
ts.write software
olivier1209 est déconnecté   Envoyer un message privé 00
Vieux 10/11/2012, 16h51   #2
l_autodidacte
Modérateur
 
Avatar de l_autodidacte
 
Homme Moncef
Directeur de lycée
Inscription : juillet 2009
Messages : 1 213
Détails du profil
Informations personnelles :
Nom : Homme Moncef
Âge : 57
Localisation : Tunisie

Informations professionnelles :
Activité : Directeur de lycée
Secteur : Enseignement

Informations forums :
Inscription : juillet 2009
Messages : 1 213
Points : 2 226
Points : 2 226
Envoyer un message via Skype™ à l_autodidacte
Salut;

1ère remarque : Il existe pas mal de programmes qui n'écrivent rien sous la clé Uninstall
2ème remarque : Certains programmes écrivent sous leur propre clé une entrée appelée InstallDate qui peut être utilisée dans ce cas pour déterminer la date d'installation. le code suivant en donne une idée sous forme de boite de message que tu peux modifier selon ton besoin :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Set oShell = CreateObject("wscript.Shell")
Set env = oShell.environment("Process")
strComputer = env.Item("Computername")
Const HKEY_LOCAL_MACHINE = &H80000002
Const UnInstPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
".\root\default:StdRegProv")
oReg.EnumKey HKEY_LOCAL_MACHINE, UnInstPath, arrSubKeys
software = "*******************************" & Now & "****************************" & vbCrLf
software = software & "*******************************Logiciels installés********************************" & vbCrLf
For Each subkey In arrSubKeys
       ' MsgBox subkey
 
        If Left (subkey, 1) <> "{" Then
                software = software & subkey & vbCrLf
				If RegReadValue(SubKey , "InstallDate")<>"" Then _
				msgbox ReadInstallDate
        End If
Next
software = software & "*********************************************************" & vbCrLf
 
Set fso = CreateObject("Scripting.FileSystemObject")
 
'Détermine si le fichier csv existe déjà ou s'il doit le créer
If Not fso.FileExists("inventaire " & strComputer & ".csv") Then
        set ts = fso.CreateTextFile("inventaire " & strComputer & ".csv", True)
Else
        set ts = fso.OpenTextFile("inventaire " & strComputer & ".csv", 2, True)
End If
 Private Function RegReadValue(strFind,strValue)
  oReg.EnumValues HKEY_LOCAL_MACHINE, UnInstPath & "\" & strFind,arrValueNames, arrValueTypes
  If Not IsNull(arrValueNames) Then
    For Each Value In arrValueNames
	    If Ucase(Value) = Ucase(strValue) Then 
	      Ret = Value 
	  	  Exit For
	    End If
    Next	  
  End If	
  RegReadValue = Ret
 End Function
 Function ReadInstallDate()
   Ret = oShell.RegRead("HKLM\" & UnInstPath & Subkey & "\InstallDate")
   LaDate = Right(Ret,2) & "/" & Mid(Ret,5,2) & "/" & Left(Ret,4)
 
   ReadInstallDate = LaDate
 End Function
ts.write software
ts.Close
__________________
A cœur vaillant rien d'impossible
l_autodidacte est déconnecté   Envoyer un message privé 00
Vieux 27/11/2012, 13h12   #3
olivier1209
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : novembre 2006
Messages : 147
Points : 18
Points : 18
Merci pour ta réponse, mais du coup dans quelle clé de registre dois-je chercher ? Si peu sont dans Uninstall , et quelques uns dans InstallDate ?
Merci pour ton code, j'ai essayé mais ça ne m'affiche pas tous les programmes que j'ai dans le menu "ajout/suppression"

Olivier
olivier1209 est déconnecté   Envoyer un message privé 00
Vieux 27/11/2012, 17h59   #4
l_autodidacte
Modérateur
 
Avatar de l_autodidacte
 
Homme Moncef
Directeur de lycée
Inscription : juillet 2009
Messages : 1 213
Détails du profil
Informations personnelles :
Nom : Homme Moncef
Âge : 57
Localisation : Tunisie

Informations professionnelles :
Activité : Directeur de lycée
Secteur : Enseignement

Informations forums :
Inscription : juillet 2009
Messages : 1 213
Points : 2 226
Points : 2 226
Envoyer un message via Skype™ à l_autodidacte
Citation:
..... j'ai essayé mais ça ne m'affiche pas tous les programmes que j'ai dans le menu "ajout/suppression"
Ce que j'ai dit :
Citation:
2ème remarque : Certains programmes écrivent sous leur propre clé une entrée appelée InstallDate qui.....
Dans le cas où le programme n'écrit rien, je ne vois pas comment on peut lui tirer ses informations.
__________________
A cœur vaillant rien d'impossible
l_autodidacte est déconnecté   Envoyer un message privé 00
Vieux 28/11/2012, 13h34   #5
olivier1209
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : novembre 2006
Messages : 147
Points : 18
Points : 18
Merci, j'ai un peu avancé , j'ai un premier programme qui regarde les clé de registre et établit une liste (pas forcément exhaustive) des programmes installés :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
' List All Installed Software
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
strComputer = "."
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
 
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
 
Set objReg = GetObject("winmgmts://" & strComputer & _
 "/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
 
If Not fso.FileExists("inventaire " & strComputer & ".csv") Then
        set ts = fso.CreateTextFile("inventory.csv", True)
Else
        set ts = fso.OpenTextFile("inventory.csv", 2, True)
End If
 
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 & strValue1
			DisplayName = DisplayName & strValue1 & VbCrLf
			'wscript.echo DisplayName
		  End If	 
 Next
 
ts.write DisplayName
ts.Close
Ensuite j'ai un 2eme script vbs qui compare les clé (registry) et ce qui est écrit dans le CSV : si une ligne est différente on sort de la boucle - ça veut dire qu'un nouveau programme a été installé => voilà mon différentiel.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
' List All Installed Software
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
strComputer = "."
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
boolDiff = False
ApplicationName = ""
 
Dim ts, fso, Line
Set fso = CreateObject("Scripting.FileSystemObject")
 
Set objReg = GetObject("winmgmts://" & strComputer & _
 "/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
 
set ts = fso.OpenTextFile("inventory.csv", 1, True)
 
If Not fso.FileExists("inventory.csv") Then
        wscript.echo "Error : inventory file is missing !"
Else
        set ts = fso.OpenTextFile("inventory.csv", 1, True)
End If
 
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
 
				  Do While ts.AtEndOfStream <> true 
 
				  Line = ts.ReadLine	
 
				  wscript.echo "Display Name : " & strValue1 & " Line : " & Line
 
							If StrComp(strValue1,Line) <> 0 Then
 
										'wscript.echo "Line :" & Line & " Reg : " & strValue1
										'wscript.echo "new reg entry : " & strValue1
										ApplicationName = strValue1
 
										Exit For
							End If
				  Loop
 
		  End If
Next		  
 
		 if  ApplicationName <> "" Then 
		 wscript.echo "application : " & ApplicationName
		 End if
 
				'wscript.echo "edition du MSI avec :" & ApplicationName
 
		 'Edit MSI
ts.Close
Par contre là je sèche un peu j'avoue
Olivier
olivier1209 est déconnecté   Envoyer un message privé 00
Vieux 03/12/2012, 13h50   #6
l_autodidacte
Modérateur
 
Avatar de l_autodidacte
 
Homme Moncef
Directeur de lycée
Inscription : juillet 2009
Messages : 1 213
Détails du profil
Informations personnelles :
Nom : Homme Moncef
Âge : 57
Localisation : Tunisie

Informations professionnelles :
Activité : Directeur de lycée
Secteur : Enseignement

Informations forums :
Inscription : juillet 2009
Messages : 1 213
Points : 2 226
Points : 2 226
Envoyer un message via Skype™ à l_autodidacte
Le problème ici est de chercher chaque entrée du registre dans le fichier csv.
Si elle s'y trouve, on continue sinon on arrête en donnant le nom de la nouvelle entrée trouvée.
Mais tel que le code se présente, on sort de la boucle avec la lecture de la première ligne du fichier csv.
__________________
A cœur vaillant rien d'impossible
l_autodidacte est déconnecté   Envoyer un message privé 00
Discussion fermée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h41.


 
 
 
 
Partenaires

Hébergement Web