Menu Content/Inhalt

Syndication

Abonnez-vous à ce fil RSS pour être tenu informé des nouveautés de ce site.

DynSetEnv Convertir en PDF Version imprimable Suggérer par mail
Écrit par Gilles LAURENT   
11-01-2009

Définir ou supprimer des variables d'environnement dynamiques

Quelques récentes discussions sur le Forum Scripting, que vous pouvez retrouver ici et , mettent en évidence les limitations de plusieurs commandes batch et plus particulièrement les limitations de la commande builtin SET de l'interpréteur de commandes CMD.EXE. En effet, il s'avère que celle-ci possède les limitations suivantes :

  • le flux stdin en provenance d'un pipe n'est pas supporté
  • le mode arithmétique utilise un entier 32 bits signé (-2147483648 à 2147483647)
  • la propagation des variables dans le(s) processus parent(s) n'est pas prise en charge

J'ai donc essayé de contourner ces limitations ce qui m'a amené à écrire l'outil DynSetEnv. Cet outil est donc un complément de la commande builtin SET. L'outil DynSetEnv prend donc en charge le flux stdin en provenance d'un pipe, le mode arithmétique sur un entier 64 bits signé ainsi que la propagation dynamique des variables dans les processus parents. Les variables sont définies de manière dynamique donc aucune modification est apportée à la base de registre Windows. Si l'option de propagation est utilisée alors la variable d'environnement sera injectée dans tous les processus parents jusqu'au processus shell, soit par défaut Explorer.exe. Dans ce cas, les variables définies seront disponibles, d'une part dans les processus parents en cours d'exécution et également dans les nouvelles consoles et processus car ceux-ci hériteront de l'environnement du shell (processus racine).

Note¹: Si le processus DynSetEnv s'exécute au sein d'un job Windows de type RunAs alors la propagation des variables dans les processus parents sera automatiquement désactivée. Cette restriction est implémentée par mesure de sécurité dans le but d'éviter de corrompre l'environnement des processus système.

Note²: Le moteur Microsoft JScript est utilisé pour la résolution des opérations arithmétiques. De ce fait, l'outil DynSetEnv est compatible avec tous les opérateurs arithmétiques supportés par cette technologie et reprend également ses limitations. Par exemple, le calcul sur un entier 64 bits signé est "garanti" pour une valeur comprise entre +/-9e+15 (à priori cette limite est en fonction des plateformes).

L'outil DynSetEnv permet de définir une variable d'environnement dynamique accessible dans la console WSH Shell. L'exemple ci-dessous utilise l'option de propagation pour être en mesure de réaliser cette opération. Par exemple :

                                                                                
WSH D:\Test> ' création d'une variable d'environnement à l'aide de la           
WSH D:\Test> ' commande builtin SET                                             
WSH D:\Test> @set testvar=test                                                  
                                                                                
WSH D:\Test> ' la console WSH Shell exécute un processus enfant pour les        
WSH D:\Test> ' commandes de l'interpréteur CMD.EXE                              
WSH D:\Test> ' lecture de la variable d'environnement                           
WSH D:\Test> @echo %testvar%                                                    
%testvar%                                                                       
                                                                                
WSH D:\Test> ' la variable d'environnement n'existe plus car l'interpréteur     
WSH D:\Test> ' CMD.EXE est terminé                                              
WSH D:\Test> ' nouvelle tentative avec l'outil DynSetEnv                        
WSH D:\Test> ' on utilise ici l'option de propagation                           
WSH D:\Test> @DynSetEnv -name testvar -value test -recurse                      
                                                                                
WSH D:\Test> ' lecture de la variable d'environnement                           
WSH D:\Test> @echo %testvar%                                                    
test                                                                            
                                                                                
WSH D:\Test> ' opération achevée avec succès ;-)                                
WSH D:\Test> ' la variable d'environnement est bien présente dans               
WSH D:\Test> ' le processus père !                                              

Historique:

Version 1.0.0.3 - 20090215
                          - Correction d'un bug de conversion ANSI -> OEM
                          - Les signes diacritiques sont maintenant supportés

Version 1.0.0.2 - 20090212
                          - Vidage du flux stdin avant le début du traitement

Version 1.0.0.1 - 20090111
                          - Première Release Publique

Plateformes supportées:
Windows 2000 et versions supérieures

Usage:
DynSetEnv -name <name> -value <value> [-arithmetic] [-print] [-recurse]

Aide en ligne:
DynSetEnv v1.0.0.3 (c) 2009 Gilles LAURENT
Sets the contents of the specified environment variable
Usage : DynSetEnv -name <name> -value <value> [-arithmetic] [-print] [-recurse]

Commands:
-name <name>      Specifies the name of the environment variable
-value <value>       Specifies the contents of the environment variable
-arithmetic             Evaluates the value parameter as an arithmetic expression
   ()                      Grouping
   + - * / %            Arithmetic operators
   & | ^                  Bitwise operators
   << >> >>>         Logical shift operators
-print                    Writes the value to the standard output (stdout)
-recurse                 Propagates the variable to all parent processes dynamically

Examples:
DynSetEnv -name testvar -value test
cd | DynSetEnv -name testvar -value
DynSetEnv -name testvar -value 2147483647*2 -arithmetic
DynSetEnv -name testvar -value "1<<2" -arithmetic -print
DynSetEnv -name testvar -value "" -recurse

Téléchargement:
Guide PDF: -
Archive: DynSetEnv.zip

 
< Précédent   Suivant >