help - ¿Por qué mis scripts de Powershell no se ejecutan?
script en powershell (7)
Escribí un archivo por lotes simple como un script de PowerShell, y recibo errores cuando se ejecutan.
Está en un directorio de scripts en mi camino.
Cannot be loaded because the execution of scripts is disabled on this system.
please see "get-help about-signing".
Miré en la ayuda, pero es menos que útil.
El comando set-executionpolicy unrestricted
permitirá que cualquier secuencia de comandos que cree se ejecute como el usuario que set-executionpolicy unrestricted
sesión. Solo asegúrese de establecer la configuración de la política de ejecución para que se firme usando el comando set-executionpolicy signed
antes de cerrar la sesión.
Podría ser el nivel de seguridad predeterminado de PowerShell, que (IIRC) solo ejecutará scripts firmados.
Prueba a escribir esto:
set-executionpolicy remotesigned
Eso le indicará a PowerShell que permita la ejecución de scripts sin firmar locales (es decir, en una unidad local).
Luego intente ejecutar su script nuevamente.
Pude omitir este error invocando a powershell de esta manera:
powershell -executionpolicy bypass -File ./MYSCRIPT.ps1
Es decir, agregué el -executionpolicy bypass
la -executionpolicy bypass
a la forma en que -executionpolicy bypass
el script.
Esto funcionó en Windows 7 Service Pack 1. Soy nuevo en PowerShell, por lo que podría haber advertencias para hacer eso que no conozco.
[Editar 2017-06-26] He seguido utilizando esta técnica en otros sistemas, incluidos Windows 10 y Windows 2012r2 sin problema.
Esto es lo que estoy usando ahora. Esto me impide ejecutar accidentalmente el script haciendo clic en él. Cuando lo ejecuto en el programador agrego un argumento: "planificador" y eso omite el aviso.
Esto también pausa la ventana al final para que pueda ver la salida de 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%
También vale la pena saber que es posible que deba incluir ./
Delante del nombre del script. Por ejemplo:
./scriptname.ps1
necesitas ejecutar 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.
¡Espero que esto ayude!
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
El comando anterior funcionó para mí incluso cuando ocurre el siguiente error:
Access to the registry key ''HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/PowerShell/1/ShellIds/Microsoft.PowerShell'' is denied.
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Siempre use el cmd
anterior para habilitar la ejecución de powershell en la sesión actual.