about_Execution_Policies
Deskripsi singkat
Menjelaskan kebijakan eksekusi PowerShell dan menjelaskan cara mengelolanya.
Deskripsi panjang
Kebijakan eksekusi PowerShell adalah fitur keamanan yang mengontrol kondisi di mana PowerShell memuat file konfigurasi dan menjalankan skrip. Fitur ini membantu mencegah eksekusi skrip berbahaya.
Pada komputer Windows, Anda dapat mengatur kebijakan eksekusi untuk komputer lokal, untuk pengguna saat ini, atau untuk sesi tertentu. Anda juga dapat menggunakan pengaturan Kebijakan Grup untuk mengatur kebijakan eksekusi untuk komputer dan pengguna.
Kebijakan eksekusi untuk komputer lokal dan pengguna saat ini disimpan di registri. Anda tidak perlu mengatur kebijakan eksekusi di profil PowerShell Anda. Kebijakan eksekusi untuk sesi tertentu hanya disimpan dalam memori dan hilang ketika sesi ditutup.
Kebijakan eksekusi bukan sistem keamanan yang membatasi tindakan pengguna. Misalnya, pengguna dapat dengan mudah melewati kebijakan dengan mengetik konten skrip di baris perintah saat mereka tidak dapat menjalankan skrip. Sebaliknya, kebijakan eksekusi membantu pengguna untuk menetapkan aturan dasar dan mencegah mereka melanggarnya secara tidak sengaja.
Kebijakan eksekusi PowerShell
Kebijakan eksekusi PowerShell adalah sebagai berikut:
AllSigned
- Skrip dapat berjalan.
- Mengharuskan semua skrip dan file konfigurasi ditandatangani oleh penerbit tepercaya, termasuk skrip yang Anda tulis di komputer lokal.
- Meminta Anda sebelum menjalankan skrip dari penerbit bahwa Anda belum diklasifikasikan sebagai tepercaya atau tidak tepercaya.
- Risiko yang berjalan ditandatangani, tetapi berbahaya, skrip.
Bypass
- Tidak ada yang diblokir dan tidak ada peringatan atau perintah.
- Kebijakan eksekusi ini dirancang untuk konfigurasi di mana skrip PowerShell dibangun ke dalam aplikasi yang lebih besar atau untuk konfigurasi di mana PowerShell adalah fondasi untuk program yang memiliki model keamanannya sendiri.
Default
- Mengatur kebijakan eksekusi default.
- Restricted untuk klien Windows.
- RemoteSigned untuk server Windows.
RemoteSigned
- Kebijakan eksekusi default untuk komputer server Windows.
- Skrip dapat berjalan.
- Memerlukan tanda tangan digital dari penerbit tepercaya pada skrip dan file konfigurasi yang diunduh dari internet yang mencakup email dan program olahpesan instan.
- Tidak memerlukan tanda tangan digital pada skrip yang ditulis di komputer lokal dan tidak diunduh dari internet.
- Menjalankan skrip yang diunduh dari internet dan tidak ditandatangani, jika skrip tidak diblokir, seperti dengan menggunakan
Unblock-File
cmdlet. - Risiko menjalankan skrip yang tidak ditandatangani dari sumber selain internet dan skrip yang ditandatangani yang bisa berbahaya.
Restricted
- Kebijakan eksekusi default untuk komputer klien Windows.
- Mengizinkan perintah individual, tetapi tidak mengizinkan skrip.
- Mencegah berjalannya semua file skrip, termasuk pemformatan dan file konfigurasi (
.ps1xml
), file skrip modul (.psm1
), dan profil PowerShell (.ps1
).
Undefined
- Tidak ada kebijakan eksekusi yang ditetapkan dalam cakupan saat ini.
- Jika kebijakan eksekusi di semua cakupan adalah Undefined, kebijakan eksekusi yang efektif adalah Restricted untuk klien Windows dan RemoteSigned untuk Windows Server.
Unrestricted
- Skrip yang tidak ditandatangani dapat berjalan. Ada risiko menjalankan skrip berbahaya.
- Memperingatkan pengguna sebelum menjalankan skrip dan file konfigurasi yang bukan berasal dari zona intranet lokal.
Catatan
Pada sistem yang tidak membedakan jalur Universal Naming Convention (UNC) dari jalur internet, skrip yang diidentifikasi oleh jalur UNC mungkin tidak diizinkan untuk dijalankan dengan kebijakan eksekusi RemoteSigned .
Cakupan kebijakan eksekusi
Anda dapat menetapkan kebijakan eksekusi yang hanya efektif dalam cakupan tertentu.
Nilai yang valid untuk Scope adalah MachinePolicy, UserPolicy, Process, CurrentUser, dan LocalMachine. LocalMachine adalah default saat mengatur kebijakan eksekusi.
Nilai Scope tercantum dalam urutan prioritas. Kebijakan yang diutamakan berlaku dalam sesi saat ini, bahkan jika kebijakan yang lebih ketat ditetapkan pada tingkat prioritas yang lebih rendah.
Untuk informasi selengkapnya, lihat Set-ExecutionPolicy.
MachinePolicy
Diatur oleh Kebijakan Grup untuk semua pengguna komputer.
UserPolicy
Diatur oleh Kebijakan Grup untuk pengguna komputer saat ini.
Process
Cakupan Process hanya memengaruhi sesi PowerShell saat ini. Kebijakan eksekusi disimpan dalam variabel
$env:PSExecutionPolicyPreference
lingkungan , bukan registri. Saat sesi PowerShell ditutup, variabel dan nilai akan dihapus.CurrentUser
Kebijakan eksekusi hanya memengaruhi pengguna saat ini. Ini disimpan di subkuntang registri HKEY_CURRENT_USER .
LocalMachine
Kebijakan eksekusi memengaruhi semua pengguna pada komputer saat ini. Ini disimpan di subkuntang registri HKEY_LOCAL_MACHINE .
Mengelola kebijakan eksekusi dengan PowerShell
Untuk mendapatkan kebijakan eksekusi yang efektif untuk sesi PowerShell saat ini, gunakan Get-ExecutionPolicy
cmdlet .
Perintah berikut mendapatkan kebijakan eksekusi yang efektif:
Get-ExecutionPolicy
Untuk mendapatkan semua kebijakan eksekusi yang memengaruhi sesi saat ini dan menampilkannya dalam urutan prioritas:
Get-ExecutionPolicy -List
Hasilnya terlihat mirip dengan output sampel berikut:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine AllSigned
Dalam hal ini, kebijakan eksekusi yang efektif adalah RemoteSigned karena kebijakan eksekusi untuk pengguna saat ini lebih diutamakan daripada kebijakan eksekusi yang ditetapkan untuk komputer lokal.
Untuk mendapatkan kebijakan eksekusi yang ditetapkan untuk cakupan tertentu, gunakan Scope parameter .Get-ExecutionPolicy
Misalnya, perintah berikut mendapatkan kebijakan eksekusi untuk cakupan CurrentUser :
Get-ExecutionPolicy -Scope CurrentUser
Mengubah kebijakan eksekusi
Untuk mengubah kebijakan eksekusi PowerShell di komputer Windows Anda, gunakan Set-ExecutionPolicy
cmdlet . Perubahan segera berlaku. Anda tidak perlu memulai ulang PowerShell.
Jika Anda mengatur kebijakan eksekusi untuk cakupan LocalMachine atau CurrentUser, perubahan disimpan di registri dan tetap efektif sampai Anda mengubahnya lagi.
Jika Anda mengatur kebijakan eksekusi untuk Process cakupan, kebijakan tersebut tidak disimpan di registri. Kebijakan eksekusi dipertahankan sampai proses saat ini dan proses turunan ditutup.
Catatan
Di Windows Vista dan versi Windows yang lebih baru, untuk menjalankan perintah yang mengubah kebijakan eksekusi untuk komputer lokal, cakupan LocalMachine , mulai PowerShell dengan opsi Jalankan sebagai administrator .
Untuk mengubah kebijakan eksekusi Anda:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
Contohnya:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Untuk mengatur kebijakan eksekusi dalam cakupan tertentu:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>
Contohnya:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Perintah untuk mengubah kebijakan eksekusi dapat berhasil tetapi masih tidak mengubah kebijakan eksekusi yang efektif.
Misalnya, perintah yang mengatur kebijakan eksekusi untuk komputer lokal dapat berhasil tetapi ditimpa oleh kebijakan eksekusi untuk pengguna saat ini.
Menghapus kebijakan eksekusi
Untuk menghapus kebijakan eksekusi untuk cakupan tertentu, atur kebijakan eksekusi ke Undefined.
Misalnya, untuk menghapus kebijakan eksekusi untuk semua pengguna komputer lokal:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
Untuk menghapus kebijakan eksekusi untuk Scope:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Jika tidak ada kebijakan eksekusi yang diatur dalam cakupan apa pun, kebijakan eksekusi yang efektif adalah Restricted, yang merupakan default untuk klien Windows.
Mengatur kebijakan yang berbeda untuk satu sesi
Anda dapat menggunakan parameter ExecutionPolicy untuk powershell.exe
mengatur kebijakan eksekusi untuk sesi PowerShell baru. Kebijakan hanya memengaruhi sesi saat ini dan sesi turunan.
Untuk mengatur kebijakan eksekusi untuk sesi baru, mulai PowerShell di baris perintah, seperti cmd.exe
atau dari PowerShell, lalu gunakan parameter powershell.exe
ExecutionPolicy untuk mengatur kebijakan eksekusi.
Contohnya:
powershell.exe -ExecutionPolicy AllSigned
Kebijakan eksekusi yang Anda tetapkan tidak disimpan di registri. Sebaliknya, itu disimpan dalam $env:PSExecutionPolicyPreference
variabel lingkungan. Variabel dihapus saat Anda menutup sesi tempat kebijakan diatur. Anda tidak dapat mengubah kebijakan dengan mengedit nilai variabel.
Selama sesi, kebijakan eksekusi yang ditetapkan untuk sesi lebih diutamakan daripada kebijakan eksekusi yang diatur dalam registri untuk komputer lokal atau pengguna saat ini. Namun, itu tidak lebih diutamakan daripada kebijakan eksekusi yang ditetapkan dengan menggunakan Kebijakan Grup.
Menggunakan Kebijakan Grup untuk Mengelola Kebijakan Eksekusi
Anda dapat menggunakan pengaturan Aktifkan Kebijakan Grup Eksekusi Skrip untuk mengelola kebijakan eksekusi komputer di perusahaan Anda. Pengaturan Kebijakan Grup akan mengambil alih kebijakan eksekusi yang ditetapkan di PowerShell di semua cakupan.
Pengaturan kebijakan Aktifkan Eksekusi Skrip sebagai berikut:
Jika Anda menonaktifkan Aktifkan Eksekusi Skrip, skrip tidak akan berjalan. Ini setara dengan Restricted kebijakan eksekusi.
Jika Aktifkan Eksekusi Skrip diaktifkan, Anda dapat memilih kebijakan eksekusi. Pengaturan Kebijakan Grup setara dengan pengaturan kebijakan eksekusi berikut:
Kebijakan Grup Kebijakan Eksekusi Izinkan semua skrip Unrestricted Izinkan skrip lokal dan skrip yang ditandatangani dari jarak jauh RemoteSigned Izinkan hanya skrip yang ditandatangani AllSigned Aktifkan Eksekusi Skrip yang tidak dikonfigurasi tidak berpengaruh apa pun. Kebijakan eksekusi yang ditetapkan di PowerShell akan berlaku.
File PowerShellExecutionPolicy.adm dan PowerShellExecutionPolicy.admx akan menambahkan kebijakan Aktifkan Eksekusi Skrip ke node Konfigurasi Komputer dan Konfigurasi Pengguna di editor Kebijakan Grup di jalur berikut.
Untuk Windows XP dan Windows Server 2003:
Administrative Templates\Windows Components\Windows PowerShell
Untuk Windows Vista dan versi Windows yang lebih baru:
Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell
Kebijakan yang ditetapkan dalam node Konfigurasi Komputer lebih diutamakan daripada kebijakan yang ditetapkan dalam node Konfigurasi Pengguna.
Untuk informasi selengkapnya, lihat about_Group_Policy_Settings .
Prioritas kebijakan eksekusi
Saat menentukan kebijakan eksekusi yang efektif untuk sesi, PowerShell mengevaluasi kebijakan eksekusi dalam urutan prioritas berikut:
Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or powershell.exe -ExecutionPolicy)
Execution Policy: LocalMachine
Execution Policy: CurrentUser
Mengelola skrip yang ditandatangani dan tidak ditandatangani
Di Windows, program seperti Internet Explorer dan Microsoft Edge menambahkan aliran data alternatif ke file yang diunduh. Ini menandai file sebagai "berasal dari Internet". Jika kebijakan eksekusi PowerShell Anda remoteSigned, PowerShell tidak akan menjalankan skrip yang tidak ditandatangani yang diunduh dari internet yang mencakup email dan program pesan instan.
Anda dapat menandatangani skrip atau memilih untuk menjalankan skrip yang tidak ditandatangani tanpa mengubah kebijakan eksekusi.
Dimulai di PowerShell 3.0, Anda dapat menggunakan parameter Get-Item
Stream cmdlet untuk mendeteksi file yang diblokir karena diunduh dari internet. Unblock-File
Gunakan cmdlet untuk membuka blokir skrip sehingga Anda dapat menjalankannya di PowerShell.
Untuk informasi selengkapnya, lihat about_Signing, Get-Item, dan Buka Blokir-File.
Catatan
Metode lain mengunduh file mungkin tidak menandai file yang berasal dari Zona Internet. Beberapa contohnya termasuk:
curl.exe
Invoke-RestMethod
Invoke-WebRequest
Kebijakan eksekusi pada Windows Server Core dan Window Nano Server
Ketika PowerShell 6 dijalankan pada Windows Server Core atau Windows Nano Server dalam kondisi tertentu, kebijakan eksekusi dapat gagal dengan kesalahan berikut:
AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PowerShell menggunakan API di Windows Desktop Shell (explorer.exe
) untuk memvalidasi Zona file skrip. Windows Shell tidak tersedia di Windows Server Core dan Windows Nano Server.
Anda juga bisa mendapatkan kesalahan ini pada sistem Windows jika Windows Desktop Shell tidak tersedia atau tidak responsif. Misalnya, selama masuk, skrip masuk PowerShell dapat memulai eksekusi sebelum Windows Desktop siap, yang mengakibatkan kegagalan.
Menggunakan kebijakan eksekusi ByPass atau AllSigned tidak memerlukan pemeriksaan Zona yang menghindari masalah.