Pourquoi ma variable d'environnement PATH est-elle différente de l'invite de commande?

11

Un peu d’arrière-plan important: ma société dispose d’un script de connexion générique VBS qui modifie la variable d’environnement PATH lors de la connexion et me permet d’exécuter un logiciel dépendant de fichiers partagés DFS. J'ai également récemment installé le Kit de développement logiciel (SDK) Windows Powershell sur ma machine Windows 7 Enterprise et tenté de modifier ma variable d'environnement PATH à partir de la ligne de commande Powershell.

Par la suite, j'ai constaté que je ne pouvais plus exécuter les applications correspondant à ces modifications de connexion PATH et que l'éditeur de variable d'environnement PATH était défini sur autre chose que ce qui était affiché lorsque j'ai lancé une 'echo %PATH%'invite de commande.

Ainsi, par exemple (simplification), à partir de l'éditeur de variable d'environnement ( My Computer properties -> Advanced System Settings -> Environment Variables), j'avais

 C:\MyDir\; C:\MyOtherDir

alors que quand je l'ai fait à 'echo %PATH%'partir d'une invite de commande, j'ai eu:

 C:\MyDir\

Quelqu'un d'autre a-t-il eu un problème similaire et une solution a-t-elle été trouvée? Quand j'ai cherché de l'aide sur Google, je suis tombé sur ceci:

(En rapport?) Fil StackOverflow

Je me suis dit que si le script de connexion avait été lancé par quelque chose d'autre que mon environnement Explorer.exe, c'était le problème. Cependant, lorsque j'ai exécuté le script de connexion moi-même, mon invite PATH à partir de l'invite de commande était inchangé. Qu'est-ce que cela aurait à voir avec PowerShell? Il me manque comment cela est connecté à cette installation complètement.

PatternMatching
la source
Comment avez-vous modifié le chemin dans PowerShell? Où avez-vous répercuté% PATH%? Dans cmd.exe?
Werner Henze
LA REPONSE CI-DESSOUS EST GENIE.
SDsolar

Réponses:

11

Windows comporte deux classes de variables d' environnement, variables d'environnement système et variables d'environnement utilisateur . Si vous utilisez, echo %PATH%vous verrez votre variable d'environnement utilisateur PATH . Seulement si aucune variable utilisateur n'est définie, la variable système sera effective pour les processus utilisateur.

Le PATHséparateur ;ne doit pas être suivi d'un blanc.

La note Microsoft suivante peut être utile:

Vous pouvez modifier les variables d'environnement utilisateur en modifiant la clé de registre suivante:

   HKEY_CURRENT_USER \ 
         Environment

Vous pouvez modifier les variables d'environnement du système en modifiant la clé de registre suivante:

   HKEY_LOCAL_MACHINE \ 
               SYSTEM \ 
    CurrentControlSet \ 
              Control \ 
      Session Manager \ 
          Environment

Notez que toute variable d'environnement devant être développée (par exemple, lorsque vous utilisez %SYSTEM%) doit être stockée dans le registre en tant que REG_EXPAND_SZvaleur de registre. Aucune valeur de type REG_SZne sera développée lorsqu’elle sera lue à partir du registre.

Remarque supplémentaire: chaque fois qu'un processus modifie son environnement (plutôt que les paramètres de registre qui définissent l'environnement pour les nouveaux processus), les modifications ne sont visibles que pour les processus enfants.

Axel Kemper
la source
1
Je tiens à souligner le point soulevé par Axel si vous devez modifier les variables d'environnement, vous devez ensuite modifier le registre. En fait, j'ai créé une fonction PowerShell pour aider avec ceci: computerperformance.co.uk/powershell/powershell_env_path.htm
Guy Thomas
1
Il n'y a aucune valeur à modifier, seulement deux variables tmpet temp. Etes-vous sûr que c'est le chemin pour l'utilisateur, qui devrait être modifié?
Johnny_D
Cela ne semble pas fonctionner (avant un redémarrage, au moins). La variable de chemin d'accès ne figure pas dans l'environnement HKCU \ Environment, la variable de chemin d'accès dans cmd.exe s'affiche correctement, mais les applications lancées voient toujours l'ancienne variable de chemin d'accès.
Martin Argerami
@Martin: oui, les applications lancées ne reconnaissent pas les modifications du registre, car elles reçoivent leur copie de mémoire de l'environnement au démarrage de l'application. Cette copie dépend du processus parent qui démarre les sous-processus. S'ils sont par exemple démarrés à partir de l'Explorateur Windows, vous devrez le redémarrer pour obtenir le nouveau PATH.
Axel Kemper
Vous l'avez cloué sur la tête! Le chemin d'accès ajoutait certains programmes que je savais avoir été supprimés, tels que Microsoft SQL. Je savais que cela ne venait pas du chemin des propriétés du système que j'avais défini. Merci beaucoup - de l'avenir - vous avez posté cette réponse il y a plus de 3 ans.
SDsolar