Saya mencoba untuk menjalankan [tag:cmd] file yang memanggil [tag:powershell] script dari cmd.exe
, dan saya mendapatkan kesalahan di bawah ini:
Management_Install.ps1
tidak dapat dimuat karena eksekusi script dinonaktifkan pada sistem ini.
Saya telah menjalankan
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
dan ketika saya menjalankan Get-ExecutionPolicy
dari [tag:powershell], saya mendapatkan Terbatas
kembali.
PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> powershell .\Management_Install.ps1 1
WARNING: Running x86 PowerShell...
File
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1
tidak dapat dimuat karena eksekusi script dinonaktifkan pada sistem ini. Silakan lihat "mendapatkan bantuan about_signing
" untuk rincian lebih lanjut.
Pada baris:1 char:25
.\Management_Install.ps1
<<<< 1
- CategoryInfo : NotSpecified: (:) [], PSSecurityException
- FullyQualifiedErrorId : RuntimeException
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> PAUSE
Press any key to continue . . .
Sistem Windows Server 2008R2.
Apa yang saya lakukan salah?
Jika anda're menggunakan Windows Server 2008 R2 maka ada x64 dan x86 versi PowerShell yang telah mereka eksekusi kebijakan yang ditetapkan. Apakah anda mengatur pelaksanaan kebijakan di kedua host?
Sebagai Administrator, anda dapat mengatur kebijakan eksekusi dengan mengetik ini ke jendela PowerShell:
Set-ExecutionPolicy RemoteSigned
Untuk informasi lebih lanjut, lihat Menggunakan Set-ExecutionPolicy Cmdlet.
Aku punya masalah yang sama dan mencatat bahwa default cmd
pada Windows Server 2012, adalah menjalankan x64 satu.
Untuk Windows 7, Windows 8, Windows 10, Windows Server 2008 R2 atau Windows Server 2012, jalankan perintah berikut sebagai Administrator:
x 86 (32 bit)
Terbuka C:\Windows\SysWOW64\cmd.exe
Jalankan perintah powershell Set-ExecutionPolicy RemoteSigned
x64 (64 bit)
Terbuka C:\Windows\system32\cmd.exe
Jalankan perintah powershell Set-ExecutionPolicy RemoteSigned
Anda dapat memeriksa mode menggunakan
echo %PROCESSOR_ARCHITECTURE%
[Lingkungan]::Is64BitProcess
Referensi:
MSDN - Windows PowerShell pelaksanaan kebijakan
Windows 32bit vs 64bit direktori penjelasan
Sebagian besar ada jawaban menjelaskan Bagaimana, tapi sangat sedikit menjelaskan Mengapa. Dan sebelum anda pergi di sekitar mengeksekusi kode dari orang asing di Internet, terutama kode bahwa jika langkah-langkah keamanan, anda harus memahami apa yang anda're lakukan. Jadi di sini's sedikit lebih detail tentang masalah ini.
Dari TechNet Tentang Kebijakan Eksekusi Halaman:
Windows PowerShell pelaksanaan kebijakan membiarkan anda menentukan kondisi di mana Windows PowerShell banyak file-file konfigurasi dan menjalankan skrip.
Manfaat yang, seperti yang disebutkan oleh PowerShell dasar-Dasar Pelaksanaan Kebijakan dan Penandatanganan Kode, adalah:
- Kontrol Pelaksanaan - Kontrol tingkat kepercayaan untuk mengeksekusi script.
- Perintah Highjack - Mencegah injeksi perintah di jalan saya.
- Identitas - Adalah script yang dibuat dan ditandatangani oleh pengembang aku percaya dan/atau ditandatangani dengan sertifikat dari Otoritas Sertifikat yang saya percaya.
- Integritas - Script tidak dapat dimodifikasi oleh malware atau malicious user.
Untuk memeriksa anda saat ini pelaksanaan kebijakan, anda dapat menjalankan Get-ExecutionPolicy
. Tapi anda're mungkin di sini karena anda ingin mengubah itu.
Untuk melakukannya anda'll menjalankan Set-ExecutionPolicy
cmdlet.
Anda'll memiliki dua keputusan besar untuk membuat ketika memperbarui kebijakan eksekusi.
Dibatasi
† - Tidak ada Script baik lokal, jarak jauh atau di-download dapat dijalankan pada sistem.AllSigned
- Semua script yang berlari memerlukan untuk dapat ditandatangani secara digital.RemoteSigned
- Semua remote script (UNC) atau mengunduh harus ditandatangani.Terbatas
- Tidak ada tanda tangan untuk semua jenis script yang dibutuhkan.LocalMachine
† - eksekusi kebijakan yang mempengaruhi semua pengguna komputer.CurrentUser
- kebijakan eksekusi hanya mempengaruhi pengguna saat ini.Proses
- kebijakan eksekusi hanya mempengaruhi arus Windows PowerShell proses.† = Default
Misalnya: jika anda ingin mengubah kebijakan untuk RemoteSigned untuk CurrentUser, anda'd jalankan perintah berikut:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Catatan: Dalam rangka untuk mengubah kebijakan Eksekusi, anda harus menjalankan PowerShell Sebagai Administrator. Jika anda berada di mode biasa dan mencoba untuk mengubah kebijakan eksekusi, anda'll mendapatkan error berikut:
Akses ke kunci registri 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' ditolak. Untuk mengubah kebijakan eksekusi untuk default (LocalMachine) ruang lingkup, mulai Windows PowerShell dengan "Run as administrator" opsi.
Jika anda ingin memperketat pembatasan internal pada script anda sendiri yang belum di-download dari Internet (atau setidaknya don't mengandung UNC metadata), anda dapat memaksa kebijakan untuk hanya menjalankan ditandatangani sripts. Untuk tanda script anda sendiri, anda dapat mengikuti petunjuk di Scott Hanselman's artikel pada Penandatanganan PowerShell Script.
Catatan: Kebanyakan orang cenderung untuk mendapatkan error ini setiap kali mereka membuka Powershell karena hal pertama PS mencoba untuk melakukan ketika diluncurkan adalah mengeksekusi profil pengguna script yang membuat lingkungan anda namun anda suka.
File ini biasanya terletak di:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
Anda dapat menemukan lokasi yang tepat dengan menjalankan powershell variabel
$profile
Jika ada's apa-apa bahwa anda peduli tentang di profil, dan don't ingin repot-repot dengan pengaturan keamanan anda, anda hanya dapat menghapus itu dan powershell won't menemukan apa saja yang tidak melaksanakan.
Di Windows 7:
Pergi ke Start Menu dan mencari "Windows PowerShell ISE".
Klik kanan versi x86 dan pilih "Run as administrator".
Di bagian atas, paste Set-ExecutionPolicy RemoteSigned
; menjalankan script. Memilih "Ya".
Ulangi langkah ini untuk versi 64-bit dari Powershell ISE juga (non x86 versi).
I'm hanya menjelaskan langkah-langkah yang @Chad Miller mengisyaratkan. Terima Kasih Chad!
Jika anda berada di sebuah lingkungan di mana anda bukan administrator, anda dapat mengatur Kebijakan Eksekusi hanya untuk anda, dan itu tidak akan memerlukan administrator.
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
atau
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"
Anda dapat membaca semua tentang hal itu dalam membantu entri.
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
Kita bisa mendapatkan status ExecutionPolicy
dengan perintah di bawah ini:
Get-ExecutionPolicy;
Secara default adalah Dibatasi. Untuk memungkinkan pelaksanaan PowerShell script yang kita butuhkan untuk mengatur ini ExecutionPolicy baik sebagai Memotong atau Terbatas.
Kita dapat menetapkan kebijakan untuk Pengguna Saat ini sebagai Memotong
atau tidak Terikat
dengan menggunakan salah satu dari berikut perintah PowerShell:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;
Terbatas kebijakan memuat semua file-file konfigurasi dan menjalankan semua script. Jika anda menjalankan aplikasi yang unsigned script yang didownload dari Internet, anda diminta untuk izin sebelum berjalan.
Sedangkan di Memotong kebijakan, tidak ada yang diblokir dan tidak ada peringatan atau petunjuk selama eksekusi script. Bypass ExecutionPolicy
lebih santai dari Terbatas
.
RemoteSigned: semua script yang anda buat sendiri akan dijalankan, dan semua script yang di-download dari Internet akan perlu untuk ditandatangani oleh penerbit yang terpercaya.
OK, perubahan kebijakan dengan hanya mengetik:
Set-ExecutionPolicy RemoteSigned
I'm menggunakan Windows 10 dan tidak bisa menjalankan perintah apapun. Satu-satunya perintah yang memberi saya beberapa petunjuk ini:
[x64]
- Buka C:\Windows\SysWOW64\cmd.exe [sebagai administrator]
- Jalankan command> powershell Set-ExecutionPolicy Unrestricted
Tapi ini tidak't bekerja. Itu terbatas. Mungkin baru kebijakan keamanan untuk Windows10. Aku punya kesalahan ini:
Set-ExecutionPolicy: Windows PowerShell memperbarui kebijakan eksekusi berhasil, tetapi pengaturan diganti dengan kebijakan yang ditetapkan pada lingkup yang lebih spesifik. Karena menimpa, shell anda akan mempertahankan arus efektif pelaksanaan kebijakan...
Jadi saya menemukan cara lain (solusi):
Sekarang buka PowerShell dan menikmati ;)
Pengaturan pelaksanaan kebijakan lingkungan tertentu. Jika anda mencoba untuk menjalankan script dari menjalankan x86 ISE anda harus menggunakan x86 PowerShell untuk mengatur eksekusi kebijakan. Demikian juga, jika anda menjalankan versi 64-bit ISE anda harus menetapkan kebijakan dengan 64-bit PowerShell.
Menang + R dan jenis copy paste perintah dan tekan OK:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
Dan mengeksekusi script.
Kemudian mengembalikan perubahan seperti:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
Anda juga bisa melewati ini dengan menggunakan perintah berikut:
PS > powershell Get-Content .\test.ps1 | Invoke-Expression
Anda juga dapat membaca artikel ini dengan Scott Sutherland yang menjelaskan 15 cara yang berbeda untuk memotong PowerShell Set-ExecutionPolicy
jika anda don't memiliki hak administrator:
Aku punya masalah yang sama hari ini. Eksekusi 64-bit kebijakan itu terbatas, sementara 32-bit dibatasi.
Berikut ini's bagaimana perubahan hanya 32-bit kebijakan dari jarak jauh:
Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
Pergi ke registry path HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
dan set ExecutionPolicy
untuk RemoteSigned
.
Di PowerShell 2.0, pelaksanaan kebijakan ditetapkan untuk dinonaktifkan secara default.
Sejak saat itu, PowerShell tim telah membuat banyak perbaikan, dan mereka yakin bahwa pengguna tidak akan melanggar hal-hal yang jauh saat menjalankan script. Jadi dari PowerShell 4.0 dan seterusnya, hal ini diaktifkan secara default.
Dalam kasus anda, ketik Set-ExecutionPolicy RemoteSigned
dari konsol PowerShell dan mengatakan ya.
Beberapa jawaban point untuk eksekusi kebijakan. Namun beberapa hal yang memerlukan "runas administrator" juga. Ini adalah yang paling aman dalam tetap tidak ada perubahan kebijakan pelaksanaan, dan bisa melewati pembatasan administrator. Gunakan dengan schedtask untuk memulai batch dengan:
runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1
dari kedua Jack Edmonds di atas, dan Peter Mortensen / Dhana post https://stackoverflow.com/questions/8249705/how-to-run-an-application-as-run-as-administrator-from-the-command-prompt