Domanda

Ho scritto un semplice file batch come script PowerShell e ricevo errori durante l'esecuzione.

È in una directory degli script nel mio percorso.

Cannot be loaded because the execution of scripts is disabled on this system. 
please see "get-help about-signing".

Ho cercato nella guida, ma è poco utile.

È stato utile?

Soluzione

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

Prova a digitare questo:

set-executionpolicy remotesigned

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

Quindi prova a eseguire nuovamente lo script.

Altri suggerimenti

Devi correre 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.

Utilizzo:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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

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

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

Cioè, ho aggiunto il -executionpolicy bypass al modo in cui ho richiamato lo script.

Funzionava su Windows 7 Service Pack 1.Sono nuovo in PowerShell, quindi potrebbero esserci delle avvertenze di cui non sono a conoscenza.

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

Ecco cosa sto usando adesso.Questo mi impedisce di eseguire accidentalmente lo script facendo clic su di esso.Quando lo eseguo nello scheduler aggiungo un argomento:"programmatore" 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%
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Il comando precedente 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.

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

.\scriptname.ps1

Il comando set-executionpolicy unrestricted consentirà a qualsiasi script creato di essere eseguito come utente connesso.Assicurati solo di reimpostare la policy di esecuzione su Signed utilizzando il file set-executionpolicy signed comando prima di disconnettersi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top