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.
sumber
jadi ISE dicakup sebagai Global. Kecuali Anda menghapus semua variabel yang dibuat saat bekerja di ISE, semua variabel akan tersedia setelah skrip berjalan. Ketika saya menggunakan ISE untuk membangun skrip saya, saya akan selalu menguji dengan konsol PowerShell yang berbeda terbuka. Ini memungkinkan saya untuk memastikan semuanya berfungsi seperti yang saya inginkan.
sumber