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 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 in PowerShell non sono un sistema di sicurezza che limita le azioni degli utenti. Ad esempio, gli utenti possono facilmente bypass usare 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.
Nei computer non Windows i default criteri di esecuzione sono Unrestricted e non possono essere modificati. 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
- Imposta i default criteri di esecuzione.
- Per Client Windows:
- RemoteSigned per i server Windows.
RemoteSigned
- Criteri default di esecuzione 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
- Criteri default di esecuzione 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
- Nessun criterio di esecuzione impostato nell'oggetto corrente scope.
- 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
- I default criteri di esecuzione per i computer non Windows e non possono essere modificati.
- 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 .
Criteri di esecuzione scope
È possibile impostare un criterio di esecuzione efficace solo in un particolare scopeoggetto .
I valori validi per Scope sono MachinePolicy, UserPolicy, Process, CurrentUser e LocalMachine. LocalMachine è l'oggetto quando default si imposta un criterio 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
L'unico Processscope effetto sulla sessione corrente di PowerShell. I criteri di esecuzione vengono salvati nella variabile
$env:PSExecutionPolicyPreference
di ambiente , anziché nel file di configurazione. La variabile e il relativo valore vengono eliminati alla chiusura della sessione corrente.CurrentUser
I criteri di esecuzione influiscono solo sull'utente corrente. Viene archiviato nel file di configurazione CurrentUser .
LocalMachine
I criteri di esecuzione influiscono su tutti gli utenti nel computer corrente. Viene archiviato nel file di configurazione AllUsers .
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 particolare scopeoggetto , usare il Scope parametro di Get-ExecutionPolicy
.
Ad esempio, il comando seguente ottiene i criteri di esecuzione per CurrentUserscope:
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 file di configurazione e rimane effettiva fino a quando non viene modificata di nuovo.
Se si impostano i criteri di esecuzione per , Processscopenon viene salvato nel file di configurazione. I criteri di esecuzione vengono mantenuti fino alla chiusura dei processi figlio e correnti process .
Nota
In Windows Vista e versioni successive di Windows eseguire comandi che modificano i criteri di esecuzione per il computer locale, LocalMachinescope, 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 particolare scopeoggetto :
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 per un particolare scope, 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 oggetto Scope:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Se non vengono impostati criteri di esecuzione in alcun scopeoggetto , i criteri di esecuzione effettivi sono Restricted, ovvero per default 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 file di configurazione. 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 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 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.