Saya menulis sebuah file batch sederhana sebagai PowerShell script, dan saya mendapatkan kesalahan ketika mereka jalankan.
It's di direktori scripts di jalan saya. Ini adalah kesalahan yang saya dapatkan:
Tidak dapat dimuat karena eksekusi script dinonaktifkan pada sistem ini. Silakan lihat "get-help tentang penandatanganan".
Aku melihat ke dalam, tapi's kurang bermanfaat.
Ini bisa menjadi PowerShell's default tingkat keamanan, yang (IIRC) hanya akan berjalan ditandatangani script.
Coba ketik ini:
set-executionpolicy remotesigned
Yang akan memberitahu PowerShell untuk memungkinkan lokal (yaitu, pada drive lokal) unsigned script untuk menjalankan.
Kemudian mencoba mengeksekusi script anda lagi.
Anda perlu untuk 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.
Aku mampu melewati kesalahan ini dengan menerapkan PowerShell seperti ini:
powershell -executionpolicy bypass -File .\MYSCRIPT.ps1
Artinya, saya menambahkan -executionpolicy bypass
dengan cara saya dipanggil script.
Ini bekerja pada Windows 7 Service Pack 1. Saya baru PowerShell, sehingga tidak bisa menjadi peringatan untuk melakukan itu saya tidak menyadari.
[Edit 2017-06-26] saya melanjutkan untuk menggunakan teknik ini pada sistem lain termasuk Windows 10 dan Windows 2012 R2 tanpa masalah.
Berikut adalah apa yang saya gunakan sekarang. Ini membuat saya secara tidak sengaja menjalankan script dengan mengklik di atasnya. Ketika saya jalankan di scheduler saya tambahkan satu argumen: "scheduler" dan yang bypasses prompt.
Ini juga jeda jendela di akhir sehingga aku dapat melihat output dari 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%
Juga's worth mengetahui bahwa anda mungkin perlu untuk memasukkan .\
di depan nama script. Misalnya:
.\scriptname.ps1
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Perintah di atas bekerja untuk saya bahkan ketika kesalahan berikut terjadi:
Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
Perintah set-executionpolicy unrestricted
akan memungkinkan setiap script yang anda buat untuk menjalankan sebagai login pengguna. Hanya pastikan untuk mengatur executionpolicy pengaturan kembali untuk menandatangani menggunakan set-executionpolicy menandatangani perintah
sebelum log out.
Di Windows 10: Klik ubah properti keamanan dari myfile.ps1 dan perubahan, "memungkinkan akses" dengan klik kanan / properties pada myfile.ps1