none
Recherche dans les registres & modification de la valeur RRS feed

  • Question

  • Salut !

    En utilisant Powershell, je veux trouver  un mot clé dans les registres de Windows (HKCU) et le  remplacer par un autre mot.

    Y-a-t-il quelq'un qui a  une petite idée ?

    merci a l'avance

    Hdey64


    • Modifié Hdey64 lundi 11 février 2013 16:10
    lundi 11 février 2013 16:06

Toutes les réponses

  • Bonjour,

    une possible solution ici. Voir le dernier exemple en fin de page.


    Beatus, qui prodest, quibus potest.

    lundi 11 février 2013 18:20
    Modérateur
  • Merci pour l'info, je vais l'étudier ce soir.

    Est-ce que ça s'applique pour les registres ?

    Hdey64

    lundi 11 février 2013 20:05
  • >>Est-ce que ça s'applique pour les registres ?

    Oui, voir le dernier exemple en fin de page.

    Ce n'est pas une fonction facile d'accès, tu peux donc trouver sur le net une approche plus simple.


    Beatus, qui prodest, quibus potest.

    mardi 12 février 2013 20:22
    Modérateur
  • Ça a du bon sens ! merci pour tout, je vais l'adapter .

    Hdey64

    mardi 12 février 2013 20:50
  • Laurant,

    Le terme «Replace-String» n'est pas reconnu comme nom d'applet de commande

    Cette focntion existe-elle reellement, j'ai la version 3 de powershell ?

    Pourriez-vous me le confirmer ?

    Merci encore

    mardi 12 février 2013 21:28
  • Elle n'est pas native, il faut la télécharger comme indiqué en début de page de la page cité : http://windows.developpez.com/telecharger/detail/id/72/Replace-String

    En revanche je ne l'ai pas testé sous Powershell  v3.


    Beatus, qui prodest, quibus potest.


    mercredi 13 février 2013 12:11
    Modérateur
  • Salut,

    Je veux recupérer la donnée d'un d'une valeur d'une clé de registre, c'est une chaine de caracteres. voici mon script :  

    Le probleme de ce script, c'est qu'il cherche seulement le mot clé qui ent que que clé de registre ou le nom de la valeur et

    je n'arrive pas a faire une recherhe de la donnée de la valeur. J'ai essayé avec Get-Itemproperty mais en vain.

    une fois que la valeur est trouvée, je pourrais la modifier aisement.



    $ErrorActionPreference="SilentlyContinue"
    do
    {
       $chemin = read-host "Entrez un point de départ"
       $valide = test-path $chemin
    }
    until ($valide)
    
    $mot = read-host "Entrez un mot-clé"
    
    foreach ($key in get-childitem $chemin -recurse)
    {
       if ($key.name -like "*$mot*")
       {
          write-host $key.Name
       }
       foreach ($valeur in $key.getvaluenames())
       {
          if ($valeur -like "*$mot*")
          {
             write-host "  -> $valeur"
          }
        }
    }

    • Modifié Hdey64 jeudi 14 février 2013 15:39
    jeudi 14 février 2013 15:31
  • Dans l'idée :

    $mot_recherche = "TNS_ADMIN"
    $valeur_recherchee="prod\Oracle\SQLNet"

    foreach ($key in get-childitem  -recurse -Path 'HKLM:\SOFTWARE\ORACLE'  -ea SilentlyContinue)
    {
       foreach ($nomcle in $key.getvaluenames())
       {
          if ($nomcle -like "*$mot_recherche*")
          {
             write-host "« $mot_recherche » trouvé dans « $nomcle »"
             $valeur_cle=Get-ItemProperty -Path $key.name -Name $vc_cle_cherchee -ea SilentlyContinue
             write-host Valeur clé=$valeur_cle
             if ($valeur_cle -like "*$valeur_recherchee*")
             {
               write-host "|_ « $valeur_recherchee » trouvée dans « $valeur_cle »"
             }
          }
        }
    }

    Le script ci-dessous est un peu différent : il recherche dans HKLM:\SOFTWARE\Wow6432Node\ORACLE et HKLM:\SOFTWARE\ORACLE les clés TNS_ADMIN et en modifie les valeurs (en faisant un backup de l'ancienne valeur, si c'est demandé par l'utilisateur)

    Write-Host Script powershell qui modifie les clés TNS_ADMIN des sections HKLM:\SOFTWARE\Wow6432Node\ORACLE et HKLM:\SOFTWARE\ORACLE de la base de registres
    Write-Host Au 1er lancement, répondez éventuellement « o » à la demande de sauvegarde
    Write-Host SI VOUS LE RELANCEZ, NE REPONDEZ SURTOUT PLUS « o », VOUS PERDRIEZ VOTRE 1ERE SAUVEGARDE
    $vc_cle_cherchee="TNS_ADMIN"
    $vc_newval="\\domaine\serveur\Oracle\SQLNet"
    $vc_perform_backup = read-host "Entrez « o » pour effectuer une sauvegarde des valeurs de clés, rien pour ne pas faire de sauvegarde:"


    Function Search-and-Replace 
    {
      Get-ChildItem -Recurse -Path $vc_ruche  -ea SilentlyContinue | foreach {
      # Si dans la section de la base qu'on est en train de parcourir, il n'y a pas de clé "TNS_ADMIN" (=vc_cle_cherchee),
      # le Get-ItemProperty qui suit va sortir une erreur. Pour l'éviter, on utilise l'option "-ea" (ErrorAction)
      $path=$_.PsPath
      $CurrentVal = (Get-ItemProperty -Path $_.PsPath -Name $vc_cle_cherchee -ea SilentlyContinue)
        if ($CurrentVal )
        {
          # Afficher l'objet trouvé :
          # $CurrentVal
          # Mémoriser dans "oldval" la valeur courante de l'entrée TNS_ADMIN (=vc_cle_cherchee)
          $oldval=$CurrentVal.$vc_cle_cherchee
          write-Host "Path de la clé $vc_cle_cherchee trouvée=$path"
          write-Host "Valeur courante ="$oldval
          if ($vc_perform_backup -eq "o")
          {
            Write-Host "|_ On créé une clé BAK_$vc_cle_cherchee dans $path avec comme valeur $oldval"
            # NB : il existe aussi une commande Copy-Item pour copier les clés
            set-itemproperty -path $path -name BAK_$vc_cle_cherchee -value $oldval
          }
          # Faire un Set-ItemProperty pour modifier la valeur
          Write-Host "On positionne la nouvelle valeur pour la clé $path\$vc_cle_cherchee"
          set-itemproperty -path $path -name $vc_cle_cherchee -value $vc_newval
        }
      }
    }        

    # Main

    $vc_ruche="HKLM:\SOFTWARE\Wow6432Node\ORACLE"
    Search-and-Replace 
    $vc_ruche="HKLM:\SOFTWARE\ORACLE"
    Search-and-Replace 


    mercredi 30 janvier 2019 10:27