Mengapa skrip PowerShell saya tidak berjalan?


103

Saya menulis file batch sederhana sebagai skrip PowerShell, dan saya mendapatkan kesalahan saat dijalankan.

Itu ada di direktori skrip di jalur saya. Ini adalah kesalahan yang saya dapatkan:

Tidak dapat dimuat karena eksekusi skrip dinonaktifkan di sistem ini. Silakan lihat "mendapatkan-bantuan tentang-penandatanganan".

Aku sudah mencari bantuan, tapi itu kurang membantu.

Jawaban:


102

Bisa jadi tingkat keamanan default PowerShell, yang (IIRC) hanya akan menjalankan skrip yang ditandatangani.

Coba ketikkan ini:

set-executionpolicy remotesigned

Itu akan memberi tahu PowerShell untuk mengizinkan skrip lokal (yaitu, di drive lokal) yang tidak ditandatangani untuk dijalankan.

Kemudian coba jalankan skrip Anda lagi.


5
Anda harus menjalankan Powershell dengan hak administrator, setidaknya di bawah Windows 8!
ComFreek

1
Dan Anda harus menjalankan skrip PowerShell dengan hak akses administratif di bawah Windows 7 juga.
Batang

14
Ini jawaban yang cukup menakutkan. Pertama, ini secara permanen mengubah tingkat keamanan default Powershell dengan cara yang mungkin tidak diinginkan (dan tidak aman). Untuk yang lain, ia bahkan gagal menjelaskan secara memadai bahwa skrip jarak jauh yang ditandatangani dan skrip lokal yang tidak ditandatangani - tetapi bukan skrip jarak jauh yang tidak ditandatangani, yang kadang-kadang dibutuhkan Chocolatey - akan diberikan hak eksekusi. Sebagian besar pengguna mungkin menginginkan ini dan ini sebagai gantinya.
Cecil Curry

1
Meskipun kekhawatiran Cecil atas beberapa kelemahan dalam jawaban itu wajar, saya ingin menunjukkan beberapa hal. 1) Dua tautannya tampaknya membuka halaman yang sama untuk saya. 2) Jika Anda ingin skrip berjalan begitu saja, pengaturan kebijakan eksekusi mungkin masih merupakan cara yang harus dilakukan, dan mungkin tidak terkait dengan OP: 3) tampaknya kebijakan terbaik adalah untuk skrip startup, tentukan kebijakan dan cakupan eksekusi di baris perintah menjalankan skrip, dan untuk logon atur konfigurasi sesi sesuai kebutuhan. Jika Anda menginginkan keamanan tinggi selama sesi Windows tetapi dikurangi untuk logon, Anda ingin mendapatkan nuansa dalam urutan skrip Anda.
omJohn8372

Untuk satu bidikan, saya menemukan jawaban Ankur di bawah ini yang mendefinisikan pengecualian sementara untuk instans PowerShell yang sedang berjalan yang paling membantu.
Florenz Kley

79

Anda perlu menjalankan Set-ExecutionPolicy:

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

3
Apa nilai ExecutionPolicy default yang ditetapkan Windows untuk penginstalan baru?
Matthew Lock

5
@MatthewLock Restrictedadalah kebijakan default. Baca Selengkapnya
Nadeem_MK


16

Saya dapat melewati kesalahan ini dengan menjalankan PowerShell seperti ini:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

Artinya, saya menambahkan -executionpolicy bypasscara saya menjalankan skrip.

Ini berfungsi pada Windows 7 Service Pack 1. Saya baru mengenal PowerShell, jadi mungkin ada peringatan untuk melakukan itu yang tidak saya sadari.

[Sunting 2017-06-26] Saya terus menggunakan teknik ini pada sistem lain termasuk Windows 10 dan Windows 2012 R2 tanpa masalah.

Inilah yang saya gunakan sekarang. Hal ini membuat saya tidak sengaja menjalankan skrip dengan mengkliknya. Ketika saya menjalankannya di penjadwal saya menambahkan satu argumen: "scheduler" dan itu melewati prompt.

Ini juga menjeda jendela di bagian akhir sehingga saya dapat melihat output PowerShell.

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%

Inilah yang digunakan chocolatey untuk mengunduh dan menginstal chocolatey
icc97

Saya mencoba menjalankan perintah Set-ExecutionPolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1 dan mendapat pesan kesalahan. Tidak ada opsi -File untuk perintah ini.
David Spector

Oh begitu. Anda harus membuat pintasan yang berisi perintah powershell -executionpolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1. Perintah test.ps1 kemudian dijalankan bahkan ketika perintah global yang aman Set-ExecutionPolicy Restricted telah diberikan. Saya harap informasi dasar ini membantu seseorang.
David Spector

5
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Perintah di atas berfungsi untuk saya bahkan ketika kesalahan berikut terjadi:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

5

Juga perlu diketahui bahwa Anda mungkin perlu memasukkan .\di depan nama skrip. Sebagai contoh:

.\scriptname.ps1

1

Perintah ini set-executionpolicy unrestrictedakan memungkinkan skrip apa pun yang Anda buat untuk dijalankan sebagai pengguna yang masuk. Pastikan untuk menyetel kembali pengaturan kebijakan eksekusi ke ditandatangani menggunakan set-executionpolicy signedperintah sebelum logout.


set-executionpolicy signedmemberikan Cannot bind parameter 'ExecutionPolicy'dll.
JinSnow

0

Di Windows 10: Klik ubah properti keamanan myfile.ps1 dan ubah "izinkan akses" dengan klik kanan / properti di myfile.ps1

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.