เหตุใดตัวแปรสภาพแวดล้อม PATH ของฉันจึงแตกต่างจากพรอมต์คำสั่ง


11

พื้นหลังที่สำคัญเล็กน้อย: บริษัท ของฉันมีสคริปต์ VBS แบบเข้าสู่ระบบทั่วไปที่ทำการปรับเปลี่ยนตัวแปรสภาพแวดล้อม PATH ของผู้ใช้เมื่อเข้าสู่ระบบและอนุญาตให้ฉันเรียกใช้ซอฟต์แวร์ที่มีการพึ่งพาไฟล์ทำแผนที่ DFS ที่แมป ฉันเพิ่งติดตั้ง Windows Powershell SDK ไปยังเครื่อง Windows 7 Enterprise ของฉันและพยายามลองแก้ไขตัวแปรสภาพแวดล้อม PATH ของฉันจากบรรทัดคำสั่ง Powershell

ต่อไปนี้ฉันสังเกตเห็นว่าฉันไม่สามารถเรียกใช้แอปพลิเคชันที่สอดคล้องกับการปรับเปลี่ยน PATH เหล่านี้และตัวแก้ไขตัวแปรสภาพแวดล้อม PATH ถูกตั้งค่าเป็นสิ่งที่แตกต่างจากที่แสดงเมื่อฉันออก'echo %PATH%'จากพรอมต์คำสั่ง

ตัวอย่างเช่น (การทำให้เข้าใจง่าย) จากตัวแก้ไขตัวแปรสภาพแวดล้อม ( My Computer properties -> Advanced System Settings -> Environment Variables) ฉันมี

 C:\MyDir\; C:\MyOtherDir

ในขณะที่เมื่อฉันได้'echo %PATH%'รับคำสั่งจากฉัน:

 C:\MyDir\

มีใครที่มีปัญหาคล้ายกันและมีวิธีแก้ปัญหาบ้างไหม? เมื่อฉัน googled เพื่อขอความช่วยเหลือฉันมาที่นี้:

(ที่เกี่ยวข้อง?) กระทู้ StackOverflow

มันเกิดขึ้นกับฉันว่าถ้าสคริปต์การเข้าสู่ระบบเริ่มต้นโดยสิ่งอื่นที่ไม่ใช่สภาพแวดล้อม Explorer.exe ของฉันนั่นก็เป็นปัญหา อย่างไรก็ตามเมื่อฉันรันสคริปต์เข้าสู่ระบบด้วยตัวเอง PATH ของฉันจาก command command ก็ไม่เปลี่ยนแปลง สิ่งนี้เกี่ยวข้องกับ PowerShell อย่างไร ฉันพลาดวิธีการเชื่อมต่อกับการติดตั้งนั้นอย่างสมบูรณ์


คุณปรับเปลี่ยนเส้นทางใน PowerShell ได้อย่างไร คุณสะท้อน% PATH% ไปที่ไหน ใน cmd.exe
Werner Henze

คำตอบด้านล่างเป็นอัจฉริยะ
SDsolar

คำตอบ:


11

Windows มีสองชั้นของตัวแปรสภาพแวดล้อมตัวแปรสภาพแวดล้อมของระบบและตัวแปรสภาพแวดล้อมของผู้ใช้ หากคุณกำลังใช้echo %PATH%คุณจะเห็นคุณตัวแปรสภาพแวดล้อมของผู้ใช้ PATHเฉพาะในกรณีที่ไม่มีการกำหนดตัวแปรผู้ใช้ตัวแปรระบบจะมีผลสำหรับกระบวนการของผู้ใช้

PATHคั่น;ไม่ควรจะตามด้วยที่ว่างเปล่า

หมายเหตุของ Microsoftต่อไปนี้อาจเป็นประโยชน์:

คุณสามารถแก้ไขตัวแปรสภาพแวดล้อมของผู้ใช้ได้โดยแก้ไขคีย์รีจิสทรีต่อไปนี้:

   HKEY_CURRENT_USER \ 
         Environment

คุณสามารถแก้ไขตัวแปรสภาพแวดล้อมของระบบได้โดยแก้ไขคีย์รีจิสทรีต่อไปนี้:

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

โปรดทราบว่าตัวแปรสภาพแวดล้อมใด ๆ ที่ต้องขยาย (ตัวอย่างเช่นเมื่อคุณใช้%SYSTEM%) จะต้องถูกเก็บไว้ในรีจิสทรีเป็นREG_EXPAND_SZค่ารีจิสตรี ค่าชนิดใด ๆREG_SZจะไม่ถูกขยายเมื่ออ่านจากรีจิสตรี

หมายเหตุเพิ่มเติม: เมื่อใดก็ตามที่กระบวนการเปลี่ยนแปลงสภาพแวดล้อมของมัน (แทนที่จะเป็นการตั้งค่ารีจิสทรีที่กำหนดสภาพแวดล้อมสำหรับกระบวนการใหม่) การเปลี่ยนแปลงจะปรากฏเฉพาะสำหรับกระบวนการลูก


1
ฉันต้องการเน้นจุดของ Axel หากคุณต้องการแก้ไขตัวแปรด้านสิ่งแวดล้อมจากนั้นคุณต้องทำการเปลี่ยนแปลงในรีจิสทรี ที่จริงฉันสร้างฟังก์ชัน PowerShell เพื่อช่วยในเรื่องนี้: computerperformance.co.uk/powershell/powershell_env_path.htm
Guy Thomas

1
มีค่าไม่ได้รับการแก้ไขเพียงสองตัวแปรและtmp tempคุณแน่ใจหรือว่านี่เป็นเส้นทางสำหรับผู้ใช้ซึ่งควรแก้ไขหรือไม่
Johnny_D

ดูเหมือนจะไม่ทำงาน (ก่อนการรีบูตอย่างน้อย) ตัวแปรเส้นทางไม่ได้อยู่ใน HKCU \ Environment ตัวแปรเส้นทางใน cmd.exe แสดงอย่างถูกต้อง แต่แอปพลิเคชันที่เปิดใช้งานยังคงเห็นตัวแปรเส้นทางเก่า
Martin Argerami

@ มาร์ติน: ใช่แอปพลิเคชั่นที่เปิดใช้ไม่รู้จักการเปลี่ยนแปลงรีจิสตรี สำเนานี้ขึ้นอยู่กับกระบวนการหลักที่เริ่มกระบวนการย่อย หากอินสแตนซ์นั้นเริ่มต้นจาก Windows Explorer คุณต้องรีสตาร์ท Explorer เพื่อรับ PATH ใหม่
Axel Kemper

คุณจับมันไว้ที่หัว! เส้นทางในนั้นเพิ่มโปรแกรมบางโปรแกรมที่ฉันรู้ว่าถูกลบไปแล้วเช่น Microsoft SQL ฉันรู้ว่ามันไม่ได้มาจากเส้นทางคุณสมบัติของระบบที่ฉันตั้งไว้ ขอบคุณมาก - จากอนาคต - คุณโพสต์คำตอบนี้มานานกว่า 3 ปีแล้ว
SDsolar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.