Informazioni_sulle_Politiche_di_Esecuzione

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à consente di impedire 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 un'impostazione di Criteri di gruppo per impostare i criteri di esecuzione per computer e utenti.

I criteri di esecuzione per il computer locale e l'utente corrente vengono archiviati nei file di configurazione di PowerShell. 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 non sono un limite di sicurezza, ma la difesa è approfondita. Ad esempio, gli utenti possono ignorare facilmente un criterio digitando il contenuto dello script nella riga di comando quando non possono eseguire uno script. Al contrario, i criteri di esecuzione consentono agli utenti di impostare regole di base e di impedire loro di violarli involontariamente.

Per altre informazioni sui limiti di sicurezza, vedere la sezione Criteri del servizio disicurezza delle funzionalità di sicurezza di PowerShell.

Nei computer non Windows i criteri di esecuzione predefiniti sono Unrestricted e non possono essere modificati. Il cmdlet Set-ExecutionPolicy è disponibile, ma PowerShell visualizza un messaggio della console che non è supportato. Anche se Get-ExecutionPolicy restituisce le Unrestricted piattaforme non Windows, il comportamento corrisponde Bypass effettivamente perché tali piattaforme non implementano le zone protezione 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.
    • Richiede che tutti gli script e i file di configurazione siano firmati da un autore attendibile, inclusi gli script scritti nel computer locale.
    • Ti chiede conferma prima di eseguire script provenienti da editori che non hai ancora classificato come attendibili o non attendibili.
    • Rischi nell'esecuzione di script firmati, ma maligni.
  • Bypass

    • Non viene bloccato alcun elemento e non sono presenti avvisi o 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

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

    • Criteri di esecuzione predefiniti per i computer Windows.
    • Gli script possono essere eseguiti.
    • 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.
    • 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 cmdlet Unblock-File.
    • Rischi di esecuzione di script non firmati da origini diverse da Internet e script firmati che potrebbero essere dannosi.
  • Restricted

    • Consente singoli comandi, ma non consente script.
    • Impedisce l'esecuzione di tutti i file di script, inclusi i file di formattazione e 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 i criteri di esecuzione in tutti gli ambiti sono Undefined, i criteri di esecuzione effettivi per i client Windows diventano Restricted e per Windows Server diventano RemoteSigned .
  • Unrestricted

    • I criteri di esecuzione predefiniti per i computer non Windows e non possono essere modificati.
    • Gli script non firmati possono essere eseguiti. Esiste il rischio di eseguire script dannosi.
    • 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 e precedenza dei criteri di esecuzione

È possibile impostare un criterio di esecuzione efficace solo in un determinato ambito. Il parametro accetta i valori seguenti:

  • MachinePolicy - Imposta da criteri di gruppo per tutti gli utenti del computer
  • UserPolicy - Imposta da criteri di gruppo per l'utente corrente del computer
  • Process : influisce solo sulla sessione di PowerShell corrente
  • CurrentUser : influisce solo sull'utente corrente
  • LocalMachine - Default ambito che interessa tutti gli utenti del computer

Nota

MachinePolicy e UserPolicy vengono impostati da Criteri di gruppo. Se si tenta di impostare l'ambito su uno di questi valori, PowerShell visualizza un messaggio di errore che indica che l'ambito è impostato da criteri di gruppo e non può essere modificato.

Se i criteri di esecuzione non sono definiti da Criteri di gruppo, i criteri di esecuzione effettivi sono determinati dall'ordine di precedenza come indicato di seguito:

  • Process - Precedenza più alta. 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 - Seconda precedenza più alta. L'impostazione viene archiviata nel file specifico powershell.config.json dell'utente.
  • LocalMachine - Precedenza minima. L'impostazione viene archiviata nel $PSHOME/powershell.config.json file.

Per altre informazioni sul powershell.config.json file, vedere about_PowerShell_Config.

Gestione dei criteri di esecuzione con PowerShell

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

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

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 parametro Scope 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 cmdlet Set-ExecutionPolicy. 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 file di configurazione e rimane effettiva fino a quando non viene modificata nuovamente.

Se si impostano i criteri di esecuzione per l'ambito Process, non viene salvato nel file di configurazione. La politica di esecuzione viene mantenuta fino a quando il processo corrente e i processi figlio vengono chiusi.

Nota

In Windows Vista e versioni successive di Windows, per eseguire comandi che modificano la politica 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>

Per esempio:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Per impostare i criteri di esecuzione in un determinato ambito:

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

Per 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 i criteri 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 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 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 pwsh.exe per impostare i criteri di esecuzione.

Per esempio:

pwsh.exe -ExecutionPolicy AllSigned

I criteri di esecuzione impostati non vengono archiviati nel file di configurazione. Viene invece archiviata nella variabile di ambiente $Env:PSExecutionPolicyPreference. La variabile viene eliminata quando si chiude la sessione in cui è 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 file di configurazione per il computer locale o l'utente corrente. Tuttavia, non ha la precedenza sui criteri di esecuzione impostati usando Criteri di gruppo.

Usare Criteri di gruppo per gestire i criteri di esecuzione

È possibile utilizzare l'impostazione dei Criteri di gruppo Attiva l'esecuzione di script per gestire i criteri di esecuzione dei computer nella vostra impresa. L'impostazione di Criteri di gruppo sostituisce i criteri di esecuzione impostati in PowerShell in tutti gli ambiti.

Di seguito sono riportate le impostazioni dei criteri di Attiva esecuzione script:

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

  • Se si abilita Attiva esecuzione script, è possibile selezionare una politica di esecuzione. Le impostazioni di 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 firmati remoti RemoteSigned
    Consenti solo script firmati AllSigned
  • Se Attiva l'esecuzione di script non è configurato, non ha alcun effetto. I criteri di esecuzione impostati in PowerShell sono efficaci.

I PowerShellCoreExecutionPolicy.adm file e PowerShellCoreExecutionPolicy.admx aggiungono i criteri Attiva esecuzione script ai nodi Configurazione computer e Configurazione utente nell'Editor Criteri di gruppo nel percorso seguente:

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.

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, che include 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 cmdlet per rilevare i file bloccati perché sono stati scaricati da Internet. Usare il cmdlet Unblock-File per sbloccare gli script in modo che sia possibile eseguirli in PowerShell.

Per ulteriori informazioni, vedere about_Signing, Get-Iteme 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. La shell Windows 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.

Vedere anche