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

Scripts/Batch Discussion :

Tester la présence d'une clef registre [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Rédacteur
    Avatar de Benj.
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2009
    Messages
    839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 839
    Points : 1 849
    Points
    1 849
    Par défaut Tester la présence d'une clef registre
    Bonjour,

    je me lance dans le scripting PowerShell. D'où ma question à caractère néophyte. Ma question est la suivante : comment tester l'existence d'une clef dans le registre et récupérer sa valeur.

    Admettons que je souhaite tester puis récupérer la valeur de la clef HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown

    J'ai donc utilisé le code suivant :
    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
    # Chemins registre
    $HKLM_Mem_management = "HKLM:SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"
    
    [...]
    
    # Création du label $label_utilisateur
    $label_utilisateur = New-Object System.Windows.Forms.Label
    
    [...]
    
    $clef_registre_existe = Test-Path $HKLM_Mem_management
    if($clef_registre_existe -eq $true)
    {
        $value = (Get-Item -Path $HKLM_Mem_management)."ClearPageFileAtShutdown"
        valeur de la clef si elle existe sinon "Clef registre inexistante !"
    } else {
        $value = "Chemin registre inaccessible !"
    }
    
    $label_utilisateur.Text = "Utilisateur : $resultat"
    Seulement, j'ai beau avoir testé différentes méthodes pour faire cette condition (celle en gras) mais aucune ne fonctionne. J'ai essayé de comparer avec"", $null et consorts mais rien.

    Autre question, est-il possible de tester directement la présence (ou non) d'une clef ? Visiblement (et d'après l'aide en ligne de MS), Test-Path retourne toujours FALSE si on souhaite lui passer la clé directement.

    Je fais donc appel à votre aide et vous remercie par avance.
    Bazinga !

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Il faut utiliser Get-ItemProperty:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $value = (Get-ItemProperty  -path $HKLM_Mem_management).ClearPageFileAtShutdown
    Pour le tester la présence tu peux utiliser ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (Get-ItemProperty  -path $HKLM_Mem_management).ClearPageFileAtShutdown -eq $null
     
    (Get-ItemProperty  -path $HKLM_Mem_management).ClearPageFileAtShutdow -eq $null

  3. #3
    Rédacteur
    Avatar de Benj.
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2009
    Messages
    839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 839
    Points : 1 849
    Points
    1 849
    Par défaut
    Génial !

    Merci pour cette réponse ;-)

    Bonne continuation.
    Bazinga !

  4. #4
    Membre éclairé Avatar de suchiwa
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2010
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 435
    Points : 899
    Points
    899
    Par défaut
    Bonjour,

    Je veux tester une valeur de clé de registre que je modifie.

    J'ai repris l'exemple et j'ai un problème de block d'instruction, malgrés le bon résultat de la condition :

    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
    
    $HKML_IPall = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLSERVER\SuperSocketNetLib\Tcp\IPAll"
    
    
    $TcpPort = Set-ItemProperty $HKML_IPall -name "TcpPort" -value "1433"
    $TcpDynamicPorts = Set-ItemProperty $HKML_IPall -name "TcpDynamicPorts" -value $null
    if ((($TcpPort).TcpPort -eq 1433) -and (($TcpDynamicPorts).TcpDynamicPorts -eq $null))
    {
    write-host "Tcp End"
    }
    else
    {
    write-host "Tcp Error"
    }
    J'ai essayé avec les parenthèses globales, sans, $TcpPort.TcpPort .. je comprends pas car j'ai un retour négatif, "Tcp Error", mais quand je regarde la le registre, tout est ok....

    Le $error[0] me dit "Missing statement block after if ( condition )"

    Le problème vient du "if", j'en ai fait des kilomètres de "if", celui-ci m'échappe, un ".", une "," ou une bétise comme ça doit trainer...
    Dans le doute, reboot...

    https://mcp.microsoft.com/authenticate/validatemcp.aspx
    931584 | Micr0s0ft

  5. #5
    Membre éclairé Avatar de suchiwa
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2010
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 435
    Points : 899
    Points
    899
    Par défaut
    Re-Bonjour,

    J'ai vraiment besoin d'une aide, quelconque, car là je vois pas, c'est banal et à la fois très compliqué...

    Car je teste, teste et reteste dans tous les sens, quand je pense avoir amélioré, c'est pas mieux ou pire, ça empire

    J'ai testé une autre approche :

    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
    $HKML_IPall = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLSERVER\SuperSocketNetLib\Tcp\IPAll"
    $Set_TcpPort = Set-ItemProperty $HKML_IPall -name "TcpPort" -value "1433"
    $Set_TcpDynamicPorts = Set-ItemProperty $HKML_IPall -name "TcpDynamicPorts" -value $null
    $Get_TcpPort = (Get-ItemProperty $HKML_IPall).TcpPort
    $Get_TcpDynamicPorts = (Get-ItemProperty $HKML_IPall).TcpDynamicPorts
    
    if (($Get_TcpPort -eq 1433) -and ($Get_TcpDynamicPorts -eq $null))
    {
    write-host "Tcp End"
    }
    else
    {
    write-host "Tcp Error"
    }

    Devinez quoi, "Tcp Error" ! Et le résultat est correct, donc ça vient de mon -eq "1433" et -eq $null ou "-and", les conditions logiques.

    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
    $HKML_IPall = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLSERVER\SuperSocketNetLib\Tcp\IPAll"
    $Set_TcpPort = Set-ItemProperty $HKML_IPall -name "TcpPort" -value "1433"
    $Set_TcpDynamicPorts = Set-ItemProperty $HKML_IPall -name "TcpDynamicPorts" -value $null
    $Get_TcpPort = (Get-ItemProperty $HKML_IPall).TcpPort
    $Get_TcpDynamicPorts = (Get-ItemProperty $HKML_IPall).TcpDynamicPorts
    
    ##Ici changement de la condition logique du 1433 à $true
    if (($Get_TcpPort -eq $true) -and ($Get_TcpDynamicPorts -eq $true))
    {
    write-host "Tcp End"
    }
    else
    {
    write-host "Tcp Error"
    }
    Mais rien n'y fait j'ai toujours une erreur en retour :
    "Missing statement block after if ( condition )"

    J'ai 1 bouquin powershell, internet et déjà validé des conditions "if" à foison, quel est mon problème ? Je bloque où ?
    Dans le doute, reboot...

    https://mcp.microsoft.com/authenticate/validatemcp.aspx
    931584 | Micr0s0ft

  6. #6
    Membre éclairé Avatar de suchiwa
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2010
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2010
    Messages : 435
    Points : 899
    Points
    899
    Par défaut while($null -ne ""){write-host "Stupid scripter !"}
    J'ai trouvé !

    Puré, c'est la 2ème fois que je me fais avoir...
    La différence entre $null et "" ?
    Et bien dans l'application, il y en a pas, un blanc est un blanc.
    Par contre $null (sans type et sans valeur,variable vide) n'est pas de type string, contrairement à "".

    Ce qui donne :

    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
    $HKML_IPall = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLSERVER\SuperSocketNetLib\Tcp\IPAll"
    $Set_TcpPort = Set-ItemProperty $HKML_IPall -name "TcpPort" -value "1433"
    $Set_TcpDynamicPorts = Set-ItemProperty $HKML_IPall -name "TcpDynamicPorts" -value ""
    $Get_TcpPort = (Get-ItemProperty $HKML_IPall).TcpPort
    $Get_TcpDynamicPorts = (Get-ItemProperty $HKML_IPall).TcpDynamicPorts
    
    ## la première condition est bonne, la seconde change de $null à ""
    if (($Get_TcpPort -eq 1433) -and ($Get_TcpDynamicPorts -eq ""))
    {
    write-host "Tcp End"
    }
    else
    {
    write-host "Tcp Error"
    }
    A mon avis ça peut aider...
    Dans le doute, reboot...

    https://mcp.microsoft.com/authenticate/validatemcp.aspx
    931584 | Micr0s0ft

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester la présence d'une feuille Excel
    Par repié dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/03/2019, 13h50
  2. Réponses: 4
    Dernier message: 24/04/2007, 21h58
  3. Tester la présence d'une référence
    Par sscouby dans le forum Général VBA
    Réponses: 2
    Dernier message: 16/10/2006, 12h26
  4. Tester la présence d'une imprimante sur le serveur
    Par PrinceMaster77 dans le forum ASP
    Réponses: 7
    Dernier message: 06/03/2006, 15h59

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