Karena pertanyaan ini terus menarik tanggapan yang disangkal oleh badan pertanyaan atau tidak membahas masalah sebenarnya, harap baca ringkasan sederhana tentang apa yang perlu Anda ketahui:
- Ini bukan "Mengapa penginstalan default PowerShell saya tidak menjalankan skrip?" pertanyaan.
- Ini bukan "Mengapa penginstalan PowerShell saya tidak menjalankan skrip yang diunduh dari internet?" pertanyaan.
- Pertanyaannya adalah mengapa
RemoteSigned
kebijakan eksekusi mencegah eksekusi skrip padahal seharusnya tidak.RemoteSigned
adalah satu - satunya kebijakan eksekusi yang ingin saya gunakan. Saya menyadari bahwa tersedia kebijakan lain yang tidak terlalu ketat pembatasannya. Jika kebijakan itu adalah pengganti yang dapat diterima, saya akan menggunakannya sebagai gantinya dan pertanyaan ini tidak akan ada.- Kebijakan eksekusi sudah disetel ke
RemoteSigned
. Mengubahnya dariRemoteSigned
menjadiRemoteSigned
bukanlah solusi.- File skrip dibuat dan disimpan secara lokal.
- File skrip tidak diblokir. File skrip tidak pernah diblokir (lihat poin sebelumnya).
- File skrip tidak dapat dibuka blokirnya karena tidak ada yang perlu dibuka (lihat poin sebelumnya).
- File script (berusaha untuk) dijalankan oleh administrator.
Windows PowerShell
adalah satu-satunya aplikasi yang terlibat. TidakWindows PowerShell ISE
atauCommand Prompt
maupun alat atau editor lain apa pun yang relevan.- Penyebab masalah tersebut sudah teridentifikasi (lihat jawaban diterima). Setelah hampir 8 tahun, saya pikir semua penjelasan yang jelas lainnya, apakah berlaku atau tidak, telah diposting juga. Jika Anda berpikir sebaliknya, harap baca pertanyaan dan jawaban yang ada secara keseluruhan sebelum menambahkan jawaban Anda.
Saya menggunakan Windows PowerShell 2.0 pada 64-bit Windows 7 Professional. Saya memiliki skrip Desktop
yang menyebabkan kesalahan berikut ketika saya mencoba menjalankannya:
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Saya adalah administrator domain dan administrator lokal, dan jika saya menjalankan Get-ExecutionPolicy -List
, saya dapat melihat bahwa Group Policy Object
saya membuat untuk mengkonfigurasi PowerShell dengan benar menerapkan RemoteSigned
kebijakan eksekusi di tingkat mesin:
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Saya membuat script sendiri di Notepad
, dan menggunakan Sysinternals ' streams
utilitas dan file Properties
dialog untuk mengkonfirmasi bahwa script tersebut tidak diperlakukan sebagai yang datang dari internet. Jika saya menyalin skrip ke jaringan berbagi di server domain, maka itu diizinkan untuk dijalankan. Jika saya menjalankan Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
maka skrip lokal masih tidak diizinkan untuk dieksekusi, yang masuk akal karena kebijakan eksekusi di MachinePolicy
ruang lingkup akan diutamakan.
Seperti yang didokumentasikan oleh about_Execution_Policies
( saat ini ; pada saat pertanyaan ), RemoteSigned
kebijakan tersebut berarti:
Skrip dapat dijalankan.
Memerlukan tanda tangan digital dari penerbit tepercaya pada skrip dan file konfigurasi yang diunduh dari Internet (termasuk program email dan pesan instan).
Tidak memerlukan tanda tangan digital pada skrip yang Anda jalankan dan yang Anda tulis di komputer lokal (tidak diunduh dari Internet).
Risiko menjalankan skrip yang tidak ditandatangani dari sumber selain Internet dan skrip yang ditandatangani, tetapi berbahaya.
Skrip saya tidak ditandatangani, tetapi karena dibuat dan dijalankan secara lokal, itu harus memenuhi poin ketiga di atas. Karena itu...
- Mengapa skrip saya tidak diizinkan untuk dijalankan?
- Mengapa PowerShell mengeluh bahwa skrip saya "tidak ditandatangani secara digital" padahal persyaratan itu hanya berlaku untuk file dari Internet?
- Mengapa PowerShell tidak lagi peduli tentang skrip yang tidak ditandatangani saat dijalankan dari jaringan bersama?