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 :

[VB Script]Lister quelques points de restauration


Sujet :

VBScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut [VB Script]Lister quelques points de restauration
    Bonjour à tous

    je n'y connais rien en vbscript mais on m'a dit de poster dans ce forum.

    Jai trouvé un script vbs qui permet de lister les points de restaurations.

    j'ai un peu epuré le code ce qui donne ceci :

    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
    Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
     
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
     
    Set colItems = objWMIService.ExecQuery("Select * from SystemRestore")
    If colItems.Count = 0 Then
    WScript.Echo "No restore point in system."
    Else
    For Each objItem in colItems
    Wscript.Echo " " & dtmCreationTime & objItem.Description
    dtmConvertedDate.Value = objItem.CreationTime
    dtmCreationTime = dtmConvertedDate.GetVarDate 
    Next
    End If
    J'appelle ce vbs via la commande cscript dans un batch et je stocke les infos dans un txt.

    Mon soucis est que je n'ai pas d'espace entre la date et le nom du point de restauration
    et je souhaiterai qu'il affiche uniquement les 5 derniers points de restauration.

    Comment faire ? pourriez vous m'orienter ou me modifier ce morceau de code ?
    merci d'avance aux membres qui me repondront

    bonne journée
    Acris

  2. #2
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    Pour l'espace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each objItem in colItems
    Wscript.Echo " " & dtmCreationTime & " " & objItem.Description 'espace = " "
    dtmConvertedDate.Value = objItem.CreationTime
    dtmCreationTime = dtmConvertedDate.GetVarDate 
    Next
    Pour en affiché que 5:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim i as integer = 0
    For Each objItem in colItems
    if i <5 then
       Wscript.Echo " " & dtmCreationTime & objItem.Description
       dtmConvertedDate.Value = objItem.CreationTime
       dtmCreationTime = dtmConvertedDate.GetVarDate 
    else
       Exit For
    End if
    Next
    Pour affiché que les 5 derniers par contre, ça ne fonctionnera probablement pas, car le "For Each" Scan tout le paquet, et doit se foutre passablement de l'ordre dans laquelle il apparaisse. Il faudrait donc que tu insères le tout dans un tableau, tri par dates et imprime que les 5 premiers avec une boucle for:

    EDIT: 0 to 4 et non to 5, le 0 compte

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    merci beaucoup pour ton aide
    oula j'ai dejà eu du mal à arriver jusque là alors maintenant un tableau ouch c'est du chinois
    j'y arriverai jamais ..... programmation tu me tues !

    il n'y a pas moyen de tri par date genre la plus recent puis 4 3 2 1 pour avoir les 5 derniers uniquement ?

  4. #4
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    Oui trier mais tu peux pas trier dans le vide, il faut que tu mets tout tes données à quelque part avant!

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    arf j'ai pas de bol

    le code me retourne une erreur lorsque je l'execute dans le batch : erreur (10,7)
    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
     
    Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
     
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
     
    Set colItems = objWMIService.ExecQuery("Select * from SystemRestore")
    If colItems.Count = 0 Then
    WScript.Echo "No restore point in system."
    Else
    Dim i as integer = 0
    For Each objItem in colItems
    if i <5 then
    Wscript.Echo " " & dtmCreationTime & " " & objItem.Description 'espace = " "
    dtmConvertedDate.Value = objItem.CreationTime
    dtmCreationTime = dtmConvertedDate.GetVarDate 
    else
       Exit For
    End if
    Next
    For i = 0 to 4
    pourquoi ?

  6. #6
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    Tu peux pas que mettre le

    Dans le vide...

    Honnêtement j'ai pas vraiment le temps de régler ça vendredi, mais il semble te manquer des notions en VB, je vais essayer de revenir voir lundi et de t'aider dans ton code...

    J'espère que c'est pas pour aujourd'hui

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    Oui je manque de notion en vb .
    Non ce n'est pas aujourd'hui j'ai du temps pas de soucis.
    Merci pour ton aide ça va beaucoup m'aider pour mon petit batch.

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Si je me souviens bien colItems, étant une collecgtion, doit avoir une propriété count donnant le nombre d'élément dans la collection.

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = colItems.count - 5 to colItems.count
    'code pour l'affichage
    next
    Cela devrait afficher les 5 derniers éléments de la liste.

    J'ai des doutes sur la validités de ceci en VBS :
    Je ferais plutot :
    Pour les notions de VBS qu'il te manque, je te conseille d'aller voir la FAQ VBS

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    ça donnerai quoi dans le code exactement car je ne sais pas ou le mettre
    merci pour ton aide

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je n'ai pas le temps de tester, mais cela devrais être un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i = colItems.count - 5 to colItems.count
    Wscript.Echo " " & dtmCreationTime & " " & colItems(i).Description 'espace = " "
    dtmConvertedDate.Value = colItems(i).CreationTime
    dtmCreationTime = dtmConvertedDate.GetVarDate 
    next
    A la place de ton foreach.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    ce code ne fonctionne pas, dommage il me renvoie une erreur

    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
    Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
     
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
     
    Set colItems = objWMIService.ExecQuery("Select * from SystemRestore")
    If colItems.Count = 0 Then
    WScript.Echo "No restore point in system."
    Else
    for i = colItems.count - 5 to colItems.count
    Wscript.Echo " " & dtmCreationTime & " " & colItems(i).Description 'espace = " "
    dtmConvertedDate.Value = colItems(i).CreationTime
    dtmCreationTime = dtmConvertedDate.GetVarDate
    next
    End If

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    et quoi comme erreur ?

    Edit :
    J'ai corrigé ton problème, puisque je n'ai pas réussi à utiliser la colllection par les index, j'ai utilisé le foreach qui liste tous les éléments de la collection.
    Puis j'ai utilié un compteur, que je décrémente à chaque tour de la boucle, le compteur ayant au départ la valeur correspondant au nombres d'élements dasn la collection.
    Lorsque le compteur est inférieur à 5 nous nous situons au niveau des 5 derniers éléments, et nous pouvons donc affiché.
    J'ai testé et cela fonctionne :
    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
    Dim strComputer
    Dim i
     
    i = 0
    strComputer = "."
     
    Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
    Set colItems = objWMIService.ExecQuery("Select * from SystemRestore")
     
    If colItems.Count = 0 Then
       WScript.Echo "No restore point in system."
    Else
       i = colItems.Count
       For Each objItem in colItems
          if i <5 then
             Wscript.Echo " " & dtmCreationTime & " " & objItem.Description 'espace = " "
             dtmConvertedDate.Value = objItem.CreationTime
             dtmCreationTime = dtmConvertedDate.GetVarDate 
          End if
    	  i = i - 1
       Next
    End If

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    j'ai ce message lorsque j'active la balise echo
    C:\Documents and setting....\user\Bureau\all.vbs(11,1) SWbemObjectSet : echec generique je pense

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    excellentissme ! trop merci beaucoup pour ton aide

    une petite derniere question :

    j'obtenis ceci dans mon txt :

    Microsoft (R) Windows Script Host Version 5.6
    Copyright (C) Microsoft Corporation 1996-2001. Tous droits r‚serv‚s.

    restore -------------------------> pourquoi il apparait sans date ?
    2008-07-22 08:09:59 restore
    2008-07-22 08:14:59 restore
    2008-07-22 09:35:35 restore
    serais tu me dire pourquoi j'ai un "orphelin" sans date et heure ?

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    J'ai la même chose.
    Je suppose que pour le premier point de restauration il n'y a pas de date de création. Peut être un point de restauration fait par windows après l'instal

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Ha non je suis bête, il faut mettre dtmCreationTime = dtmConvertedDate.GetVarDate avant le echo.
    En effet si tu n'initialise pas la variable, tu n'affichera rien. Là tu fais l'initialisation après l'affichage.

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    héhé rien compris ou il faut le mettre

    edit car le dtmCreationTime = dtmConvertedDate.GetVarDate apparait deja en fin de script

  18. #18
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Heu ... Pourtant c clair :
    Le dtmCreationTime avant le Wscript.Echo pas après comme là, mais toujours dans la boucle.

    Si tu as besoin de faire d'autre script, je te conseille quand même avant de rechercher des cours sur la programmation sur le net, parce que si "intialisation de variable avant leur utilisation" ne te parles pas alors tu n'es pas la m.... La programmation c'est comme tout cela s'apprend, ce n'est pas inée.

    Bon si tu n'arrives toujours pas à le placer je le ferais, mais j'espère au moins que tu arrives à faire cela.

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    j ai tjs eu des problèmes avec les boucles meme en php et j'ai eu des cours

    le script vient d'une base provenant du laboratoire microsoft

    bien entendu je n ai pas réussi à le place au bon endroit.

    vraiement navrée

    quoi que :

    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
    Dim strComputer
    Dim i
     
    i = 0
    strComputer = "."
     
    Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
    Set colItems = objWMIService.ExecQuery("Select * from SystemRestore")
    If colItems.Count = 0 Then
       WScript.Echo "No restore point in system."
    Else
       i = colItems.Count
       For Each objItem in colItems
          if i <5 then
          dtmConvertedDate.Value = objItem.CreationTime
          dtmCreationTime = dtmConvertedDate.GetVarDate
          Wscript.Echo " " & dtmCreationTime & " " & objItem.Description 'espace = " "
    End if
    	  i = i - 1
       Next
    End If
    je pense que c'est ok.
    merci beaucoup pour ton aide.

  20. #20
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    C'est ok, maintenant dtmCreationTime contiendra toujours une valeur avant que la ligne demandant l'affichage ne soit exécuté.

    Il faut savoir que l'interpréteur VBS met à Empty toute les variables qui n'ont pas été affectés par une valeur, et lorsque Wscript.Echo doit afficher Empty, il n'affiche rien dans la box (la petite fenetre du message d'alerte ou la sortie console si tu lances depuis une console dos)
    Mais maintenant tu affectes la valeurs à la variables, et puis tu l'affiches.

    Après comment tu mets le résultat dans ton fichier texte ?
    Tu fait un truc du genre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cscript MonScript.vbs >> MonFichierTexte.txt
    Sache que depuis un script tu peux créer ou ouvrir un fichier, écrire des choses dedans, puis le refermer.
    Tu peux essayer de le faire pour t'entrainer à la programation, pour cela il faut utiliser FileSystemObject. 1/3 de la FAQ VBS est consacré à cet objet.

Discussions similaires

  1. Script pour activer Point de restauration si non actif
    Par chabin972 dans le forum Programmation système
    Réponses: 1
    Dernier message: 17/02/2015, 15h51
  2. Réponses: 0
    Dernier message: 13/10/2014, 15h26
  3. SCRIPT Désactiver / Activer Point de restauration
    Par gicinternational dans le forum VBScript
    Réponses: 3
    Dernier message: 04/05/2010, 15h46
  4. quelques problèmes script lister répertoire
    Par hubald dans le forum VBScript
    Réponses: 4
    Dernier message: 02/02/2009, 12h58
  5. point de restauration
    Par PoOky dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 02/09/2005, 18h26

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