Condividi tramite


Set-ExecutionPolicy

Imposta i criteri di esecuzione di PowerShell per i computer Windows.

Sintassi

Set-ExecutionPolicy
   [-ExecutionPolicy] <ExecutionPolicy>
   [[-Scope] <ExecutionPolicyScope>]
   [-Force]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Descrizione

Il Set-ExecutionPolicy cmdlet modifica i criteri di esecuzione di PowerShell per i computer Windows. Per ulteriori informazioni, vedere about_Execution_Policies.

A partire da PowerShell 6.0 per 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.

Un criterio di esecuzione fa parte della strategia di sicurezza di PowerShell. I criteri di esecuzione determinano se è possibile caricare file di configurazione, ad esempio il profilo di PowerShell o eseguire script. Inoltre, se gli script devono essere firmati digitalmente prima di essere eseguiti.

L'ambito Set-ExecutionPolicy predefinito del cmdlet è LocalMachine, che influisce su tutti gli utenti che usano il computer. Per modificare i criteri di esecuzione per LocalMachine, avviare PowerShell con Esegui come Amministrazione istrator.

Per visualizzare i criteri di esecuzione per ogni ambito, usare Get-ExecutionPolicy -List. Per visualizzare i criteri di esecuzione effettivi per la sessione di PowerShell usata Get-ExecutionPolicy senza parametri.

Esempio

Esempio 1: Impostare un criterio di esecuzione

In questo esempio viene illustrato come impostare i criteri di esecuzione per il computer locale.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

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

Il Set-ExecutionPolicy cmdlet usa il parametro ExecutionPolicy per specificare i RemoteSigned criteri. Il parametro Scope specifica il valore di ambito predefinito, LocalMachine. Per visualizzare le impostazioni dei criteri di esecuzione, usare il Get-ExecutionPolicy cmdlet con il parametro List .

Esempio 2: Impostare un criterio di esecuzione in conflitto con criteri di gruppo

Questo comando tenta di impostare i LocalMachine criteri di esecuzione dell'ambito su Restricted. LocalMachine è più restrittivo, ma non è il criterio efficace perché è in conflitto con criteri di gruppo. Il Restricted criterio viene scritto nell'hive HKEY_LOCAL_MACHINEdel Registro di sistema.

PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine

Set-ExecutionPolicy : PowerShell updated your local preference successfully, but the setting is
overridden by the Group Policy applied to your system. Due to the override, your shell will retain
its current effective execution policy of "AllSigned". Contact your Group Policy administrator for
more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted

PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds

Name                    Property
----                    --------
Microsoft.PowerShell    Path            : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
                        ExecutionPolicy : Restricted
ScriptedDiagnostics     ExecutionPolicy : Unrestricted

Il Set-ExecutionPolicy cmdlet usa il parametro ExecutionPolicy per specificare i Restricted criteri. Il parametro Scope specifica il valore di ambito predefinito, LocalMachine. Il Get-ChildItem cmdlet usa il parametro Path con l'unità per specificare il percorso del HKLM: Registro di sistema.

Esempio 3: Applicare i criteri di esecuzione da un computer remoto a un computer locale

Questo comando ottiene l'oggetto criteri di esecuzione da un computer remoto e imposta i criteri nel computer locale. Get-ExecutionPolicy invia un oggetto Microsoft.PowerShell.ExecutionPolicy nella pipeline. Set-ExecutionPolicy accetta l'input della pipeline e non richiede il parametro ExecutionPolicy .

Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

Il Invoke-Command cmdlet viene eseguito nel computer locale e invia ScriptBlock al computer remoto. Il parametro ComputerName specifica il computer remoto Server01. Il parametro ScriptBlock viene eseguito Get-ExecutionPolicy nel computer remoto. L'oggetto Get-ExecutionPolicy viene inviato alla pipeline all'oggetto Set-ExecutionPolicy. Set-ExecutionPolicy applica i criteri di esecuzione all'ambito predefinito del computer locale, LocalMachine.

Esempio 4: Impostare l'ambito per un criterio di esecuzione

In questo esempio viene illustrato come impostare un criterio di esecuzione per un ambito specificato, CurrentUser. L'ambito CurrentUser interessa solo l'utente che imposta questo ambito.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

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

Set-ExecutionPolicy usa il parametro ExecutionPolicy per specificare i AllSigned criteri. Il parametro Scope specifica l'oggetto CurrentUser. Per visualizzare le impostazioni dei criteri di esecuzione, usare il Get-ExecutionPolicy cmdlet con il parametro List .

I criteri di esecuzione effettivi per l'utente diventano AllSigned.

Esempio 5: Rimuovere i criteri di esecuzione per l'utente corrente

Questo esempio mostra come usare i Undefined criteri di esecuzione per rimuovere un criterio di esecuzione per un ambito specificato.

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

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

Set-ExecutionPolicy usa il parametro ExecutionPolicy per specificare i Undefined criteri. Il parametro Scope specifica l'oggetto CurrentUser. Per visualizzare le impostazioni dei criteri di esecuzione, usare il Get-ExecutionPolicy cmdlet con il parametro List .

Esempio 6: Impostare i criteri di esecuzione per la sessione di PowerShell corrente

Ha effetto solo sulla sessione corrente di Windows PowerShell. I criteri di esecuzione vengono salvati nella variabile $env:PSExecutionPolicyPreference di ambiente e vengono eliminati quando la sessione viene chiusa.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process

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

Set-ExecutionPolicy Usa il parametro ExecutionPolicy per specificare i AllSigned criteri. Il parametro Scope specifica il valore Process. Per visualizzare le impostazioni dei criteri di esecuzione, usare il Get-ExecutionPolicy cmdlet con il parametro List .

Esempio 7: Sbloccare uno script per eseguirlo senza modificare i criteri di esecuzione

In questo esempio viene illustrato come i RemoteSigned criteri di esecuzione impediscono l'esecuzione di script non firmati.

Una procedura consigliata consiste nel leggere il codice dello script e verificare che sia sicuro prima di usare il Unblock-File cmdlet . Il Unblock-File cmdlet sblocca gli script in modo che possano essere eseguiti, ma non modifica i criteri di esecuzione.

PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

.\Start-ActivityTracker.ps1 : File .\Start-ActivityTracker.ps1 cannot be loaded.
The file .\Start-ActivityTracker.ps1 is not digitally signed.
The script will not execute on the system.
For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

PS> Unblock-File -Path .\Start-ActivityTracker.ps1

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

Task 1:

Set-ExecutionPolicy Usa il parametro ExecutionPolicy per specificare i RemoteSigned criteri. Il criterio è impostato per l'ambito predefinito, LocalMachine.

Il Get-ExecutionPolicy cmdlet mostra che RemoteSigned è il criterio di esecuzione effettivo per la sessione di PowerShell corrente.

Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by RemoteSigned' perché lo script non è firmato digitalmente.

Per questo esempio, il codice dello script è stato esaminato e verificato come sicuro da eseguire. Il Unblock-File cmdlet usa il parametro Path per sbloccare lo script.

Per verificare che Unblock-File i criteri di esecuzione non siano stati modificati, Get-ExecutionPolicy visualizza i criteri di esecuzione effettivi, RemoteSigned.

Lo script viene Start-ActivityTracker.ps1 eseguito dalla directory corrente. Lo script inizia a essere eseguito perché è stato sbloccato dal Unblock-File cmdlet .

Parametri

-Confirm

Richiede conferma prima di eseguire il cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExecutionPolicy

Specifica i criteri di esecuzione. Se non sono presenti criteri di gruppo e i criteri di esecuzione di ogni ambito sono impostati su Undefined, Restricted diventa il criterio effettivo per tutti gli utenti.

I valori dei criteri di esecuzione accettabili sono i seguenti:

  • AllSigned. Richiede che tutti gli script e i file di configurazione siano firmati da un autore attendibile, inclusi gli script scritti nel computer locale.
  • Bypass. non viene bloccato niente e non vengono visualizzati avvisi né prompt.
  • Default. Nome: Criterio di esecuzione predefinito Restricted per i client Windows o RemoteSigned per i server Windows.
  • RemoteSigned. Richiede che tutti gli script e i file di configurazione scaricati da Internet siano firmati da un autore attendibile. Criterio di esecuzione predefinito per i computer Windows Server.
  • Restricted. Non carica i file di configurazione o esegue script. Criterio di esecuzione predefinito per i computer client Windows.
  • Undefined. Nessun criterio di esecuzione impostato per l'ambito. Rimuove un criterio di esecuzione assegnato da un ambito che non è impostato da criteri di gruppo. Se i criteri di esecuzione in tutti gli ambiti sono Undefined, i criteri di esecuzione effettivi sono Restricted.
  • Unrestricted. A partire da PowerShell 6.0, questo è il criterio di esecuzione predefinito per i computer non Windows e non può essere modificato. carica tutti i file di configurazione ed esegue tutti gli script. Se si esegue uno script non firmato scaricato da Internet, viene richiesta l'autorizzazione prima dell'esecuzione.
Type:ExecutionPolicy
Accepted values:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

Elimina tutte le richieste di conferma. Prestare attenzione con questo parametro per evitare risultati imprevisti.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Scope

Specifica l'ambito interessato da un criterio di esecuzione. L'ambito predefinito è LocalMachine.

I criteri di esecuzione effettivi sono determinati dall'ordine di precedenza come indicato di seguito:

  • 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
  • LocalMachine - Ambito predefinito che interessa tutti gli utenti del computer
  • CurrentUser - Influisce solo sull'utente corrente

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.

I criteri di esecuzione per l'ambito vengono scritti nell'hive CurrentUserHKEY_LOCAL_USERdel Registro di sistema.

I criteri di esecuzione per l'ambito vengono scritti nell'hive LocalMachineHKEY_LOCAL_MACHINEdel Registro di sistema.

Type:ExecutionPolicyScope
Accepted values:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Position:1
Default value:LocalMachine
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

ExecutionPolicy

È possibile inviare tramite pipe un oggetto criteri di esecuzione a questo cmdlet.

String

È possibile inviare tramite pipe una stringa contenente il nome di un criterio di esecuzione a questo cmdlet.

Output

None

Questo cmdlet non restituisce output.

Note

Set-ExecutionPolicy non modifica gli MachinePolicy ambiti e UserPolicy perché sono impostati da Criteri di gruppo.

Set-ExecutionPolicy non esegue l'override di criteri di gruppo, anche se la preferenza utente è più restrittiva rispetto ai criteri.

Se i Criteri di gruppo Attiva esecuzione script sono abilitati per il computer o l'utente, la preferenza utente viene salvata, ma non è efficace. PowerShell visualizza un messaggio che spiega il conflitto.