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?
sumber
Jawaban:
Apakah file tersebut diblokir? Saya memiliki masalah yang sama dan dapat mengatasinya dengan mengklik kanan file .PS1, Properties dan memilih Unblock.
sumber
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
saya masih mendapatkan kesalahan bahwa skrip tidak ditandatangani secara digital dan tidak dijalankan. Jika saya membuka dialog Properties untuk file yang baru dibuat, tidak ada yang perlu dibuka.ps1
file klik kanan di atasnya untuk membuka menu konteks dan pilihProperties
, pada tab pertama di dekat bagian bawah akan mengatakan file diblokir dan memungkinkan Anda untuk mencentang kotak centang untuk membuka blokirnya.Beberapa hal yang perlu diperiksa:
Bisakah Anda mengubah menjadi tidak terbatas?
Apakah kebijakan grup sudah ditetapkan?
Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
User Configuration\Administrative Templates\Windows Components\Windows PowerShell
Juga, bagaimana Anda memanggil Script.ps1?
Apakah ini memungkinkannya untuk berjalan?
sumber
Scope
parameter adalahLocalMachine
, jadiSet-ExecutionPolicy Unrestricted
secara efektif sama dengan yangSet-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
sudah saya coba. Ya,Turn on Script Execution
kebijakan diaktifkan untukComputer Configuration
.PowerShell
terbuka untukC:\Users\UserName
, jadi saya hanya menjalankan.\Desktop\Script.ps1
di prompt. Menggunakan jalur absolut menghasilkan kesalahan yang sama, seperti halnya memanggil skrip viapowershell.exe
.gpupdate /force
? (Luncurkan ulang PowerShell.exe setelah)Unrestricted
padaLocalMachine
ruang lingkup, tetapi ketika saya mulai menulis skrip, saya ingin menjalankan dari komputer lain, saya mengaturLocalMachine
kembaliUndefined
dan menambahkan Kebijakan Grup saat ini untuk ditetapkanRemoteSigned
padaMachinePolicy
ruang lingkup. Ini hanya skrip pengujian satu kali dan benar-benar bukan masalah besar untuk menjalankannya dari jaringan, saya hanya ingin tahu mengapa itu tidak berfungsi secara lokal. Lagi pula, skrip yang dibuat secara lokal harus diizinkan untuk dijalankan di bawahRemoteSigned
, bukan? Saya hanya berpikir pasti ada sesuatu yang saya lewatkan atau tidak saya pahami.RemoteSigned
menyimpanWrite-Host hi
dengan notepad ke desktop Anda harus berjalan dengan baik. Konfigurasi Anda juga terlihat baik-baik saja ... Sesuatu tampaknya rusak bagi saya ... itulah sebabnya saya menyarankan untuk menghapus kebijakan grup untuk melihat apakah itu membantu.-executionpolicy bypass
sementara melewati masalah yang ditandai jarak jauh ... dan yang memungkinkan kami mengungkap & men-debug masalah lain (tidak terkait, yang mengharuskan kami untuk meningkatkan PowerShell).Saya akhirnya melacak ini ke .NET Code Access Security . Saya memiliki beberapa modul biner yang dikembangkan secara internal yang disimpan dan dijalankan dari jaringan bersama. Untuk mendapatkan .NET 2.0 / PowerShell 2.0 untuk memuatnya, saya telah menambahkan aturan URL ke
Intranet
grup kode untuk mempercayai direktori itu:PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -listgroups Microsoft (R) .NET Framework CasPol 2.0.50727.5420 Copyright (c) Microsoft Corporation. All rights reserved. Security is ON Execution checking is ON Policy change prompt is ON Level = Machine Code Groups: 1. All code: Nothing 1.1. Zone - MyComputer: FullTrust 1.1.1. StrongName - ...: FullTrust 1.1.2. StrongName - ...: FullTrust 1.2. Zone - Intranet: LocalIntranet 1.2.1. All code: Same site Web 1.2.2. All code: Same directory FileIO - 'Read, PathDiscovery' 1.2.3. Url - file://Server/Share/Directory/WindowsPowerShell/Modules/*: FullTrust 1.3. Zone - Internet: Internet 1.3.1. All code: Same site Web 1.4. Zone - Untrusted: Nothing 1.5. Zone - Trusted: Internet 1.5.1. All code: Same site Web
Perhatikan bahwa, bergantung pada versi .NET yang diinstal dan apakah itu Windows 32 atau 64-bit,
caspol.exe
dapat ada di lokasi berikut, masing-masing dengan konfigurasi keamanannya sendiri (security.config
):$Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
$Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\
Setelah menghapus grup
1.2.3.
...PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -remgroup 1.2.3. Microsoft (R) .NET Framework CasPol 2.0.50727.9136 Copyright (c) Microsoft Corporation. All rights reserved. The operation you are performing will alter security policy. Are you sure you want to perform this operation? (yes/no) yes Removed code group from the Machine level. Success
... Saya dibiarkan dengan konfigurasi CAS default dan skrip lokal sekarang berfungsi kembali. Sudah lama sejak saya bermain-main dengan CAS, dan aku tidak yakin mengapa aturan saya tampaknya akan mengganggu orang-orang pemberian
FullTrust
untukMyComputer
, tapi karena CAS sudah ditinggalkan sebagai NET 4.0 (yang PowerShell 3.0 didasarkan), saya tebak itu titik diperdebatkan sekarang.sumber
caspol.exe
, tetapi setelah menjalankancaspol.exe -machine -addgroup 1.2 -url file://Server/Share/Directory/WindowsPowerShell/Modules/* FullTrust
saya berakhir dengan1.2.3.
aturan yang sama terlihat dalam jawaban ini. Saya menggunakanfile://
URL untuk mereferensikan direktori pada berbagi SMB, meskipun saya melihat dalam dokumentasi salah satu-addgroup
contoh menggunakan jalur UNC.Saya menemukan ketika menjalankan file PS1 untuk drive yang Dipetakan ke Dropbox bahwa saya selalu mendapatkan kesalahan ini. Saat membuka properti untuk PS1 tidak ada "Buka blokir".
Satu-satunya hal yang berhasil bagi saya adalah
powershell.exe -executionpolicy bypass -file. \ Script.ps1
sumber
Bypass
kebijakan eksekusi telah disarankan selama lima tahun yang lalu dan paling baru lima bulan yang lalu . Silahkan baca pertanyaan dan jawaban yang ada sebelum menjawab.Jika file disalin dari lokasi jaringan, yaitu komputer lain, Windows mungkin telah memblokir file itu. Klik kanan pada file dan klik tombol buka blokir dan lihat apakah itu berfungsi.
sumber
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
saya masih mendapat kesalahan bahwa skrip tidak ditandatangani secara digital dan tidak dieksekusi. Jika saya membuka dialog Properties untuk file yang baru dibuat, tidak ada yang bisa dibuka.Ini adalah masalah IDE. Ubah pengaturan di PowerShell GUI. Buka tab Alat dan pilih Opsi, lalu opsi Debugging . Kemudian centang kotak Matikan persyaratan untuk skrip yang akan ditandatangani . Selesai.
sumber
Apa yang berhasil bagi saya adalah klik kanan pada file .ps1 dan kemudian properti. Klik tombol "BEBAS". Berfungsi baik bagi saya setelah menghabiskan berjam-jam mencoba mengubah kebijakan.
sumber
Harap buat cadangan untuk file script.bs1
Apa yang berhasil untuk saya adalah menghapus file script.bs1 dan menjalankan perintah eksekusi.
sumber
Get-ExecutionPolicy -List
?Pilih Command prompt terminal Anda, bukan Power shell. Seharusnya itu berhasil.
sumber
Saat Anda menjalankan skrip .ps1 PowerShell, Anda mungkin mendapatkan pesan yang mengatakan ".ps1 tidak ditandatangani secara digital. Skrip tidak akan dijalankan di sistem. " Untuk memperbaikinya Anda harus menjalankan perintah di bawah ini untuk menjalankan Set-ExecutionPolicy dan mengubah pengaturan Execution Policy.
sumber
Bypass
kebijakan eksekusi. Menggunakan kebijakan yang berbeda tidak membantu, bagaimanapun, dan tidak mengatasi masalah sebenarnya jikaRemoteSigned
memang diperlukan. Terakhir, pesan kesalahan yang Anda rujuk tidak sama dengan yang ada di pertanyaan.Saya mengalami masalah yang sama dan memperbaikinya dengan mengubah program default untuk membuka file .ps1 ke PowerShell. Itu diatur ke Notepad .
sumber
.ps1
file itu akan terbuka di Notepad alih-alih menjalankan skrip di PowerShell?Coba jalankan GUI Powershell sebagai Administrator
sumber
I am both a domain administrator and a local administrator
,. Menjalankan PowerShell yang ditinggikan tidak akan membuat perbedaan karena skrip diizinkan untuk berjalan tanpa relevansi saat disimpan di jaringan bersama.Jalankan di bawah 2 perintah di jendela PowerShell
Set-ExecutionPolicy tidak dibatasi
Buka blokir-File -Path D: \ PowerShell \ Script.ps1
sumber