Condividi tramite


about_Execution_Policies

Breve descrizione

Descrive i criteri di esecuzione di PowerShell e spiega come gestirli.

Descrizione lunga

I criteri di esecuzione di PowerShell sono una funzionalità di sicurezza che controlla le condizioni in cui PowerShell carica i file di configurazione ed esegue script. Questa funzionalità aiuta a prevenire l'esecuzione di script dannosi.

In un computer Windows è possibile impostare un criterio di esecuzione per il computer locale, per l'utente corrente o per una sessione specifica. È anche possibile usare impostazioni di Criteri di gruppo per impostare criteri di esecuzione per computer e utenti.

I criteri di esecuzione per il computer locale e l'utente corrente vengono archiviati nel Registro di sistema. Non è necessario impostare i criteri di esecuzione nel profilo di PowerShell. I criteri di esecuzione per una sessione specifica vengono archiviati solo in memoria e vengono persi quando la sessione viene chiusa.

I criteri di esecuzione non sono un sistema di sicurezza che limita le azioni utente. Ad esempio, gli utenti possono facilmente ignorare un criterio digitando il contenuto dello script nella riga di comando quando non possono eseguire uno script. Invece, i criteri di esecuzione consentono agli utenti di impostare regole di base e impedisce loro di violarli in modo involontario.

Nei computer non Windows, i criteri di esecuzione predefiniti sono Unrestricted e non possono essere modificati. Il Set-ExecutionPolicy cmdlet è disponibile, ma PowerShell visualizza un messaggio della console che non è supportato. Anche se Get-ExecutionPolicy restituisce Unrestricted su piattaforme non Windows, il comportamento corrisponde Bypass in realtà perché queste piattaforme non implementano le zone di Sicurezza di Windows.

Criteri di esecuzione di PowerShell

L'applicazione di questi criteri si verifica solo nelle piattaforme Windows. I criteri di esecuzione di PowerShell sono i seguenti:

AllSigned

  • Gli script possono essere eseguiti.
  • è necessario che tutti gli script e i file di configurazione siano firmati da un autore attendibile, compresi quelli creati nel computer locale.
  • Richiede di eseguire script dagli editori che non sono ancora stati classificati come attendibili o non attendibili.
  • Rischi per l'esecuzione di script firmati, ma dannosi.

Bypass

  • non viene bloccato niente e non vengono visualizzati avvvisi né prompt.
  • Questo criterio di esecuzione è progettato per le configurazioni in cui uno script di PowerShell è integrato in un'applicazione più grande o per le configurazioni in cui PowerShell è la base per un programma con un proprio modello di sicurezza.

Default

  • Imposta i criteri di esecuzione predefiniti.
  • Restricted per i client Windows.
  • RemoteSigned per i server Windows.

RemoteSigned

  • Criterio di esecuzione predefinito per i computer windows server.
  • Gli script possono essere eseguiti.
  • Richiede una firma digitale da un editore attendibile su script e file di configurazione scaricati da Internet, che include programmi di posta elettronica e di messaggistica istantanea.
  • Non richiede firme digitali sugli script scritti nel computer locale e non scaricati da Internet.
  • Esegue script scaricati da Internet e non firmati, se gli script vengono sbloccati, ad esempio usando il Unblock-File cmdlet.
  • Rischi di eseguire script non firmati da origini diverse da Internet e script firmati che potrebbero essere dannosi.

Restricted

  • Criterio di esecuzione predefinito per i computer client Windows.
  • Consente singoli comandi, ma non consente script.
  • Impedisce l'esecuzione di tutti i file di script, inclusi la formattazione e i file di configurazione (), i file di script del modulo (.ps1xml.psm1) e i profili di PowerShell (.ps1).

Undefined

  • Nell'ambito corrente non sono impostati criteri di esecuzione.
  • Se i criteri di esecuzione in tutti gli ambiti sono Undefined, i criteri di esecuzione effettivi sono Restricted per i client Windows e RemoteSigned per Windows Server.

Unrestricted

  • I criteri di esecuzione predefiniti per computer non Windows e non possono essere modificati.
  • Gli script senza segno possono essere eseguiti. Esiste un rischio di esecuzione di script dannosi.
  • Avvisa l'utente prima di eseguire script e file di configurazione non provenienti dall'area Intranet locale.

Nota

Nei sistemi che non distingueno i percorsi UNC (Universal Naming Convention) dai percorsi Internet, gli script identificati da un percorso UNC potrebbero non essere consentiti per l'esecuzione con i criteri di esecuzione RemoteSigned .

Ambito dei criteri di esecuzione

È possibile impostare un criterio di esecuzione efficace solo in un determinato ambito.

I valori validi per Scope sono MachinePolicy, UserPolicy, , ProcessCurrentUser e LocalMachine. LocalMachine è l'impostazione predefinita quando si imposta un criterio di esecuzione.

I Scope valori sono elencati nell'ordine di precedenza. Il criterio che ha la precedenza è efficace nella sessione corrente, anche se un criterio più restrittivo è stato impostato a un livello inferiore di precedenza.

Per altre informazioni, vedere Set-ExecutionPolicy.

MachinePolicy

Impostato da un Criteri di gruppo per tutti gli utenti del computer.

UserPolicy

Impostato da un Criteri di gruppo per l'utente corrente del computer.

Process

L'ambito Process influisce solo sulla sessione di PowerShell corrente. I criteri di esecuzione vengono salvati nella variabile $env:PSExecutionPolicyPreferencedi ambiente anziché nel Registro di sistema. Quando la sessione di PowerShell viene chiusa, la variabile e il valore vengono eliminati.

CurrentUser

i criteri di esecuzione influiscono solo sull'utente corrente. Viene archiviata nella sottochiave del Registro di sistema HKEY_CURRENT_USER .

LocalMachine

I criteri di esecuzione influiscono su tutti gli utenti nel computer corrente. Viene archiviata nella sottochiave del Registro di sistema HKEY_LOCAL_MACHINE .

Gestione dei criteri di esecuzione con PowerShell

Per ottenere i criteri di esecuzione effettivi per la sessione di PowerShell corrente, usare il Get-ExecutionPolicy cmdlet.

Il comando seguente ottiene i criteri di esecuzione effettivi:

Get-ExecutionPolicy

Per ottenere tutti i criteri di esecuzione che influiscono sulla sessione corrente e visualizzarli nell'ordine di precedenza:

Get-ExecutionPolicy -List

Il risultato è simile all'output di esempio seguente:

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

In questo caso, i criteri di esecuzione effettivi sono RemoteSigned perché i criteri di esecuzione per l'utente corrente hanno la precedenza sui criteri di esecuzione impostati per il computer locale.

Per ottenere il set di criteri di esecuzione per un determinato ambito, usare il Scope parametro di Get-ExecutionPolicy.

Ad esempio, il comando seguente ottiene i criteri di esecuzione per l'ambito CurrentUser :

Get-ExecutionPolicy -Scope CurrentUser

Modificare i criteri di esecuzione

Per modificare i criteri di esecuzione di PowerShell nel computer Windows, usare il Set-ExecutionPolicy cmdlet. La modifica è effettiva immediatamente. Non è necessario riavviare PowerShell.

Se si impostano i criteri di esecuzione per gli ambiti LocalMachine o CurrentUser, la modifica viene salvata nel Registro di sistema e rimane effettiva finché non viene modificata di nuovo.

Se si impostano i criteri di esecuzione per l'ambito Process , non viene salvato nel Registro di sistema. I criteri di esecuzione vengono mantenuti fino a quando il processo corrente e tutti i processi figlio vengono chiusi.

Nota

In Windows Vista e versioni successive di Windows per eseguire comandi che modificano i criteri di esecuzione per il computer locale, l'ambito LocalMachine , avviare PowerShell con l'opzione Esegui come amministratore .

Per modificare i criteri di esecuzione:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Ad esempio:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Per impostare i criteri di esecuzione in un determinato ambito:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

Ad esempio:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Un comando per modificare un criterio di esecuzione può avere esito positivo ma non modificare i criteri di esecuzione effettivi.

Ad esempio, un comando che imposta i criteri di esecuzione per il computer locale può avere esito positivo, ma essere sottoposto a override dai criteri di esecuzione per l'utente corrente.

Rimuovere i criteri di esecuzione

Per rimuovere i criteri di esecuzione per un determinato ambito, impostare il criterio di esecuzione su Undefined.

Ad esempio, per rimuovere i criteri di esecuzione per tutti gli utenti del computer locale:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

Per rimuovere i criteri di esecuzione per un Scopeoggetto :

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Se non vengono impostati criteri di esecuzione in alcun ambito, i criteri di esecuzione effettivi sono Restricted, ovvero il valore predefinito per i client Windows.

Impostare un criterio diverso per una sessione

È possibile usare il parametro ExecutionPolicy di per impostare un criterio di pwsh.exe esecuzione per una nuova sessione di PowerShell. Il criterio influisce solo sulla sessione corrente e sulle sessioni figlio.

Per impostare i criteri di esecuzione per una nuova sessione, avviare PowerShell nella riga di comando, ad esempio cmd.exe o da PowerShell, quindi usare il parametro ExecutionPolicy di per impostare i criteri di pwsh.exe esecuzione.

Ad esempio:

pwsh.exe -ExecutionPolicy AllSigned

I criteri di esecuzione impostati non vengono archiviati nel Registro di sistema. Viene invece archiviato nella $env:PSExecutionPolicyPreference variabile di ambiente. La variabile viene eliminata quando si chiude la sessione in cui viene impostato il criterio. Non è possibile modificare il criterio modificando il valore della variabile.

Durante la sessione, i criteri di esecuzione impostati per la sessione hanno la precedenza su un criterio di esecuzione impostato nel Registro di sistema per il computer locale o l'utente corrente. Tuttavia, non ha la precedenza sul criterio di esecuzione impostato usando un Criteri di gruppo.

Usare i criteri di gruppo per gestire i criteri di esecuzione

È possibile usare l'impostazione Attiva esecuzione script Criteri di gruppo per gestire i criteri di esecuzione dei computer nell'organizzazione. L'impostazione dei criteri di gruppo sostituisce i criteri di esecuzione impostati in PowerShell in tutti gli ambiti.

Le impostazioni del criterio Attiva l'esecuzione di script sono le seguenti:

  • Se si disabilita Attiva l'esecuzione di script, gli script non vengono eseguiti. Equivale ai criteri di Restricted esecuzione.

  • Se si abilita Attiva l'esecuzione di script, è possibile selezionare un criterio di esecuzione. Le impostazioni dei criteri di gruppo sono equivalenti alle impostazioni dei criteri di esecuzione seguenti:

    Criteri di gruppo Criteri di esecuzione
    Consenti tutti gli script Unrestricted
    Consenti script locali e script remoti firmati RemoteSigned
    Consenti solo script firmati AllSigned
  • Se Attiva l'esecuzione di script non è configurato, non ha alcun effetto. Viene applicato il criterio di esecuzione impostato in PowerShell.

I file PowerShellExecutionPolicy.adm e PowerShellExecutionPolicy.admx aggiungono il criterio Attiva l'esecuzione di script ai nodi Configurazione computer e Configurazione utente nell'Editor Criteri di gruppo nei percorsi seguenti.

Per Windows XP e Windows Server 2003:

Administrative Templates\Windows Components\Windows PowerShell

Per Windows Vista e versioni successive di Windows:

Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell

I criteri impostati nel nodo Configurazione computer hanno la precedenza sui criteri impostati nel nodo Configurazione utente.

Per altre informazioni, vedere about_Group_Policy_Settings.

Precedenza dei criteri di esecuzione

Quando si determinano i criteri di esecuzione effettivi per una sessione, PowerShell valuta i criteri di esecuzione nell'ordine di precedenza seguente:

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: CurrentUser
Execution Policy: LocalMachine

Gestire script firmati e non firmati

In Windows, programmi come Internet Explorer e Microsoft Edge aggiungono un flusso di dati alternativo ai file scaricati. Questo contrassegna il file come "proveniente da Internet". Se i criteri di esecuzione di PowerShell sono RemoteSigned, PowerShell non eseguirà script senza segno scaricati da Internet che include programmi di posta elettronica e messaggistica istantanea.

È possibile firmare lo script o scegliere di eseguire uno script non firmato senza modificare i criteri di esecuzione.

A partire da PowerShell 3.0, è possibile usare il parametro Stream del Get-Item cmdlet per rilevare i file bloccati perché sono stati scaricati da Internet. Usare il Unblock-File cmdlet per sbloccare gli script in modo che sia possibile eseguirli in PowerShell.

Per altre informazioni, vedere about_Signing, Get-Item e Unblock-File.

Nota

Altri metodi di download dei file potrebbero non contrassegnare i file come provenienti dalla zona Internet. Di seguito sono riportati alcuni esempi:

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

Criteri di esecuzione in Windows Server Core e Window Nano Server

Quando PowerShell 6 viene eseguito in Windows Server Core o Windows Nano Server in determinate condizioni, i criteri di esecuzione possono non riuscire con l'errore seguente:

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShell usa le API in Windows Desktop Shell (explorer.exe) per convalidare la zona di un file di script. Windows Shell non è disponibile in Windows Server Core e Windows Nano Server.

È anche possibile ottenere questo errore in qualsiasi sistema Windows se Windows Desktop Shell non è disponibile o non risponde. Ad esempio, durante l'accesso, uno script di accesso di PowerShell potrebbe avviare l'esecuzione prima che Windows Desktop sia pronto, causando un errore.

L'uso di un criterio di esecuzione di ByPass o AllSigned non richiede un controllo zona che evita il problema.

Vedi anche