2010-02-08 18:41:03 +0000 2010-02-08 18:41:03 +0000
305
305

Come abilitare l'esecuzione degli script PowerShell?

Quando provo ad eseguire il mio script PowerShell ottengo questo errore:

File C:\Common\Scripts\hello.ps1 non può essere caricato perché l'esecuzione degli script è disabilitata su questo sistema. Vedi “get-help about_signing” per maggiori dettagli. Alla linea:1 char:13 + .\hello.ps1 <<<<<<<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException

Risposte (10)

451
451
451
2010-02-08 18:44:16 +0000
    1. Avviare PowerShell di Windows con l'opzione “Esegui come amministratore”. Solo i membri del gruppo degli amministratori del computer possono modificare la politica di esecuzione.
    1. Abilitare l'esecuzione di script non firmati inserendo:

Questo permetterà di eseguire script non firmati che si scrivono sul computer locale e script firmati da Internet.

Vedere anche Esecuzione di script alla Microsoft TechNet Library.

91
91
91
2010-02-08 18:43:25 +0000

La Default Execution Policy è impostata su restricted, la si può vedere digitando:

Get-ExecutionPolicy
``` ```
Set-ExecutionPolicy unrestricted

Si dovrebbe digitare quanto segue per farla passare in modalità unrestricted:

&001 &001

Spero che questo aiuti

66
66
66
2013-01-14 00:46:49 +0000

Sulla mia macchina che uso per elaborare gli script, userò -senza restrizioni come sopra. Quando distribuisco i miei script, tuttavia, su una macchina dell'utente finale, mi limiterò a chiamare powershell con l'interruttore -executionpolicy:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
21
21
21
2016-09-07 07:06:18 +0000

Possiamo ottenere lo stato dell'attuale ExecutionPolicy con il comando sottostante:

Get-ExecutionPolicy;
``` ```
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

Per impostazione predefinita è Restrizione. Per consentire l'esecuzione degli script PowerShell dobbiamo impostare questa ExecutionPolicy come Bypass o Unrestricted.

Possiamo impostare la policy per l'utente corrente come Bypass o Unrestricted utilizzando uno qualsiasi dei seguenti comandi PowerShell:

&001

Unrestricted policy carica tutti i file di configurazione ed esegue tutti gli script. Se si esegue uno script non firmato che è stato scaricato da Internet, viene richiesta l'autorizzazione prima che venga eseguito.

Mentre nella politica Bypass, non viene bloccato nulla e non ci sono avvisi o richieste durante l'esecuzione degli script. Bypass ExecutionPolicy è più rilassata di Unrestricted.

5
5
5
2016-01-21 10:01:36 +0000

A seconda della versione e della configurazione di Windows, si può avere il seguente avviso, anche in modalità Unrestricted:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

La soluzione è quella di utilizzare la politica di “bypass”, abilitata con il seguente comando:

Set-ExecutionPolicy Bypass
``` &001 


Dalla [ documentazione ](https://technet.microsoft.com/en-us/library/hh849812.aspx): 


> Bypass: Nulla è bloccato e non ci sono avvertimenti o prompt. 


Questo è ovviamente insicuro, si prega di comprendere i rischi che comporta.
3
3
3
2017-11-29 10:10:20 +0000

Una chiave reg con: Windows Registry Editor Versione 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell] “EnableScripts”= parola chiave:0000000001 “ExecutionPolicy”=“Bypass”

e:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

funziona davvero.

1
1
1
2018-12-04 22:06:53 +0000

Per qualche ragione il cmdlet PowerShell non ha consentito l'esecuzione locale a livello globale, solo per il contesto utente locale. Se avessi provato ad avviare uno script PowerShell dall'interno del bash prompt di CygWin, per esempio, che funziona nel proprio contesto utente, non sarebbe stato eseguito, dando l'errore “non è firmato digitalmente”. La risposta è stata quella di andare nel Local Group Policy Editor -> Local Computer Policy -> Modelli amministrativi -> Componenti Windows -> Windows PowerShell e fare doppio clic su ‘Accendi l'esecuzione dello script’. Questo mi ha permesso di cambiarlo in ‘Abilitato’ e poi la politica di esecuzione di “Consenti script locali e script firmati in remoto” e farla funzionare a livello globale indipendentemente dal contesto dell'utente.

1
1
1
2019-04-24 14:47:15 +0000

Impostare la policy (correttamente) è la scelta migliore, ma sui miei sistemi gestiti non ho la possibilità di cambiare quella policy.

*Per me, il modo più semplice per cambiare la policy è aprire lo script nel “PowerShell ISE”, evidenziare il codice (o parte del codice) da eseguire e poi cliccare sul pulsante “Esegui selezione” (o usare la scorciatoia F8). *

Questa non è la soluzione migliore e fa poco per automatizzare i compiti, ma mi permette l'uso e l'utilità di PowerShell senza dover eseguire il mio reparto IS.

1
1
1
2018-12-15 01:09:31 +0000

La risposta accettata è giusta, ma la modifica della policy è disponibile solo per l'istanza di Powershell attualmente in esecuzione, vale a dire una volta che l'istanza di Powershell è chiusa. La policy verrà reimpostata. Se un utente riapre un'altra istanza di Powershell, verrà applicata la policy di default che è Restricted

Per me, ho bisogno di usare la console Code di VisualStudio e g+++ di cygwin per costruire le cose. La console sta usando Powershell, con la policy di default non si può fare nulla. Una soluzione è cambiare la policy ogni volta che la console viene licenziata in VisualStudio Code console, magari uno script di modifica della policy.

Sono pigro, quindi un'altra soluzione è quando eseguo la Powershell in modalità admin, simile a quanto fa la risposta accettata. ma con un parametro extra che cambia i valori nella tabella del Registro. Una volta fatto. Altre istanze di Powershell utilizzeranno la policy RemoteSigned per default.

set-executionpolicy remotesigned -Scope CurrentUser

-2
-2
-2
2018-04-05 13:49:49 +0000

La ragione per cui il tasto reg funziona, è perché sta facendo esattamente quello che fanno i comandi PS. I comandi scrivono le modifiche ai tasti reg. I comandi sono molto più rapidi e facili da eseguire rispetto alla creazione di una chiave di registro o allo scavare nel registro.