Di PowerShell, pelingkupan seharusnya menjaga objek (variabel, alias, fungsi, dll) dalam skrip agar tidak mempengaruhi lingkungan global. Tampaknya ini berfungsi dengan baik di baris perintah, tetapi tidak di ISE.
Berikut ini demonstrasi di konsol. Saya memeriksa untuk melihat yang $x
tidak didefinisikan dalam lingkup global, menunjukkan isi ScopeTest.ps1
dan kemudian menjalankannya, dan terakhir saya memeriksa untuk melihat apakah $x
didefinisikan kembali. Seperti yang diharapkan, $x
hanya dibuat dan digunakan dalam lingkup skrip dan tidak bertahan dalam lingkungan global setelah skrip tersebut dihentikan.
Di ISE, ini tampaknya berfungsi jika skrip dipanggil menggunakan jendela konsol.
Namun, jika saya benar-benar menggunakan tombol "Run Script", atau F5, variabel dalam skrip akan tetap ada setelah selesai.
Ini dapat membuat skrip penulisan dan pemecahan masalah agak sulit, jika skrip mengasumsikan bahwa skrip tersebut akan dimulai dari lingkungan yang bersih (yaitu: Setiap variabel yang diatur dalam skrip seharusnya belum ada.). Mengapa ISE berperilaku seperti ini?
Jawaban untuk pertanyaan ini hanya sedikit menyentuh topik, menyebutkan "dot-sourcing", tapi saya berharap untuk mendapatkan penjelasan yang lebih menyeluruh di sini. Juga, jika ada dokumentasi mengapa skrip dijalankan berbeda di ISE daripada dari konsol, referensi akan lebih baik juga.