Set-ExecutionPolicy în PowerShell

Primii pași Windows PowerShell 1.0

Stabilește pe Windows dacă PowerShell are voie să ruleze scripturi .ps1; Unblock-File deblochează un script descărcat de pe internet.

Sintaxă
Set-ExecutionPolicy [-ExecutionPolicy] <ExecutionPolicy> [[-Scope] <ExecutionPolicyScope>] [-Force]
Get-ExecutionPolicy [-Scope <ExecutionPolicyScope>] [-List]
Unblock-File [-Path] <String[]>

Ce face Set-ExecutionPolicy

Politica de execuție decide pe Windows în ce condiții PowerShell încarcă scripturi .ps1, module și profilul. Valorile principale: Restricted (doar comenzi, fără scripturi), RemoteSigned (scripturile tale rulează, cele descărcate de pe internet trebuie semnate sau deblocate), AllSigned (toate trebuie semnate), Unrestricted (rulează tot, dar avertizează la scripturile descărcate) și Bypass (nimic blocat, fără avertismente). Dacă nicio politică nu e setată în niciun domeniu, pe Windows client politica efectivă este Restricted. Nu este o barieră de securitate, ci o protecție împotriva rulării din greșeală.

Politica se poate seta pe mai multe domenii (-Scope), în ordinea priorității: MachinePolicy și UserPolicy (Group Policy), Process (doar sesiunea curentă), CurrentUser și LocalMachine (implicit, cere administrator). Pentru un calculator personal, varianta uzuală este Set-ExecutionPolicy RemoteSigned -Scope CurrentUser, care nu cere drepturi de administrator. Get-ExecutionPolicy -List arată valoarea din fiecare domeniu. Windows PowerShell 5.1 și PowerShell 7 își țin setările separat: ce schimbi în powershell.exe nu afectează pwsh.exe.

Un script descărcat din browser primește pe Windows marcajul „venit de pe internet” (fluxul Zone.Identifier); cu RemoteSigned el nu rulează până nu îl deblochezi cu Unblock-File (din Windows PowerShell 3.0; pe macOS din PowerShell 7). Citește scriptul înainte. Pe macOS și Linux politica este mereu Unrestricted și nu se poate schimba: Set-ExecutionPolicy există, dar afișează doar un mesaj că nu este suportat.

Parametri

Parametru Descriere
-ExecutionPolicy Politica: Restricted, RemoteSigned, AllSigned, Unrestricted, Bypass, Undefined (șterge setarea din domeniu), Default.
-Scope Domeniul: CurrentUser, LocalMachine (implicit), Process. MachinePolicy și UserPolicy vin din Group Policy și nu se pot schimba de aici.
-Force Nu mai cere confirmare.
Get-ExecutionPolicy -List Afișează politica din fiecare domeniu, în ordinea priorității.
Unblock-File -Path Fișierele de deblocat (acceptă wildcard și pipeline).

Ce returnează

Set-ExecutionPolicy și Unblock-File nu returnează nimic. Get-ExecutionPolicy returnează valoarea politicii efective (sau tabelul pe domenii cu -List).

Exemple

Exemplul 1: Permiți scripturile locale doar pentru utilizatorul tău

Nu are nevoie de administrator. -Force sare peste confirmare; apoi verifici politica efectivă.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Get-ExecutionPolicy

Ieșire în terminal

RemoteSigned

Exemplul 2: Politica din fiecare domeniu

Domeniul cu prioritate mai mare câștigă: aici CurrentUser e setat, deci politica efectivă este RemoteSigned.

Get-ExecutionPolicy -List

Ieșire în terminal

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

Exemplul 3: Deblochezi un script descărcat, după ce l-ai citit

Unblock-File nu afișează nimic. Politica rămâne aceeași, doar fișierul nu mai e marcat ca descărcat de pe internet.

Unblock-File -Path C:\Proiecte\facturi\raport.ps1
C:\Proiecte\facturi\raport.ps1

Ieșire în terminal

Raport generat pentru Cafenea Iași.

Greșeli frecvente

  • Să setezi Unrestricted sau Bypass pe LocalMachine ca să scapi de eroarea „is not digitally signed”: de obicei ajunge RemoteSigned pe CurrentUser plus Unblock-File pentru scriptul descărcat.
  • Să rulezi Set-ExecutionPolicy fără -Scope într-o consolă fără drepturi de administrator: implicit e LocalMachine, care cere administrator.
  • Să schimbi politica în Windows PowerShell 5.1 și să te miri că pwsh se comportă la fel ca înainte: cele două versiuni au setări separate.
  • Să cauți problema în politica de execuție pe macOS sau Linux: acolo nu se aplică (politica e mereu Unrestricted); verifică permisiunile fișierului și calea.

Comenzi înrudite

  • $PROFILE: Variabila $PROFILE conține calea scriptului care rulează la fiecare pornire a PowerShell, unde îți pui aliasurile și funcțiile.
  • PowerShell pe macOS și Linux: Cum instalezi și pornești PowerShell 7 (pwsh) pe macOS și Linux și ce se comportă diferit față de Windows: aliasuri, majuscule, căi.
  • Get-Help: Afișează documentația unui cmdlet sau a unui subiect about_*; Update-Help descarcă fișierele de ajutor pe calculator.