La maggior parte delle risposte esistenti spiega il come , ma pochissimi spiegano il perché . E prima di andare in giro eseguendo codice da estranei su Internet, in particolare codice che disabilita le misure di sicurezza, dovresti capire esattamente cosa stai facendo. Quindi ecco un po 'più di dettagli su questo problema.
Dalla pagina Politiche di esecuzione di TechNet :
I criteri di esecuzione di Windows PowerShell consentono di determinare le condizioni in base alle quali Windows PowerShell carica i file di configurazione ed esegue gli script.
I vantaggi di cui sono elencati in PowerShell Basics - Execution Policy and Code Signing sono:
- Controllo dell'esecuzione : controlla il livello di attendibilità per l'esecuzione degli script.
- Comando Highjack - Impedisci l'iniezione di comandi nel mio percorso.
- Identità : lo script è stato creato e firmato da uno sviluppatore di cui mi fido e / o è firmato con un certificato di un'autorità di certificazione di cui mi fido.
- Integrità : gli script non possono essere modificati da malware o utenti malintenzionati.
Per verificare l'attuale politica di esecuzione, è possibile eseguire Get-ExecutionPolicy
. Ma probabilmente sei qui perché vuoi cambiarlo.
Per fare ciò Set-ExecutionPolicy
eseguirai il cmdlet.
Avrai due decisioni importanti da prendere quando aggiorni la politica di esecuzione.
Tipo di politica di esecuzione:
Restricted
† - Nessuno script locale, remoto o scaricato può essere eseguito sul sistema.
AllSigned
- Tutti gli script eseguiti devono essere firmati digitalmente.
RemoteSigned
- Tutti gli script remoti (UNC) o scaricati devono essere firmati.
Unrestricted
- Non è richiesta alcuna firma per qualsiasi tipo di script.
Portata del nuovo cambiamento
LocalMachine
† - I criteri di esecuzione riguardano tutti gli utenti del computer.
CurrentUser
- La politica di esecuzione riguarda solo l'utente corrente.
Process
- I criteri di esecuzione riguardano solo il processo corrente di Windows PowerShell.
† = Predefinito
Ad esempio : se si desidera modificare il criterio in RemoteSigned solo per CurrentUser, è necessario eseguire il comando seguente:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Nota : per modificare i criteri di esecuzione, è necessario eseguire PowerShell come amministratore . Se si è in modalità normale e si tenta di modificare il criterio di esecuzione, verrà visualizzato il seguente errore:
L'accesso alla chiave di registro "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell" è negato. Per modificare i criteri di esecuzione per l'ambito predefinito (LocalMachine), avviare Windows PowerShell con l'opzione "Esegui come amministratore".
Se si desidera rafforzare le restrizioni interne sui propri script che non sono stati scaricati da Internet (o almeno non contengono i metadati UNC), è possibile forzare il criterio per eseguire solo script firmati. Per firmare i tuoi script, puoi seguire le istruzioni sull'articolo di Scott Hanselman su Firma degli script PowerShell .
Nota : è probabile che molte persone ottengano questo errore ogni volta che aprono Powershell perché la prima cosa che PS tenta di fare all'avvio è eseguire lo script del profilo utente che configura l'ambiente come preferisci.
Il file si trova in genere in:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
È possibile trovare la posizione esatta eseguendo la variabile PowerShell
$profile
Se non c'è nulla di cui ti preoccupi nel profilo e non vuoi agitarti con le tue impostazioni di sicurezza, puoi semplicemente cancellarlo e PowerShell non troverà nulla che non possa eseguire.