Trong PowerShell, phạm vi được cho là giữ cho các đối tượng (biến, bí danh, hàm, v.v.) trong các tập lệnh không ảnh hưởng đến môi trường toàn cầu. Điều này dường như hoạt động tốt ở dòng lệnh, nhưng không phải trong ISE.
Đây là một cuộc biểu tình trong giao diện điều khiển. Tôi kiểm tra xem nó $x
không được xác định trong phạm vi toàn cầu, hiển thị nội dung ScopeTest.ps1
và sau đó chạy nó, và cuối cùng tôi kiểm tra xem liệu $x
có được xác định lại không. Như mong đợi, $x
chỉ được tạo và sử dụng trong phạm vi của tập lệnh và không tồn tại trong môi trường toàn cầu sau khi tập lệnh kết thúc.
Trong ISE, điều này dường như hoạt động nếu tập lệnh được gọi bằng cửa sổ giao diện điều khiển.
Tuy nhiên, nếu tôi thực sự sử dụng nút "Run Script" hoặc F5, các biến trong tập lệnh sẽ tồn tại sau khi hoàn thành.
Điều này có thể làm cho việc viết và xử lý sự cố các kịch bản hơi khó khăn, nếu tập lệnh giả định rằng nó sẽ bắt đầu từ một môi trường sạch (nghĩa là: Bất kỳ biến nào được đặt trong tập lệnh sẽ không tồn tại.). Tại sao ISE hành xử theo cách này?
Một câu trả lời cho câu hỏi này chỉ chạm vào chủ đề một chút, đề cập đến "nguồn cung cấp dấu chấm", nhưng tôi hy vọng sẽ có được một lời giải thích kỹ lưỡng hơn ở đây. Ngoài ra, nếu tài liệu tồn tại về lý do tại sao tập lệnh được chạy khác nhau trong ISE so với bảng điều khiển, thì một tham chiếu cũng sẽ rất hay.