Perché i miei script di PowerShell non sono in esecuzione?


103

Ho scritto un semplice file batch come script PowerShell e ricevo errori quando vengono eseguiti.

È in una directory degli script nel mio percorso. Questo è l'errore che ottengo:

Non può essere caricato perché l'esecuzione degli script è disabilitata su questo sistema. Si prega di vedere "ottenere aiuto sulla firma".

Ho cercato nella guida, ma è meno che utile.

Risposte:


102

Potrebbe essere il livello di sicurezza predefinito di PowerShell, che (IIRC) eseguirà solo script firmati.

Prova a digitare questo:

set-executionpolicy remotesigned

Ciò indicherà a PowerShell di consentire l'esecuzione di script non firmati locali (ovvero su un'unità locale).

Quindi prova a eseguire di nuovo lo script.


5
Devi eseguire Powershell con i privilegi di amministratore, almeno sotto Windows 8!
ComFreek

1
E devi eseguire lo script PowerShell con privilegi amministrativi anche in Windows 7.
Rod

14
Questa è una risposta abbastanza terrificante. Per prima cosa, cambia in modo permanente il livello di sicurezza predefinito di Powershell in modi forse indesiderabili (e non sicuri). Dall'altro, non riesce nemmeno a spiegare adeguatamente che gli script remoti firmati e gli script locali non firmati, ma non gli script remoti non firmati, che Chocolatey richiede occasionalmente, avranno privilegi di esecuzione. La maggior parte degli utenti probabilmente vuole questo e questo invece.
Cecil Curry

1
Sebbene la preoccupazione di Cecil per alcuni punti deboli nella risposta sia giusta, volevo sottolineare alcune cose. 1) I suoi due link sembrano aprire la stessa pagina per me. 2) Se si desidera che gli script vengano eseguiti semplicemente, l'impostazione della politica di esecuzione è probabilmente ancora la strada da percorrere, e forse non correlata a OP: 3) sembra che la politica migliore sia per gli script di avvio, specificare la politica di esecuzione e l'ambito nella riga di comando eseguire lo script e per l'accesso impostare la configurazione della sessione secondo necessità. Se desideri un'elevata sicurezza durante la sessione di Windows ma ridotta per l'accesso, ti consigliamo di sfumare l'ordine degli script.
omJohn8372

Per uno scatto, trovo la risposta di Ankur di seguito che definisce un'eccezione temporanea per l'istanza di PowerShell in esecuzione la più utile.
Florenz Kley

79

Devi eseguire Set-ExecutionPolicy:

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

3
Qual è il valore ExecutionPolicy predefinito su cui Windows imposta una nuova installazione?
Matthew Lock

5
@MatthewLock Restrictedè la politica predefinita. Ulteriori informazioni
Nadeem_MK

24

Uso:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Usa sempre il comando precedente per abilitare l'esecuzione di PowerShell nella sessione corrente.


questo + superuser.com/questions/612409/… + collegamento rapido = perfezione
Q20

16

Sono stato in grado di aggirare questo errore invocando PowerShell in questo modo:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

Cioè, ho aggiunto il -executionpolicy bypassal modo in cui ho invocato lo script.

Questo ha funzionato su Windows 7 Service Pack 1. Sono nuovo di PowerShell, quindi potrebbero esserci delle avvertenze per farlo di cui non sono a conoscenza.

[Modifica 2017-06-26] Ho continuato a utilizzare questa tecnica su altri sistemi, inclusi Windows 10 e Windows 2012 R2, senza problemi.

Ecco cosa sto usando ora. Ciò mi impedisce di eseguire accidentalmente lo script facendo clic su di esso. Quando lo eseguo nello scheduler aggiungo un argomento: "scheduler" e questo ignora il prompt.

Questo mette anche in pausa la finestra alla fine in modo da poter vedere l'output di PowerShell.

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%

Questo è ciò che Chocolatey usa per scaricare e installare Chocolatey
icc97

Ho provato a eseguire il comando Set-ExecutionPolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1 e ho ricevuto un messaggio di errore. Non esiste un'opzione -File per questo comando.
David Spector

Oh, capisco. Devi creare un collegamento contenente il comando powershell -executionpolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1. Il comando test.ps1 viene quindi eseguito anche quando è stato fornito il comando globale sicuro Set-ExecutionPolicy Restricted. Spero che queste informazioni di base aiutino qualcuno.
David Spector

5
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Il comando sopra ha funzionato per me anche quando si verifica il seguente errore:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

5

Inoltre vale la pena sapere che potrebbe essere necessario includerlo .\davanti al nome dello script. Per esempio:

.\scriptname.ps1

1

Il comando set-executionpolicy unrestrictedconsentirà a qualsiasi script creato di essere eseguito come utente connesso. Assicurati solo di impostare nuovamente la policy di esecuzione su firmato utilizzando il set-executionpolicy signedcomando prima di disconnetterti.


set-executionpolicy signedCannot bind parameter 'ExecutionPolicy'ecc.
JinSnow

0

Su Windows 10: fai clic su modifica proprietà di sicurezza di miofile.ps1 e modifica "consenti accesso" facendo clic con il pulsante destro del mouse su / proprietà su miofile.ps1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.