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 altre 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 i 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 interessa tutti gli utenti che usano il computer. Per modificare i criteri di esecuzione per LocalMachine
, avviare PowerShell con Esegui come amministratore.
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 in uso 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 un 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 un Criteri di gruppo. Il Restricted
criterio viene scritto nell'hive HKEY_LOCAL_MACHINE
del 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 HKLM:
percorso del 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 diventa AllSigned
.
Esempio 5: Rimuovere i criteri di esecuzione per l'utente corrente
In questo esempio viene illustrato 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
L'ambito Process
interessa solo la sessione corrente di 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.
È consigliabile 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 corrente di PowerShell.
RemoteSigned Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by
' 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 la conferma dell'utente 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 avvvisi né prompt.Default
. Imposta i criteri di esecuzione predefiniti.Restricted
per i client Windows oRemoteSigned
per i server Windows.RemoteSigned
. Richiede che tutti gli script e i file di configurazione scaricati da Internet siano firmati da un autore attendibile. Criteri di esecuzione predefiniti per i computer Windows Server.Restricted
. Non carica i file di configurazione o esegue script. Criteri di esecuzione predefiniti per i computer client Windows.Undefined
. Nessun criterio di esecuzione è impostato per l'ambito. Rimuove un criterio di esecuzione assegnato da un ambito non impostato da un Criteri di gruppo. Se i criteri di esecuzione in tutti gli ambiti sonoUndefined
, il criterio di esecuzione effettivo è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 a 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
- Impostato da un Criteri di gruppo per tutti gli utenti del computerUserPolicy
- Impostare per un Criteri di gruppo per l'utente corrente del computerProcess
- Influisce solo sulla sessione di PowerShell correnteLocalMachine
- Ambito predefinito che influisce su tutti gli utenti del computerCurrentUser
- Influisce solo sull'utente corrente
L'ambito Process
influisce solo sulla sessione di PowerShell corrente. I criteri di esecuzione vengono salvati nella variabile $env:PSExecutionPolicyPreference
di ambiente anziché nel Registro di sistema. Quando la sessione di PowerShell viene chiusa, la variabile e il valore vengono eliminati.
I criteri di esecuzione per l'ambito vengono scritti nell'hive CurrentUser
HKEY_LOCAL_USER
del Registro di sistema .
I criteri di esecuzione per l'ambito vengono scritti nell'hive LocalMachine
HKEY_LOCAL_MACHINE
del 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 l'esito in caso di 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
È possibile inviare tramite pipe un oggetto criteri di esecuzione a questo cmdlet.
È 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 un Criteri di gruppo, anche se la preferenza dell'utente è più restrittiva rispetto ai criteri.
Se il Criteri di gruppo Attiva esecuzione script è abilitato per il computer o l'utente, la preferenza utente viene salvata, ma non è efficace. PowerShell visualizza un messaggio che spiega il conflitto.