IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Afficher programme(s) récemment installé(s)


Sujet :

VBScript

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
      0  0

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr
      0  0

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    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
      0  0

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    ..... 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 :
    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.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr
      0  0

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
      0  0

  6. #6
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    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.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr
      0  0

Discussions similaires

  1. Programme requis avant installation
    Par kazylax dans le forum C#
    Réponses: 4
    Dernier message: 01/12/2010, 13h42
  2. Réponses: 4
    Dernier message: 26/11/2009, 19h19
  3. problème d'exécution de programme sans delphi installé
    Par bouha2008 dans le forum Débuter
    Réponses: 13
    Dernier message: 09/06/2009, 17h08
  4. Programme qui s'installe systématiquement : Power IEv3
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/06/2007, 23h46
  5. Réponses: 2
    Dernier message: 28/03/2007, 21h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo