Meilleur auteur de réponses
Probleme variable environnement utilisateurs windows 7

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, elleest 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- Proposé comme réponse Loukiana mardi 16 octobre 2012 23:46
- Marqué comme réponse Dan BajenaruMicrosoft employee vendredi 19 octobre 2012 09:01
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, elleest 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- Proposé comme réponse Loukiana mardi 16 octobre 2012 23:46
- Marqué comme réponse Dan BajenaruMicrosoft employee vendredi 19 octobre 2012 09:01
mardi 16 octobre 2012 10:06 -
Bonjour,
Merci de nous tenir au courant.
Cordialement,
Dan
Dan BAJENARU, MSFT Votez! Appel à la contribution
Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.vendredi 19 octobre 2012 09:02