locked
Impossible d'extraire une valeur de clé de registre avec Reg Query /ve RRS feed

  • Question

  • Bonjour à tous,

    Je rencontre actuellement quelques problèmes pour déployer des packages .msi sur mon domaine. Ayant des serveurs dans plus de 15 pays, il devient très long de me connecter sur chaque serveur pour mettre à jour les paquets et encore quand tout se passe bien. J'ai donc décidé de créer un script en DOS pour déployer mes exécutables.

    Tout marche plutôt bien excepté pour le déploiement de Shockwave. Je souhaiterai savoir si sur mes postes j'ai un .msi ou un .exe d'installé. Je fais donc tout simplement un REG QUERY sur cette clé de registre :

    FOR /F "skip=2 tokens=3*" %%A IN ('REG QUERY "HKLM\SOFTWARE\Adobe\Shockwave 12\InstallType"') DO set InstallType=%%B

    echo "%InstallType%"

    Le le résultat de la requête : (par défaut)    REG_SZ     LicensedEXE

    Le résultat peut-être soit "LicensedMSI" soit "LicensedEXE". Sur un poste français, tout se passe bien. Par contre dès que j'ai un poste dans une autre langue, ça se complique (sachant que je déploie le même Windows via WDS avec 7 langues).

    Le résultat de la requête n'est plus

    (par défaut)    REG_SZ     LicensedEXE

    mais

    (Default)    REG_SZ     LicensedEXE

    Autrement dis, le nombre de Token ne correspond plus et ma requête tombe à l'eau puisque le script ne retrouve pas la valeur. Pour un poste en anglais ou la valeur est (Default) et non pas (Par défaut), le nombre de token doit être égal à 2.

    La solution la plus évidente serait de faire un script par pays. Seulement dans certaines filiales (Brésil par exemple), des utilisateurs peuvent utiliser Windows en français, anglais ou brésilien, ce qui fait que mon script marchera pour certains et pas pour d'autres.

    J'ai essayé par plusieurs moyens d'extraire uniquement la partie data "LicensedMSI ou LicensedEXE", tenté d'utiliser le commutateur /ve mais malgré tout je ne parvient toujours pas à mes fins.

    Est-ce que certains d'entre vous auraient déjà eu ce problème ? Existe-til un moyen de contourner la barrière de la langue en utilisant le même système que les variables d'environnement %systemroot% par exemple ?

    Merci d'avance !

    Arnaud

    lundi 28 juillet 2014 13:18

Réponses

  • Tu peux essayer ca :

    FOR /F "tokens=1* delims=Z" %%A IN ('REG QUERY "HKLM\SOFTWARE\Adobe\Shockwave 12\InstallType"') DO Set InstallType=%%B &rem
    set InstallType=%InstallType: =%

    echo %InstallType%

    mardi 29 juillet 2014 09:37

Toutes les réponses

  • Essaye avec delims comme valeur une tabulutation et un espace.

    --------------------------------------------------------------------------------------------

    FOR /F "tokens=3* delims=     " %%A IN ('REG QUERY "HKLM\SOFTWARE\Wow6432Node\Adobe\Shockwave 12\InstallType"') DO set

    InstallType=%%B

    echo "%InstallType%"

    lundi 28 juillet 2014 15:56
  • Bonjour,

    Merci pour l'aide. Malheureusement celà n'a pas permis la résolution du problème. En effet, sous la clé "HKLM\SOFTWARE\Wow6432Node\" je n'ai pas de valeur Adobe mais qu'une clé Microsoft qui ne contient pas de valeur. J'ai quand même essayé en mettant le chemin d'origine mais la fonction delims vérifie les espace or entre la version anglaise et la version française, j'ai déjà un espace de différence et le résultat est toujours différent.

    Merci

    mardi 29 juillet 2014 08:21
  • Effectivement, il faut que tu enleves Wow6432Node (je suis en x64 c pour ca). Pour ce qui est des espaces, dans ton script il ne faut pas taper simplement les espaces mais bien faire <TAB> + <ESPACE> après le delims.
    mardi 29 juillet 2014 08:36
  • Merci !

    J'ai revu ma requête en refaisant le TAB + espace sous notepad pour être sûr que les caractères soient bien pris en compte. Voici ce que j'obtiens.

    Sur le poste en français avec la valeur (par défaut)

    Requête : FOR /F "tokens=3* delims=     " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 12\InstallType"') DO set InstallType=%%B
    echo "%InstallType%"

    Résultat du echo: LicencedEXE

    Requête : FOR /F "tokens=3* delims=     " %%B IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 12\InstallType"') DO set InstallType=%%B
    echo "%InstallType%"

    Résultat du echo: REG_SZ

    Sur le poste en anglais avec la valeur (default)

    Requête : FOR /F "tokens=3* delims=     " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 12\InstallType"') DO set InstallType=%%B
    echo "%InstallType%"

    Résultat du echo: ""

    Requête : FOR /F "tokens=3* delims=     " %%B IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 12\InstallType"') DO set InstallType=%%B
    echo "%InstallType%"

    Résultat du echo: LicensedEXE

    Ce que je trouve d'étonnant c'est de ne pas trouver de moyen de retrouver la valeur de la clé en interrogeant ce fameux (par défaut). Il est possible d’interroger la clé et d'obtenir les 3 informations de la ligne

    (par défaut)    REG_SZ     LicensedEXE

    mais pas d'obtenir uniquement la fameuse data.

    mardi 29 juillet 2014 09:00
  • Tu peux essayer ca :

    FOR /F "tokens=1* delims=Z" %%A IN ('REG QUERY "HKLM\SOFTWARE\Adobe\Shockwave 12\InstallType"') DO Set InstallType=%%B &rem
    set InstallType=%InstallType: =%

    echo %InstallType%

    mardi 29 juillet 2014 09:37
  • Vraiment un très grand merci ! Ton code marche parfaitement bien et solutionne beaucoup de mes problèmes. Je viens de faire l’essai sur des postes français, allemand, anglais, espagnol, italien, polonais et portugais-brésilien et ton script a parfaitement fonctionné, j'ai bien ma valeur LicensedEXE ou LicensedMSI.

    Afin de bien en comprendre le fonctionnement, est-ce que tu peux me dire ce que fait le "tokens=1* delims=Z" ? J'ai du mal à comprendre comment le découpage se fait.

    mardi 29 juillet 2014 10:09
  • Ca fait un split sur la veleur "Z" car il n'y a qu'un Z dans la chaine (celui de REG_SZ) et ensuite je supprime tout les espaces blancs par %InstallType: =%

    Par defaut si tu ne mets pas delims, le split se fait sur l'espce. Là on force le delims sur Z.

    Par contre attention au système x64 qui contiennent les installations 32 bits sous le noeud Wow6432Node. Celui-ci devra etre rajouté au besoin.
    Pour savoir si ton systeme est 32 ou 64 il y a cette methode :

    if /i %processor_architecture%==AMD64 GOTO AMD64 if /i %PROCESSOR_ARCHITEW6432%==AMD64 GOTO AMD64
    if /i %processor_architecture%==x86 GOTO x86

    • Modifié Ydhem mardi 29 juillet 2014 10:23
    mardi 29 juillet 2014 10:16
  • Ok je comprend mieux. En tout cas merci beaucoup pour toutes ces infos et pour le temps que tu as pris pour me répondre !
    mardi 29 juillet 2014 16:11
  • Nop ^^
    mercredi 30 juillet 2014 06:51