ใน PowerShell การกำหนดขอบเขตควรเก็บวัตถุ (ตัวแปรนามแฝงฟังก์ชัน ฯลฯ ) ในสคริปต์ไม่ให้ส่งผลกระทบต่อสภาพแวดล้อมแบบโกลบอล สิ่งนี้ดูเหมือนว่าจะทำงานได้ดีที่บรรทัดคำสั่ง แต่ไม่ใช่ใน ISE
นี่คือการสาธิตในคอนโซล ฉันตรวจสอบเพื่อดู$x
ว่าไม่ได้กำหนดไว้ในขอบเขตส่วนกลางแสดงเนื้อหาของScopeTest.ps1
แล้วเรียกใช้และสุดท้ายฉันตรวจสอบเพื่อดูว่า$x
มีการกำหนดอีกครั้งหรือไม่ ตามที่คาดหวัง$x
ถูกสร้างและใช้งานภายในขอบเขตของสคริปต์เท่านั้นและไม่คงอยู่ในสภาพแวดล้อมโกลบอลหลังจากสคริปต์สิ้นสุดลง
ใน ISE สิ่งนี้จะปรากฏขึ้นหากสคริปต์ถูกเรียกโดยใช้หน้าต่างคอนโซล
อย่างไรก็ตามถ้าฉันใช้ปุ่ม "เรียกใช้สคริปต์" หรือ F5 จริง ๆ แล้วตัวแปรภายในสคริปต์จะยังคงมีอยู่หลังจากเสร็จสิ้น
วิธีนี้อาจทำให้การเขียนและการแก้ไขปัญหาเป็นเรื่องยากหากสคริปต์สมมติว่าจะเริ่มต้นจากสภาพแวดล้อมที่สะอาด (เช่น: ตัวแปรใด ๆ ที่ตั้งไว้ภายในสคริปต์ไม่ควรมีอยู่) เหตุใด ISE จึงทำงานในลักษณะนี้
คำตอบสำหรับคำถามนี้แตะที่หัวข้อเพียงเล็กน้อยกล่าวถึง "การจัดหาดอท" แต่ฉันหวังว่าจะได้คำอธิบายที่ละเอียดยิ่งขึ้นที่นี่ นอกจากนี้หากเอกสารมีอยู่ว่าทำไมสคริปต์ถูกเรียกใช้ใน ISE แตกต่างจากคอนโซลการอ้างอิงก็จะดีเช่นกัน