about_Execution_Policies

Deskripsi singkat

Menjelaskan kebijakan eksekusi PowerShell dan menjelaskan cara mengelolanya.

Deskripsi panjang

Kebijakan eksekusi PowerShell adalah fitur keselamatan 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 bukanlah 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.

Pada komputer non-Windows, kebijakan eksekusi default adalah Unrestricted dan tidak dapat diubah. Set-ExecutionPolicy Cmdlet tersedia, tetapi PowerShell menampilkan pesan konsol bahwa cmdlet tersebut tidak didukung. Saat 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 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 program email dan pesan 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 menjalankan 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

  • Kebijakan eksekusi default 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 .

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 efektif 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:PSExecutionPolicyPreferencelingkungan , 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 ini segera efektif. 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 menetapkan kebijakan eksekusi untuk Process cakupan, kebijakan tersebut tidak disimpan dalam registri. Kebijakan eksekusi dipertahankan hingga proses saat ini dan setiap 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 menetapkan 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 ditetapkan dalam cakupan apa pun, kebijakan eksekusi yang efektif adalah Restricted, yang merupakan default untuk klien Windows.

Menetapkan 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 anak.

Untuk mengatur kebijakan eksekusi untuk sesi baru, mulai PowerShell di baris perintah, seperti cmd.exe atau dari PowerShell, lalu gunakan parameter pwsh.exeExecutionPolicy untuk mengatur kebijakan eksekusi.

Contohnya:

pwsh.exe -ExecutionPolicy AllSigned

Kebijakan eksekusi yang Anda tetapkan tidak disimpan di registri. Sebaliknya, 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 diutamakan daripada kebijakan eksekusi yang ditetapkan dengan menggunakan Kebijakan Grup.

Menggunakan Kebijakan Grup untuk Mengelola Kebijakan Eksekusi

Anda dapat menggunakan pengaturan Aktifkan Eksekusi Skrip Kebijakan Grup untuk mengelola kebijakan eksekusi komputer di perusahaan Anda. Pengaturan Kebijakan Grup mengambil alih kebijakan eksekusi yang ditetapkan di PowerShell di semua cakupan.

Pengaturan kebijakan Aktifkan Eksekusi Skrip adalah sebagai berikut:

  • Jika Anda menonaktifkan Aktifkan Eksekusi Skrip, skrip tidak berjalan. Ini setara dengan Restricted kebijakan eksekusi.

  • Jika mengaktifkan Aktifkan Eksekusi Skrip, Anda dapat memilih kebijakan eksekusi. Pengaturan Kebijakan Grup setara dengan pengaturan kebijakan eksekusi berikut:

    Kebijakan Grup Kebijakan Eksekusi
    Perbolehkan semua skrip Unrestricted
    Perbolehkan skrip lokal dan skrip yang ditandatangani dari jarak jauh RemoteSigned
    Perbolehkan hanya skrip yang ditandatangani AllSigned
  • Jika Aktifkan Eksekusi Skrip tidak dikonfigurasi, itu tidak berpengaruh. Kebijakan eksekusi yang ditetapkan di PowerShell efektif.

File PowerShellExecutionPolicy.adm dan PowerShellExecutionPolicy.admx 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 simpul Konfigurasi Komputer lebih diutamakan daripada kebijakan yang ditetapkan dalam simpul 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: CurrentUser
Execution Policy: LocalMachine

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.

Mulai dari PowerShell 3.0, Anda dapat menggunakan parameter Stream cmdlet Get-Item 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 Unblock-File.

Catatan

Metode lain mengunduh file mungkin tidak menandai file yang berasal dari Zona Internet. Beberapa contoh 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.

Lihat juga