Perché la mia variabile d'ambiente PATH è diversa dal prompt dei comandi?


11

Un po 'di background importante: la mia azienda ha uno script VBS di accesso generico che apporta modifiche alla variabile d'ambiente PATH dell'utente al momento dell'accesso e mi consente di eseguire software che ha dipendenze dalle condivisioni di file DFS mappate. Di recente ho anche installato l'SDK di Windows Powershell sulla mia macchina Windows 7 Enterprise e ho provato a provare a modificare la mia variabile d'ambiente PATH dalla riga di comando di Powershell.

In seguito, ho notato che non potevo più eseguire applicazioni che corrispondono a queste modifiche del PATH di accesso e che l'editor della variabile d'ambiente PATH era impostato su qualcosa di diverso rispetto a quello che veniva visualizzato quando ho emesso un messaggio 'echo %PATH%'dal prompt dei comandi.

Quindi per esempio (semplificazione), dall'editor delle variabili di ambiente ( My Computer properties -> Advanced System Settings -> Environment Variables) che avevo

 C:\MyDir\; C:\MyOtherDir

mentre quando ho fatto 'echo %PATH%'da un prompt dei comandi ho ottenuto:

 C:\MyDir\

Qualcun altro ha avuto un problema simile e c'è stata una sorta di risoluzione? Quando ho cercato su Google un aiuto, mi sono imbattuto in questo:

(Relativo?) Discussione StackOverflow

Mi è venuto in mente che se lo script di accesso è stato avviato da qualcosa di diverso dal mio ambiente Explorer.exe, quello era il problema. Tuttavia, quando ho eseguito lo script di accesso da solo, il mio PERCORSO dal prompt dei comandi è rimasto invariato. Cosa avrebbe a che fare con PowerShell? Mi manca il modo in cui questo è completamente collegato a quell'installazione.


Come hai modificato il percorso in PowerShell? Dove hai echo% PATH%? In cmd.exe?
Werner Henze,

LA RISPOSTA SOTTO È GENIUS.
SDsolar,

Risposte:


11

Windows ha due classi di variabili di ambiente variabili di sistema e variabili di ambiente utente . Se stai usando echo %PATH%vedrai la tua variabile d'ambiente utente PATH . Solo se non è stata definita alcuna variabile utente, la variabile di sistema sarà attiva per i processi utente.

Il PATHseparatore ;non deve essere seguito da uno spazio vuoto.

La seguente nota di Microsoft potrebbe essere utile:

È possibile modificare le variabili di ambiente dell'utente modificando la seguente chiave di registro:

   HKEY_CURRENT_USER \ 
         Environment

È possibile modificare le variabili di ambiente di sistema modificando la seguente chiave di registro:

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

Si noti che qualsiasi variabile d'ambiente che deve essere espansa (ad esempio, quando si utilizza %SYSTEM%) deve essere memorizzata nel registro come REG_EXPAND_SZvalore di registro. Eventuali valori di tipo REG_SZnon verranno espansi quando letti dal registro.

Nota aggiuntiva: ogni volta che un processo cambia il suo ambiente (anziché le impostazioni del registro che definiscono l'ambiente per i nuovi processi), le modifiche sono visibili solo per i processi figlio.


1
Vorrei sottolineare il punto di Axel se è necessario modificare le variabili ambientali, quindi è necessario apportare le modifiche al registro. In realtà ho creato una funzione PowerShell per aiutare con questo: computerperformance.co.uk/powershell/powershell_env_path.htm
Guy Thomas

1
Non ci sono valori da modificare, solo due variabili tmpe temp. Sei sicuro che questo sia il percorso per l'utente, che dovrebbe essere modificato?
Johnny_D,

Questo non sembra funzionare (almeno prima di un riavvio). La variabile di percorso non si trova in HKCU \ Environment, la variabile di percorso in cmd.exe viene visualizzata correttamente, ma le applicazioni avviate visualizzano ancora la vecchia variabile di percorso.
Martin Argerami,

@Martin: sì, l'applicazione avviata non riconosce le modifiche al registro, perché durante l'avvio dell'applicazione ottengono la loro copia di memoria dell'ambiente. Questa copia dipende dal processo padre che avvia i processi secondari. Se ad esempio sono stati avviati da Esplora risorse, è necessario riavviare Explorer per ottenere il nuovo PERCORSO.
Axel Kemper,

L'hai inchiodato sulla testa! Il percorso lì dentro stava aggiungendo alcuni programmi che sapevo fossero stati rimossi, come Microsoft SQL. Sapevo che non proveniva dal percorso delle proprietà di sistema che avevo impostato. Grazie mille - dal futuro - hai pubblicato questa risposta più di 3 anni fa.
SDsolar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.