Perché i miei script PowerShell non vengono eseguiti?
-
08-06-2019 - |
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.
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.