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

Programmation et administration système Perl Discussion :

Perl base de registre


Sujet :

Programmation et administration système Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Perl base de registre
    Bonjour,
    J'ai un petit problème de script perl avec WMI, il n'affiche pas la valeur demander mais plutot ceci:

    Win32::OLE=HASH(0x1aa7ee4)

    Mon code:

    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
    use strict;
    use Win32::OLE;
     
     
    use constant wbemFlagReturnImmediately => 0x10;
    use constant wbemFlagForwardOnly => 0x20;
    use XML::Dumper;
     
    my @computers = ("localhost");
     
    foreach my $computer (@computers) {
       my $objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") or die "WMI connection failed.\n";
       my $colItems = $objWMIService->ExecQuery("SELECT * FROM Win32_RegistryAction WHERE Hive='HKEY_LOCAL_MACHINE', Keypath='SYSTEM\\ControlSet001\\Control', Valuename = 'CurrentUser'", "WQL",
                      wbemFlagReturnImmediately | wbemFlagForwardOnly);
     
        print "%{$colItems}";
     
    }sub WMIDateStringToDate(strDate)
     
    { 
       return "blah";
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Normal, tu affiches une référence à un hash.
    Ce bout de script provient du Scriptomatic, et a subi un copié / collé incomplet.

    Voici la version complète et fonctionnelle :

    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
    use strict;
    use Win32::OLE('in');
     
    use constant wbemFlagReturnImmediately => 0x10;
    use constant wbemFlagForwardOnly => 0x20;
     
    my @computers = ("localhost");
    foreach my $computer (@computers) {
       print "\n";
       print "==========================================\n";
       print "Computer: $computer\n";
       print "==========================================\n";
     
       my $objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") or die "WMI connection failed.\n";
       my $colItems = $objWMIService->ExecQuery("SELECT * FROM Win32_RegistryAction", "WQL",
                      wbemFlagReturnImmediately | wbemFlagForwardOnly);
     
       foreach my $objItem (in $colItems) {
          print "ActionID: $objItem->{ActionID}\n";
          print "Caption: $objItem->{Caption}\n";
          print "Description: $objItem->{Description}\n";
          print "Direction: $objItem->{Direction}\n";
          print "EntryName: $objItem->{EntryName}\n";
          print "EntryValue: $objItem->{EntryValue}\n";
          print "key: $objItem->{key}\n";
          print "Name: $objItem->{Name}\n";
          print "Registry: $objItem->{Registry}\n";
          print "Root: $objItem->{Root}\n";
          print "SoftwareElementID: $objItem->{SoftwareElementID}\n";
          print "SoftwareElementState: $objItem->{SoftwareElementState}\n";
          print "TargetOperatingSystem: $objItem->{TargetOperatingSystem}\n";
          print "Version: $objItem->{Version}\n";
          print "\n";
       }
    }

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Mais j'aurai voulu affiche qu'une seul valeur bien definie qui se trouve dans la base de registre

  4. #4
    Invité
    Invité(e)
    Par défaut
    Change alors la requête WMI, comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Win32_RegistryAction WHERE Name=ma_valeur_au_choix
    Et dans la boucle foreach, tu n'es pas obligé de faire un print de tous les champs.

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci bien de ta réponse je vais voir ca de suite.

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Sa ne fonctionne pas

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    J'ai remplacer name par key.


    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
     
    use strict;
    use Win32::OLE('in');
     
    use constant wbemFlagReturnImmediately => 0x10;
    use constant wbemFlagForwardOnly => 0x20;
     
    my @computers = ("localhost");
    foreach my $computer (@computers) {
       print "\n";
       print "==========================================\n";
       print "Computer: $computer\n";
       print "==========================================\n";
     
       my $objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") or die "WMI connection failed.\n";
       my $colItems = $objWMIService->ExecQuery("SELECT * FROM Win32_RegistryAction WHERE KEY=SYSTEM\ControlSet001\Control", "WQL",
                      wbemFlagReturnImmediately | wbemFlagForwardOnly);
     
       foreach my $objItem (in $colItems) {
          print "ActionID: $objItem->{ActionID}\n";
          print "Caption: $objItem->{Caption}\n";
          print "Description: $objItem->{Description}\n";
          print "Direction: $objItem->{Direction}\n";
          print "EntryName: $objItem->{EntryName}\n";
          print "EntryValue: $objItem->{EntryValue}\n";
          print "key: $objItem->{key}\n";
          print "Name: $objItem->{Name}\n";
          print "Registry: $objItem->{Registry}\n";
          print "Root: $objItem->{Root}\n";
          print "SoftwareElementID: $objItem->{SoftwareElementID}\n";
          print "SoftwareElementState: $objItem->{SoftwareElementState}\n";
          print "TargetOperatingSystem: $objItem->{TargetOperatingSystem}\n";
          print "Version: $objItem->{Version}\n";
          print "\n";
       }
    }

  8. #8
    Invité
    Invité(e)
    Par défaut
    Formule ta demande clairement !!
    Que veux-tu faire au juste ?

    Liste le contenu d'une clé de registre ? Utilise Win32::TieRegistry

    Exemple :

    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
    use Win32::OLE('in');
    use Win32::TieRegistry( Delimiter=>"#", ArrayValues=>0 );
     
     
    use constant wbemFlagReturnImmediately => 0x10;
    use constant wbemFlagForwardOnly => 0x20;
     
    $pound= $Registry->Delimiter("/");
     
    $softKey = $Registry->{"LMachine/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/"}
    		or  die "Can't read LMachine/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall key: $^E\n";
     
    	foreach(keys %$softKey) {
    		$appNAME = $softKey->{$_}{'DisplayName'} || '---';
    		$appVERSION = $softKey->{$_}{'DisplayVersion'} || '---';
    		$appEDITEUR = $softKey->{$_}{'Publisher'} || '---';
     
            unless ($appNAME eq '---') {
    			print "$appEDITEUR,$appNAME,$appVERSION";
    		}
    	}

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Le but de mon script est de se connecter à distance donc en utilisant WMI, pour qu'il me donne la valeur de ceci:

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SystemBootDevice

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par smg257 Voir le message
    Le but de mon script est de se connecter à distance donc en utilisant WMI, pour qu'il me donne la valeur de ceci:

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SystemBootDevice
    Oui je viens de te mettre cet exemple juste au dessus...

Discussions similaires

  1. Comment manipuler la base de registre Windows en Perl ?
    Par djibril dans le forum Programmation et administration système
    Réponses: 6
    Dernier message: 16/05/2013, 01h14
  2. accès à la base de registre 64bits depuis le perl 32
    Par Billette dans le forum Langage
    Réponses: 0
    Dernier message: 26/09/2008, 15h20
  3. Perl et base de registre
    Par spirit_epock dans le forum Langage
    Réponses: 11
    Dernier message: 15/03/2006, 19h30

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