about_Execution_Policies

Descrizione breve

Descrive i criteri di esecuzione di Windows PowerShell e illustra come gestirli.

Descrizione lunga

Suggerimenti: 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 gli script Questa funzionalità aiuta a prevenire l'esecuzione di script dannosi.

In un computer Windows è possibile impostare criteri di esecuzione per il computer locale, per l'utente corrente o per una determinata sessione. È 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 determinata sessione vengono archiviati solo in memoria e vengono persi quando la sessione viene chiusa.

I criteri di esecuzione in PowerShell non sono un sistema di sicurezza che limita le azioni degli utenti. Ad esempio, se gli utenti non riescono a eseguire uno script, possono facilmente ignorare un criterio immettendo il contenuto dello script nella riga di comando. Al contrario, i criteri di esecuzione consentono agli utenti di impostare regole di base e di impedire loro di violarli involontariamente.

Criterio di esecuzione predefinito per i computer non Windows, che non può essere modificato. Il Set-ExecutionPolicy cmdlet è disponibile, ma PowerShell visualizza un messaggio della console che non è supportato. Anche se restituisce Get-ExecutionPolicy le Unrestricted piattaforme non Windows, il comportamento corrisponde Bypass effettivamente perché tali 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

    • Lo script viene eseguito una volta
    • è necessario che tutti gli script e i file di configurazione siano firmati da un autore attendibile, compresi quelli creati nel computer locale.
    • Avvisa l'utente prima di eseguire script di autori 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 avvisi 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 che ha un proprio modello di sicurezza.
  • Default

    • Nome: Criterio di esecuzione predefinito
    • Per Client Windows:
    • RemoteSigned per i server Windows.
  • RemoteSigned

    • Criterio di esecuzione predefinito per i computer Windows Server.
    • Lo script viene eseguito una volta
    • Richiede una firma digitale da un autore attendibile su script e file di configurazione scaricati da Internet, che include programmi di posta elettronica e di messaggistica istantanea.
    • Questa impostazione non richiede la presenza di firme digitali sugli script scritti nel computer locale.
    • Esegue script scaricati da Internet e non firmati, se gli script vengono sbloccati, ad esempio usando il Unblock-File cmdlet .
    • Rischi di esecuzione di 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 l'esecuzione di singoli comandi, ma non consente script.
    • Impedisce l'esecuzione di tutti i file di script, inclusi la formattazione e i file di configurazione (.ps1xml), i file di script del modulo (.psm1) e i profili di PowerShell (.ps1).
  • Undefined

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

    • Criterio di esecuzione predefinito per i computer non Windows, che non può essere modificato.
    • Gli script non firmati possono essere eseguiti. Esiste il rischio di eseguire script dannosi.
    • Questo criterio avvisa l'utente prima di eseguire script e file di configurazione che non provengono dall'area Intranet locale.

    Nota

    Nei sistemi che non distinguono i percorsi UNC (Universal Naming Convention) dai percorsi Internet, gli script identificati da un percorso UNC potrebbero non essere autorizzati a essere eseguiti 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, Process, CurrentUser e LocalMachine. LocalMachine è l'impostazione predefinita quando si impostano criteri di esecuzione.

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

Per altre informazioni, vedere Uso del cmdlet Set-ExecutionPolicy.

  • MachinePolicy

    I criteri di esecuzione impostati da Criteri di gruppo per tutti gli utenti del computer.

  • UserPolicy

    I criteri di esecuzione impostati da Criteri di gruppo per l'utente corrente del computer.

  • Process

    Ha effetto solo sulla sessione corrente di Windows PowerShell. I criteri di esecuzione vengono salvati nella variabile $env:PSExecutionPolicyPreferencedi ambiente anziché nel Registro di sistema. La variabile e il relativo valore vengono eliminati alla chiusura della sessione corrente.

  • CurrentUser

    I criteri di esecuzione influiscono solo sull'utente corrente. Viene archiviata nella sottochiave del Registro di sistema HKEY_CURRENT_Uedizione Standard R.

  • LocalMachine

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

Impostare i criteri di esecuzione di Windows PowerShell.

Per identificare i criteri di esecuzione effettivi per la sessione di PowerShell corrente, usare il cmdlet seguente:

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 in ordine di precedenza:

Get-ExecutionPolicy -List

L'output è simile ai risultati seguenti:

        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

Impostare i criteri di esecuzione

Per modificare i criteri di esecuzione di PowerShell nel computer Windows, usare il Set-ExecutionPolicy cmdlet . Le modifiche saranno effettive immediatamente. Non è necessario riavviare Windows 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 fino a quando 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 alla chiusura del processo corrente e dei processi figlio.

Nota

In Windows Vista e versioni successive di Windows, per eseguire comandi che modificano i criteri di esecuzione per il computer locale, 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.

Impostare i criteri di esecuzione

Per rimuovere i criteri di esecuzione da un ambito specifico, impostare i criteri di esecuzione per tale ambito 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 oggetto Scope:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Se non sono impostati criteri di esecuzione in alcun ambito, i criteri di esecuzione effettivi sono Restricted, ovvero l'impostazione predefinita per i client Windows.

Impostare criteri diversi 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 dalla 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 archiviata nella $env:PSExecutionPolicyPreference variabile di ambiente. La variabile viene eliminata quando si chiude la sessione in cui è impostato il criterio. Non è possibile modificare i criteri di esecuzione del processo modificando la 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 sui criteri di esecuzione impostati usando Criteri di gruppo.

Usare i criteri di gruppo per gestire i criteri di esecuzione

È possibile usare l'impostazione Attiva Criteri di gruppo per l'esecuzione di script 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 esecuzione con restrizioni.

  • 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 ulteriori 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: LocalMachine
Execution Policy: CurrentUser

Gestire gli 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 non firmati scaricati da Internet, inclusi i programmi di posta elettronica e di 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 da poterli eseguire 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 dall'area Internet. Alcuni esempi includono:

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

Criteri di esecuzione in Windows Server Core e Windows Nano Server

Quando PowerShell 6 viene eseguito in Windows Server Core o Windows Nano Server in determinate condizioni, i criteri di esecuzione possono avere esito negativo 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