locked
Probleme variable environnement utilisateurs windows 7 RRS feed

  • Question

  • Bonjour,

    Je vous explique mon problème,

    j'ai un batch dans lequel j'ajoute une variable d'environnement utilisateurs par le registre via la commande reg add.

    la commande s’éxécute sans souci , mais la variable n'est pas prit en compte  directement, il faut redémarrer.

    Si je la met à la main en graphique via les paramètres systèmes avancés, elle est prise en compte directement sans redémarrer.

    Il doit être possible de ne pas avoir à redémarrer ?

    cordialement

    mardi 16 octobre 2012 09:11

Réponses

  • Le mardi 16/10/2012 11:11:13, clemn a écrit dans le message <news:877aae24-187d-4a4d-b0b7-4ad40f9647e1@communitybridge.codeplex.com> ce qui suit :

    Bonjour,

    Je vous explique mon problème,

    j'ai un batch dans lequel j'ajoute une variable d'environnement utilisateurs par le registre via la commande reg add.

    la commande s’éxécute sans souci , mais la variable n'est pas prit en compte  directement, il faut redémarrer.

    Redémarrer est un peu excessif!
    Il suffit de fermer la session Windows, puis de la rouvrir.
    Mais je reconnais que même cela peut s'avérer pénible!
     > Si je la met à la main en graphique via les paramètres systèmes avancés, elle

    est prise en compte directement sans redémarrer.

    Il doit être possible de ne pas avoir à redémarrer ?

    OUI

    1) par le panneau de configuration Système, ce qui sur le plan automatisation n'est pas ce qu'on fait de mieux,
    2) par programmation (exécutables ou scripts VBS, JS, Powershell,...). Tout comme avec le panneau de config, la modif est permanente, mais  nécessite une réouverture de "shell" qui a lancé le script.
     Par exemple, j'ai conçu ce script VBS "SETENV.VBS", qui permet de créer, modifier ou supprimer une variable d'environnement dans le contexte "utilisateur"

    Syntaxe :
     SETENV.VBS nom-de-variable-utilisateur [valeur]
     Si valeur est absent, il y a suppression de la variable
     Si valeur contient des espaces, ce paramètres doit être
     encadré par des guillemets "
     Toute modification ou suppression est soumise à confirmation.

    Ce script se lance depuis une fenêtre de commandes (avec CSCRIPT.EXE)
    Une fois exécuté, il suffit d'ouvrir une autre fenêtre de commandes pour se rendre compte que la modification de l'environnement a bien été prise en compte.
     Fichier SETENV.VBS
    ---------- couper ici ----------
    ' JC BELLAMY © 2012
    ' ----------------------------------------------------------
    Set Args= Wscript.Arguments
    if args.count<1 then
      wscript.echo "Syntaxe : " & VBCRLF & _
        "  SETENV.VBS nom-de-variable-utilisateur [valeur]" & VBCRLF & _
     "  Si valeur est absent, il y a suppression de la variable" & VBCRLF & _
        "  Si valeur contient des espaces, ce paramètres doit être" & VBCRLF & _
     "  encadré par des guillemets """ & VBCRLF & _
     "  Toute modification ou suppression est soumise à confirmation." & VBCRLF & _
     VBCRLF & "  JC BELLAMY © 2012"
      wscript.quit
      end if
    Set shell = WScript.CreateObject("WScript.Shell")
    Set env=Shell.Environment("user")
    nomvar=args(0)
    Title="Variable utilisateur """ & nomvar & """"
    oldval=env(nomvar)
    if oldval="" then
      prompt="La variable n'est pas définie actuellement"
    else
      prompt="La variable contient actuellement : " & oldval
      end if
    if args.count=1 then
      newval=""
      ask="Voulez-vous l'effacer ?"
    else
      newval=args(1)
      ask="Voulez-vous lui attribuer la valeur """ & newval & """?"
      end if
    if oldval<>newval then
      rep=MsgBox(prompt & VBCRLF & ask,vbYesNo + vbQuestion,Title)
      if rep=vbYes then env(nomvar)=newval
    else
      rep=MsgBox(prompt,vbOKOnly + vbInformation,Title)
      end if
    ---------- couper ici ----------

    ______________________________________________________________

    Si on ne veut aucun message (pour l'intégrer dans un batch p.ex.), en voici une version "expurgée" :
     Fichier SETENVMUTE.VBS
    ---------- couper ici ----------
    ' JC BELLAMY © 2012
    ' ----------------------------------------------------------
    Set Args= Wscript.Arguments
    if args.count<1 then wscript.quit
    Set shell = WScript.CreateObject("WScript.Shell")
    Set env=Shell.Environment("user")
    nomvar=args(0)
    oldval=env(nomvar)
    if args.count=1 then newval="" else newval=args(1)
    if oldval<>newval then env(nomvar)=newval
    ---------- couper ici ----------
     P.ex. (dans un batch) :
     @echo off
     ...
     [CSCRIPT] k:\scripts\vbs\setenvmute.vbs variable valeur
     ...



    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY [MVP Expert IT Pro]
    http://www.bellamyjc.org  ou http://jc.bellamy.free.fr

    mardi 16 octobre 2012 10:06

Toutes les réponses

  • Le mardi 16/10/2012 11:11:13, clemn a écrit dans le message <news:877aae24-187d-4a4d-b0b7-4ad40f9647e1@communitybridge.codeplex.com> ce qui suit :

    Bonjour,

    Je vous explique mon problème,

    j'ai un batch dans lequel j'ajoute une variable d'environnement utilisateurs par le registre via la commande reg add.

    la commande s’éxécute sans souci , mais la variable n'est pas prit en compte  directement, il faut redémarrer.

    Redémarrer est un peu excessif!
    Il suffit de fermer la session Windows, puis de la rouvrir.
    Mais je reconnais que même cela peut s'avérer pénible!
     > Si je la met à la main en graphique via les paramètres systèmes avancés, elle

    est prise en compte directement sans redémarrer.

    Il doit être possible de ne pas avoir à redémarrer ?

    OUI

    1) par le panneau de configuration Système, ce qui sur le plan automatisation n'est pas ce qu'on fait de mieux,
    2) par programmation (exécutables ou scripts VBS, JS, Powershell,...). Tout comme avec le panneau de config, la modif est permanente, mais  nécessite une réouverture de "shell" qui a lancé le script.
     Par exemple, j'ai conçu ce script VBS "SETENV.VBS", qui permet de créer, modifier ou supprimer une variable d'environnement dans le contexte "utilisateur"

    Syntaxe :
     SETENV.VBS nom-de-variable-utilisateur [valeur]
     Si valeur est absent, il y a suppression de la variable
     Si valeur contient des espaces, ce paramètres doit être
     encadré par des guillemets "
     Toute modification ou suppression est soumise à confirmation.

    Ce script se lance depuis une fenêtre de commandes (avec CSCRIPT.EXE)
    Une fois exécuté, il suffit d'ouvrir une autre fenêtre de commandes pour se rendre compte que la modification de l'environnement a bien été prise en compte.
     Fichier SETENV.VBS
    ---------- couper ici ----------
    ' JC BELLAMY © 2012
    ' ----------------------------------------------------------
    Set Args= Wscript.Arguments
    if args.count<1 then
      wscript.echo "Syntaxe : " & VBCRLF & _
        "  SETENV.VBS nom-de-variable-utilisateur [valeur]" & VBCRLF & _
     "  Si valeur est absent, il y a suppression de la variable" & VBCRLF & _
        "  Si valeur contient des espaces, ce paramètres doit être" & VBCRLF & _
     "  encadré par des guillemets """ & VBCRLF & _
     "  Toute modification ou suppression est soumise à confirmation." & VBCRLF & _
     VBCRLF & "  JC BELLAMY © 2012"
      wscript.quit
      end if
    Set shell = WScript.CreateObject("WScript.Shell")
    Set env=Shell.Environment("user")
    nomvar=args(0)
    Title="Variable utilisateur """ & nomvar & """"
    oldval=env(nomvar)
    if oldval="" then
      prompt="La variable n'est pas définie actuellement"
    else
      prompt="La variable contient actuellement : " & oldval
      end if
    if args.count=1 then
      newval=""
      ask="Voulez-vous l'effacer ?"
    else
      newval=args(1)
      ask="Voulez-vous lui attribuer la valeur """ & newval & """?"
      end if
    if oldval<>newval then
      rep=MsgBox(prompt & VBCRLF & ask,vbYesNo + vbQuestion,Title)
      if rep=vbYes then env(nomvar)=newval
    else
      rep=MsgBox(prompt,vbOKOnly + vbInformation,Title)
      end if
    ---------- couper ici ----------

    ______________________________________________________________

    Si on ne veut aucun message (pour l'intégrer dans un batch p.ex.), en voici une version "expurgée" :
     Fichier SETENVMUTE.VBS
    ---------- couper ici ----------
    ' JC BELLAMY © 2012
    ' ----------------------------------------------------------
    Set Args= Wscript.Arguments
    if args.count<1 then wscript.quit
    Set shell = WScript.CreateObject("WScript.Shell")
    Set env=Shell.Environment("user")
    nomvar=args(0)
    oldval=env(nomvar)
    if args.count=1 then newval="" else newval=args(1)
    if oldval<>newval then env(nomvar)=newval
    ---------- couper ici ----------
     P.ex. (dans un batch) :
     @echo off
     ...
     [CSCRIPT] k:\scripts\vbs\setenvmute.vbs variable valeur
     ...



    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY [MVP Expert IT Pro]
    http://www.bellamyjc.org  ou http://jc.bellamy.free.fr

    mardi 16 octobre 2012 10:06