Pregunta

Escribí un archivo por lotes simple como un script de PowerShell y recibo errores cuando se ejecuta.

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 poco útil.

¿Fue útil?

Solución

Podría ser el nivel de seguridad predeterminado de PowerShell, que (IIRC) solo ejecutará scripts firmados.

Intenta escribir esto:

set-executionpolicy remotesigned

Esto le indicará a PowerShell que permita la ejecución de scripts no firmados locales (es decir, en una unidad local).

Luego intente ejecutar su script nuevamente.

Otros consejos

necesitas correr 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.

Usar:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Utilice siempre el comando anterior para habilitar la ejecución de PowerShell en la sesión actual.

Pude evitar este error invocando PowerShell de esta manera:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

Es decir, agregué el -executionpolicy bypass a la forma en que invoqué el guión.

Esto funcionó en Windows 7 Service Pack 1.Soy nuevo en PowerShell, por lo que podría haber advertencias al hacerlo que desconozco.

[Editar 2017-06-26] Continué usando esta técnica en otros sistemas, incluidos Windows 10 y Windows 2012 R2, sin problemas.

Esto es lo que estoy usando ahora.Esto evita que ejecute accidentalmente el script al hacer clic en él.Cuando lo ejecuto en el programador agrego un argumento:"programador" y eso omite el mensaje.

Esto también detiene la ventana al final para que pueda ver el resultado 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%
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.

También vale la pena saber que es posible que deba incluir .\ delante del nombre del script.Por ejemplo:

.\scriptname.ps1

El comando set-executionpolicy unrestricted permitirá que cualquier script que cree se ejecute como el usuario que inició sesión.Sólo asegúrese de volver a establecer la configuración de la política de ejecución en firmada usando el set-executionpolicy signed comando antes de cerrar sesión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top