Ketika saya mencoba menjalankan skrip PowerShell saya, saya mendapatkan kesalahan ini:
File C: \ Common \ Scripts \ hello.ps1 tidak dapat dimuat karena eksekusi skrip dinonaktifkan pada sistem ini. Silakan lihat "dapatkan bantuan tentang_menandatangani" untuk detail lebih lanjut.
Pada baris: 1 char: 13
+. \ Hello.ps1 <<<<
+ CategoryInfo: NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId: RuntimeException
sumber
LocalMachine
. Untuk mengatur lingkup lain (CurrentUser
atauProcess
), berikan-Scope
secara eksplisit.Kebijakan Eksekusi Default diatur ke dibatasi, Anda dapat melihatnya dengan mengetik:
Anda harus mengetik yang berikut ini untuk membuatnya masuk ke mode tidak terbatas:
Semoga ini membantu
sumber
RemoteSigned
tidak memblokir copy & paste, tidak memblokir git atau metode unduhan non-IE lainnya, lalu apa gunanya? Katakan dengan saya: "sama sekali tidak ada!". Saya pikir mewajibkan skrip untuk ditandatangani dengan sertifikat penandatanganan kode $ 100 tidak berguna, bodoh dan meniadakan semua kebaikan yang dapat dilakukan oleh bahasa skrip yang layak untuk Windows. Yang sedang berkata, jika jalan ke depan adalah membuat pengguna memahami apa yang mereka lakukan untuk menggunakan skrip PS, maka kita mungkin terlalu sth ... Nahhhh, itu tidak akan pernah berhasil ;-)Di komputer saya yang saya gunakan untuk dev skrip, saya akan menggunakan -unrestricted seperti di atas. Ketika menyebarkan skrip saya, ke mesin pengguna akhir, saya hanya akan memanggil PowerShell dengan saklar -executionpolicy:
sumber
Kita bisa mendapatkan status ExecutionPolicy saat ini dengan perintah di bawah ini:
Secara default itu Dibatasi . Untuk memungkinkan eksekusi Script PowerShell kita perlu mengatur ExecutionPolicy ini sebagai Bypass atau Tidak Terbatas .
Kami dapat menetapkan kebijakan untuk Pengguna Saat Ini sebagai
Bypass
atauUnrestricted
dengan menggunakan perintah PowerShell di bawah ini:Kebijakan tidak terbatas memuat semua file konfigurasi dan menjalankan semua skrip. Jika Anda menjalankan skrip yang tidak ditandatangani yang diunduh dari Internet, Anda akan dimintai izin sebelum dijalankan.
Sedangkan dalam kebijakan Bypass , tidak ada yang diblokir dan tidak ada peringatan atau konfirmasi selama eksekusi skrip. Bypass ExecutionPolicy lebih santai daripada Tidak Terbatas.
sumber
Bergantung pada versi dan konfigurasi Windows, Anda mungkin memiliki peringatan berikut, bahkan dalam
Unrestricted
mode:Solusinya adalah dengan menggunakan kebijakan "bypass", diaktifkan dengan perintah berikut:
Dari dokumentasi :
Ini jelas tidak aman, harap dipahami risiko yang terlibat.
sumber
Kunci reg dengan:
Windows Registry Editor Versi 5.00
dan:
bekerja juga.
sumber
Untuk beberapa alasan cmdlet PowerShell tidak mengaktifkan eksekusi lokal secara global, hanya untuk konteks pengguna lokal. Jika saya mencoba memulai skrip Powershell dari dalam bash prompt CygWin, misalnya, yang berjalan di bawah konteks penggunanya sendiri, itu tidak akan berjalan, memberikan kesalahan "tidak ditandatangani secara digital". Jawabannya adalah masuk ke Editor Kebijakan Grup Lokal -> Kebijakan Komputer Lokal -> Template Administratif -> Komponen Windows -> Windows PowerShell dan klik dua kali pada 'Aktifkan Eksekusi Script'. Ini kemudian izinkan saya mengubahnya ke 'Diaktifkan' dan kemudian kebijakan eksekusi "Izinkan skrip lokal dan skrip bertanda tangan jauh" dan minta agar berfungsi secara global terlepas dari konteks pengguna.
sumber
Jawaban yang diterima benar, tetapi modifikasi kebijakan hanya tersedia untuk instance Powershell yang sedang berjalan, artinya setelah instance Powershell dimatikan. Kebijakan akan diatur ulang. Jika pengguna membuka kembali instance Powershell yang lain, kebijakan default akan diterapkan
Restricted
Bagi saya, saya perlu menggunakan konsol VisualStudio Code dan g ++ dari cygwin untuk membangun sesuatu. Konsol menggunakan Powershell, dengan kebijakan default, tidak ada yang bisa dilakukan. Salah satu solusinya adalah mengubah kebijakan setiap kali konsol dipecat dalam konsol VisualStudio Code, mungkin sebuah skrip untuk mengubah kebijakan.
Saya malas, jadi solusi lain adalah ketika saya menjalankan Powershell dalam mode admin, mirip dengan apa yang diterima jawaban. tetapi dengan parameter tambahan yang mengubah nilai dalam tabel Registry. Setelah selesai. Contoh lain dari Powershell akan menggunakan
RemoteSigned
kebijakan secara default.set-executionpolicy remotesigned -Scope CurrentUser
sumber
Menetapkan kebijakan (dengan benar) adalah pilihan terbaik tetapi pada sistem yang dikelola saya, saya tidak memiliki kemampuan untuk mengubah kebijakan itu.
Bagi saya, cara termudah untuk mengubah kebijakan adalah membuka skrip di "PowerShell ISE" , sorot kode (atau bagian dari kode) untuk dieksekusi dan kemudian klik tombol "Run Selection" (atau gunakan F8 jalan pintas).
Ini bukan solusi terbaik & melakukan sedikit untuk mengotomatisasi tugas-tugas, tetapi itu memungkinkan saya penggunaan & utilitas PowerShell sementara tidak bertabrakan dengan departemen IS saya.
sumber
Alasan bahwa kunci reg berfungsi, adalah karena ia melakukan persis apa yang dilakukan perintah PS. Perintah menulis perubahan ke kunci reg. Perintah jauh lebih cepat dan lebih mudah daripada membuat kunci reg atau menggali ke dalam registri.
sumber