Mengapa variabel lingkungan PATH saya berbeda dari command prompt?

11

Sedikit latar belakang penting: perusahaan saya memiliki skrip login VBS generik yang membuat modifikasi pada variabel lingkungan PATH pengguna saat masuk dan memungkinkan saya untuk menjalankan perangkat lunak yang memiliki ketergantungan pada file DFS yang dipetakan. Saya juga baru-baru ini menginstal Windows Powershell SDK ke mesin Windows 7 Enterprise saya dan berusaha untuk mencoba memodifikasi variabel lingkungan PATH saya dari baris perintah Powershell.

Setelah ini, saya perhatikan bahwa saya tidak bisa lagi menjalankan aplikasi yang sesuai dengan modifikasi PATH login ini dan bahwa editor variabel lingkungan PATH diatur ke sesuatu yang berbeda dari apa yang muncul ketika saya mengeluarkan 'echo %PATH%'dari dari command prompt.

Jadi misalnya (penyederhanaan), dari editor variabel lingkungan ( My Computer properties -> Advanced System Settings -> Environment Variables) saya punya

 C:\MyDir\; C:\MyOtherDir

sedangkan ketika saya melakukannya 'echo %PATH%'dari command prompt saya mendapat:

 C:\MyDir\

Adakah orang lain yang memiliki masalah serupa dan apakah ada semacam resolusi? Ketika saya mencari bantuan Google, saya menemukan ini:

(Terkait?) StackOverflow Thread

Terpikir oleh saya bahwa jika skrip login diprakarsai oleh sesuatu selain lingkungan Explorer.exe saya, maka itulah masalahnya. Namun, ketika saya menjalankan skrip login sendiri, PATH saya dari command prompt tidak berubah. Apa hubungannya ini dengan PowerShell? Saya kehilangan bagaimana ini terhubung ke instalasi itu sepenuhnya.

Pencocokan Pola
sumber
Bagaimana Anda memodifikasi jalur di PowerShell? Di mana Anda menggemakan% PATH%? Di cmd.exe?
Werner Henze
JAWABAN DI BAWAH INI ADALAH GENIUS.
SDsolar

Jawaban:

11

Windows memiliki dua kelas variabel lingkungan, variabel lingkungan sistem, dan variabel lingkungan pengguna . Jika Anda menggunakan, echo %PATH%Anda akan melihat variabel lingkungan pengguna Anda PATH. Hanya jika tidak ada variabel pengguna yang ditentukan, variabel sistem akan berlaku untuk proses pengguna.

The PATHpemisah ;tidak harus diikuti oleh kosong a.

Catatan Microsoft berikut mungkin bermanfaat:

Anda dapat mengubah variabel lingkungan pengguna dengan mengedit kunci Registry berikut:

   HKEY_CURRENT_USER \ 
         Environment

Anda dapat mengubah variabel lingkungan sistem dengan mengedit kunci Registry berikut:

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

Perhatikan bahwa variabel lingkungan apa pun yang perlu diperluas (misalnya, ketika Anda menggunakan %SYSTEM%) harus disimpan dalam registri sebagai REG_EXPAND_SZnilai registri. Nilai tipe apa REG_SZpun tidak akan diperluas saat dibaca dari registri.

Komentar tambahan: Setiap kali suatu proses mengubah lingkungannya (daripada pengaturan registri yang menentukan lingkungan untuk proses baru), perubahan hanya terlihat untuk proses anak.

Axel Kemper
sumber
1
Saya ingin menekankan poin Axel jika Anda perlu memodifikasi Variabel Lingkungan, maka Anda perlu membuat perubahan dalam registri. Sebenarnya saya membuat fungsi PowerShell untuk membantu ini: computerperformance.co.uk/powershell/powershell_env_path.htm
Guy Thomas
1
Tidak ada nilai yang akan dimodifikasi, hanya dua variabel tmpdan temp. Apakah Anda yakin ini adalah jalur untuk pengguna, yang harus diubah?
Johnny_D
Ini tampaknya tidak berfungsi (setidaknya sebelum reboot, setidaknya). Variabel path tidak ada di HKCU \ Environment, variabel path di cmd.exe menunjukkan dengan benar, tetapi aplikasi yang diluncurkan masih melihat variabel path lama.
Martin Argerami
@ Martin: ya, aplikasi yang diluncurkan tidak mengenali perubahan registri, karena mereka mendapatkan salinan memori dari lingkungan selama startup aplikasi. Salinan ini tergantung pada proses induk yang memulai sub-proses. Jika mereka misalnya dimulai dari Windows Explorer, Anda harus me-restart Explorer untuk mendapatkan PATH baru.
Axel Kemper
Anda memakukannya di kepala! Path di sana menambahkan beberapa program yang saya tahu telah dihapus, seperti Microsoft SQL. Saya tahu itu tidak datang dari jalur properti sistem yang telah saya tetapkan. Terima kasih banyak - dari masa depan - Anda memposting jawaban ini lebih dari 3 tahun yang lalu.
SDsolar