Set-ExecutionPolicy

Mengatur kebijakan eksekusi PowerShell untuk komputer Windows.

Sintaks

Set-ExecutionPolicy
   [-ExecutionPolicy] <ExecutionPolicy>
   [[-Scope] <ExecutionPolicyScope>]
   [-Force]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Deskripsi

Set-ExecutionPolicy Cmdlet mengubah kebijakan eksekusi PowerShell untuk komputer Windows. Untuk informasi selengkapnya, lihat about_Execution_Policies.

Dimulai di PowerShell 6.0 untuk komputer non-Windows, kebijakan eksekusi default Tidak Dibatasi dan tidak dapat diubah. Set-ExecutionPolicy Cmdlet tersedia, tetapi PowerShell menampilkan pesan konsol bahwa cmdlet tersebut tidak didukung.

Kebijakan eksekusi adalah bagian dari strategi keamanan PowerShell. Kebijakan eksekusi menentukan apakah Anda dapat memuat file konfigurasi, seperti profil PowerShell Anda, atau menjalankan skrip. Dan, apakah skrip harus ditandatangani secara digital sebelum dijalankan.

Cakupan Set-ExecutionPolicy default cmdlet adalah LocalMachine, yang memengaruhi semua orang yang menggunakan komputer. Untuk mengubah kebijakan eksekusi untuk LocalMachine, mulai PowerShell dengan Jalankan sebagai Administrator.

Untuk menampilkan kebijakan eksekusi untuk setiap cakupan dalam urutan prioritas, gunakan Get-ExecutionPolicy -List. Untuk melihat kebijakan eksekusi yang efektif untuk penggunaan Get-ExecutionPolicy sesi PowerShell Anda tanpa parameter.

Contoh

Contoh 1: Mengatur kebijakan eksekusi

Contoh ini menunjukkan cara mengatur kebijakan eksekusi untuk komputer lokal.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Cmdlet Set-ExecutionPolicy menggunakan parameter ExecutionPolicy untuk menentukan kebijakan RemoteSigned . Parameter Cakupan menentukan nilai cakupan default, LocalMachine. Untuk melihat pengaturan kebijakan eksekusi, gunakan Get-ExecutionPolicy cmdlet dengan parameter Daftar .

Contoh 2: Tetapkan kebijakan eksekusi yang bertentangan dengan Kebijakan Grup

Perintah ini mencoba mengatur kebijakan eksekusi cakupan LocalMachine ke Terbatas. LocalMachine lebih ketat, tetapi bukan kebijakan yang efektif karena bertentangan dengan Kebijakan Grup. Kebijakan Terbatas ditulis ke HKEY_LOCAL_MACHINE sarang registri.

PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine

Set-ExecutionPolicy : PowerShell updated your local preference successfully, but the setting is
overridden by the Group Policy applied to your system. Due to the override, your shell will retain
its current effective execution policy of "AllSigned". Contact your Group Policy administrator for
more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted

PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds

Name                    Property
----                    --------
Microsoft.PowerShell    Path            : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
                        ExecutionPolicy : Restricted
ScriptedDiagnostics     ExecutionPolicy : Unrestricted

Cmdlet Set-ExecutionPolicy menggunakan parameter ExecutionPolicy untuk menentukan kebijakan Terbatas . Parameter Cakupan menentukan nilai cakupan default, LocalMachine. Get-ChildItem Cmdlet menggunakan parameter Jalur dengan penyedia HKLM untuk menentukan lokasi registri.

Contoh 3: Menerapkan kebijakan eksekusi dari komputer jarak jauh ke komputer lokal

Perintah ini mendapatkan objek kebijakan eksekusi dari komputer jarak jauh dan menetapkan kebijakan pada komputer lokal. Get-ExecutionPolicy mengirim objek Microsoft.PowerShell.ExecutionPolicy ke bawah alur. Set-ExecutionPolicy menerima input alur dan tidak memerlukan parameter ExecutionPolicy .

PS> Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

Invoke-Command Cmdlet dijalankan di komputer lokal dan mengirim ScriptBlock ke komputer jarak jauh. Parameter ComputerName menentukan komputer jarak jauh, Server01. Parameter ScriptBlock berjalan Get-ExecutionPolicy di komputer jarak jauh. Objek Get-ExecutionPolicy dikirim ke alur ke Set-ExecutionPolicy. Set-ExecutionPolicy menerapkan kebijakan eksekusi ke cakupan default komputer lokal, LocalMachine.

Contoh 4: Mengatur cakupan untuk kebijakan eksekusi

Contoh ini menunjukkan cara menetapkan kebijakan eksekusi untuk cakupan tertentu, CurrentUser. Cakupan CurrentUser hanya memengaruhi pengguna yang mengatur cakupan ini.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       AllSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicy menggunakan parameter ExecutionPolicy untuk menentukan kebijakan AllSigned . Parameter Cakupan menentukan CurrentUser. Untuk melihat pengaturan kebijakan eksekusi, gunakan Get-ExecutionPolicy cmdlet dengan parameter Daftar .

Kebijakan eksekusi yang efektif untuk pengguna menjadi AllSigned.

Contoh 5: Menghapus kebijakan eksekusi untuk pengguna saat ini

Contoh ini menunjukkan cara menggunakan kebijakan eksekusi Yang tidak ditentukan untuk menghapus kebijakan eksekusi untuk cakupan tertentu.

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Set-ExecutionPolicy menggunakan parameter ExecutionPolicy untuk menentukan kebijakan Tidak Terdefinisi . Parameter Cakupan menentukan CurrentUser. Untuk melihat pengaturan kebijakan eksekusi, gunakan Get-ExecutionPolicy cmdlet dengan parameter Daftar .

Contoh 6: Mengatur kebijakan eksekusi untuk sesi PowerShell saat ini

Cakupan Proses hanya memengaruhi sesi PowerShell saat ini. Kebijakan eksekusi disimpan dalam variabel $env:PSExecutionPolicyPreference lingkungan dan dihapus saat sesi ditutup.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       AllSigned
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicy menggunakan parameter ExecutionPolicy untuk menentukan kebijakan AllSigned. Parameter Cakupan menentukan nilai Proses. Untuk melihat pengaturan kebijakan eksekusi, gunakan Get-ExecutionPolicy cmdlet dengan parameter Daftar .

Contoh 7: Membuka blokir skrip untuk menjalankannya tanpa mengubah kebijakan eksekusi

Contoh ini menunjukkan bagaimana kebijakan eksekusi RemoteSigned mencegah Anda menjalankan skrip yang tidak ditandatangani.

Praktik terbaik adalah membaca kode skrip dan memverifikasi bahwa kode tersebut aman sebelum menggunakan Unblock-File cmdlet . Unblock-File Cmdlet membuka blokir skrip sehingga dapat berjalan, tetapi tidak mengubah kebijakan eksekusi.

PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

.\Start-ActivityTracker.ps1 : File .\Start-ActivityTracker.ps1 cannot be loaded.
The file .\Start-ActivityTracker.ps1 is not digitally signed.
The script will not execute on the system.
For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

PS> Unblock-File -Path .\Start-ActivityTracker.ps1

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

Task 1:

Set-ExecutionPolicy menggunakan parameter ExecutionPolicy untuk menentukan kebijakan RemoteSigned. Kebijakan diatur untuk cakupan default, LocalMachine.

Cmdlet Get-ExecutionPolicy menunjukkan bahwa RemoteSigned adalah kebijakan eksekusi yang efektif untuk sesi PowerShell saat ini.

Skrip Start-ActivityTracker.ps1 dijalankan dari direktori saat ini. Skrip diblokir oleh RemoteSigned karena skrip tidak ditandatangani secara digital.

Untuk contoh ini, kode skrip ditinjau dan diverifikasi sebagai aman untuk dijalankan. Unblock-File Cmdlet menggunakan parameter Path untuk membuka blokir skrip.

Untuk memverifikasi bahwa Unblock-File tidak mengubah kebijakan eksekusi, Get-ExecutionPolicy menampilkan kebijakan eksekusi yang efektif, RemoteSigned.

Skrip, Start-ActivityTracker.ps1 dijalankan dari direktori saat ini. Skrip mulai berjalan karena tidak diblokir oleh Unblock-File cmdlet .

Parameter

-Confirm

Meminta Anda mengonfirmasi sebelum menjalankan cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-ExecutionPolicy

Menentukan kebijakan eksekusi. Jika tidak ada Kebijakan Grup dan kebijakan eksekusi setiap cakupan diatur ke Tidak Terdefinisi, maka Dibatasi menjadi kebijakan efektif untuk semua pengguna.

Nilai kebijakan eksekusi yang dapat diterima adalah sebagai berikut:

  • AllSigned. Mengharuskan semua skrip dan file konfigurasi ditandatangani oleh penerbit tepercaya, termasuk skrip yang ditulis di komputer lokal.
  • Lewati. Tidak ada yang diblokir dan tidak ada peringatan atau perintah.
  • Default. Mengatur kebijakan eksekusi default. Dibatasi untuk klien Windows atau RemoteSigned untuk server Windows.
  • RemoteSigned. Mengharuskan semua skrip dan file konfigurasi yang diunduh dari Internet ditandatangani oleh penerbit tepercaya. Kebijakan eksekusi default untuk komputer server Windows.
  • Dibatasi. Tidak memuat file konfigurasi atau menjalankan skrip. Kebijakan eksekusi default untuk komputer klien Windows.
  • Tidak terdefinis. Tidak ada kebijakan eksekusi yang ditetapkan untuk cakupan. Menghapus kebijakan eksekusi yang ditetapkan dari cakupan yang tidak ditetapkan oleh Kebijakan Grup. Jika kebijakan eksekusi di semua cakupan Tidak Terdefinisi, kebijakan eksekusi yang efektif dibatasi.
  • Tidak dibatasi. Dimulai di PowerShell 6.0, ini adalah kebijakan eksekusi default untuk komputer non-Windows dan tidak dapat diubah. Memuat semua file konfigurasi dan menjalankan semua skrip. Jika Anda menjalankan skrip yang tidak ditandatangani yang diunduh dari internet, Anda akan dimintai izin sebelum dijalankan.
Type:ExecutionPolicy
Accepted values:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False
-Force

Menekan semua perintah konfirmasi. Berhati-hatilah dengan parameter ini untuk menghindari hasil yang tidak terduga.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-Scope

Menentukan cakupan yang dipengaruhi oleh kebijakan eksekusi. Cakupan defaultnya adalah LocalMachine.

Kebijakan eksekusi yang efektif ditentukan oleh urutan prioritas sebagai berikut:

  • MachinePolicy. Diatur oleh Kebijakan Grup untuk semua pengguna komputer.
  • UserPolicy. Diatur oleh Kebijakan Grup untuk pengguna komputer saat ini.
  • Proses. Hanya memengaruhi sesi PowerShell saat ini.
  • CurrentUser. Hanya mempengaruhi pengguna saat ini.
  • LocalMachine. Cakupan default yang memengaruhi semua pengguna komputer.

Cakupan Proses hanya memengaruhi sesi PowerShell saat ini. Kebijakan eksekusi disimpan dalam variabel $env:PSExecutionPolicyPreferencelingkungan , bukan registri. Saat sesi PowerShell ditutup, variabel dan nilai akan dihapus.

Kebijakan eksekusi untuk cakupan CurrentUser ditulis ke HKEY_LOCAL_USER sarang registri.

Kebijakan eksekusi untuk cakupan LocalMachine ditulis ke HKEY_LOCAL_MACHINE sarang registri.

Type:ExecutionPolicyScope
Accepted values:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Position:1
Default value:LocalMachine
Accept pipeline input:True
Accept wildcard characters:False
-WhatIf

Menunjukkan apa yang akan terjadi jika cmdlet berjalan. Cmdlet tidak dijalankan.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

Input

Microsoft.PowerShell.ExecutionPolicy, System.String

Anda dapat menyalurkan objek kebijakan eksekusi atau string yang berisi nama kebijakan eksekusi ke Set-ExecutionPolicy.

Output

None

Set-ExecutionPolicy tidak mengembalikan output apa pun.

Catatan

Set-ExecutionPolicy tidak mengubah cakupan MachinePolicy dan UserPolicy karena ditetapkan oleh Kebijakan Grup.

Set-ExecutionPolicytidak mengambil alih Kebijakan Grup, meskipun preferensi pengguna lebih ketat daripada kebijakan.

Jika Kebijakan Grup Aktifkan Eksekusi Skrip diaktifkan untuk komputer atau pengguna, preferensi pengguna disimpan, tetapi tidak efektif. PowerShell menampilkan pesan yang menjelaskan konflik.