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 dalam file konfigurasi PowerShell. 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 bypass membuat kebijakan dengan mengetikkan 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.
Pada komputer non-Windows, default kebijakan eksekusi adalah Unrestricted dan tidak dapat diubah. Set-ExecutionPolicy
Cmdlet tersedia, tetapi PowerShell menampilkan pesan konsol bahwa cmdlet tersebut tidak didukung. Sementara Get-ExecutionPolicy
kembali Unrestricted pada platform non-Windows, perilakunya benar-benar cocok Bypass karena platform tersebut tidak mengimplementasikan Zona Keamanan Windows.
Kebijakan eksekusi PowerShell
Penegakan kebijakan ini hanya terjadi pada platform Windows. 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
- default Mengatur kebijakan eksekusi.
- Restricted untuk klien Windows.
- RemoteSigned untuk server Windows.
RemoteSigned
- Kebijakan default eksekusi 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 default eksekusi 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 .scope
- Jika kebijakan eksekusi di semua cakupan adalah Undefined, kebijakan eksekusi yang efektif adalah Restricted untuk klien Windows dan RemoteSigned untuk Windows Server.
Unrestricted
- Kebijakan default eksekusi untuk komputer non-Windows dan tidak dapat diubah.
- 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 .
Kebijakan eksekusi scope
Anda dapat menetapkan kebijakan eksekusi yang hanya efektif di tertentu scope.
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
Satu-satunya Processscope mempengaruhi sesi PowerShell saat ini. Kebijakan eksekusi disimpan dalam variabel
$env:PSExecutionPolicyPreference
lingkungan , bukan file konfigurasi. Saat sesi PowerShell ditutup, variabel dan nilai akan dihapus.CurrentUser
Kebijakan eksekusi hanya memengaruhi pengguna saat ini. Ini disimpan dalam file konfigurasi CurrentUser .
LocalMachine
Kebijakan eksekusi memengaruhi semua pengguna pada komputer saat ini. Ini disimpan dalam file konfigurasi AllUsers .
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 tertentuscope, gunakan Scope parameter .Get-ExecutionPolicy
Misalnya, perintah berikut mendapatkan kebijakan eksekusi untuk CurrentUserscope:
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 dalam file konfigurasi dan tetap efektif sampai Anda mengubahnya lagi.
Jika Anda mengatur kebijakan eksekusi untuk Processscope, kebijakan tersebut tidak disimpan dalam file konfigurasi. Kebijakan eksekusi dipertahankan hingga proses saat ini process dan setiap anak ditutup.
Catatan
Di Windows Vista dan versi Windows yang lebih baru, untuk menjalankan perintah yang mengubah kebijakan eksekusi untuk komputer lokal, LocalMachinescope, mulai PowerShell dengan opsi Jalankan sebagai administrator.
Untuk mengubah kebijakan eksekusi Anda:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
Contohnya:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Untuk menetapkan kebijakan eksekusi pada :scope
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 tertentu scope, 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 ditetapkan dalam kebijakan eksekusi apa pun scope, 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 pwsh.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 pwsh.exe
ExecutionPolicy untuk mengatur kebijakan eksekusi.
Contohnya:
pwsh.exe -ExecutionPolicy AllSigned
Kebijakan eksekusi yang Anda tetapkan tidak disimpan dalam file konfigurasi. 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 file konfigurasi 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 pwsh.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 Windows 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 ByPass eksekusi atau AllSigned tidak memerlukan pemeriksaan Zona yang menghindari masalah.