¿Por qué no se ejecutan mis scripts de PowerShell?


103

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 ruta. Este es el error que obtengo:

No se puede cargar porque la ejecución de scripts está deshabilitada en este sistema. Consulte "Obtenga ayuda sobre la firma".

Busqué la ayuda, pero es menos que útil.

Respuestas:


102

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

Intente escribir esto:

set-executionpolicy remotesigned

Eso le dirá a PowerShell que permita la ejecución de scripts locales (es decir, en una unidad local) sin firmar.

Luego intente ejecutar su script nuevamente.


5
Debe ejecutar Powershell con privilegios de administrador, ¡al menos en Windows 8!
ComFreek

1
Y también debe ejecutar el script de PowerShell con privilegios administrativos en Windows 7.
Rod

14
Esta es una respuesta bastante aterradora. Por un lado, cambia permanentemente el nivel de seguridad predeterminado de Powershell de formas posiblemente indeseables (e inseguras). Por otro lado, ni siquiera explica adecuadamente que los scripts remotos firmados y los scripts locales sin firmar, pero no los scripts remotos sin firmar, que Chocolatey ocasionalmente requiere, recibirán privilegios de ejecución. La mayoría de los usuarios probablemente quieran esto y esto en su lugar.
Cecil Curry

1
Si bien la preocupación de Cecil por algunas debilidades en la respuesta es justa, quería señalar algunas cosas. 1) Sus dos enlaces parecen abrir la misma página para mí. 2) Si desea que los scripts simplemente se ejecuten, es probable que establecer la política de ejecución siga siendo el camino a seguir, y posiblemente no esté relacionado con OP: 3) parece que la mejor política es para los scripts de inicio, especifique la política de ejecución y el alcance en la línea de comando ejecutando el script, y para iniciar sesión, establezca la configuración de sesión según sea necesario. Si desea una alta seguridad durante la sesión de Windows pero reducida para el inicio de sesión, querrá matizar el orden de su script.
omJohn8372

Para one-shots, encuentro que la respuesta de Ankur a continuación que define una excepción temporal para la instancia de PowerShell en ejecución es la más útil.
Florenz Kley

79

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.

3
¿Cuál es el valor de ExecutionPolicy predeterminado en el que Windows establece una nueva instalación?
Matthew Lock

5
@MatthewLock Restrictedes la política predeterminada. Leer más
Nadeem_MK

24

Utilizar:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

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


this + superuser.com/questions/612409/… + enlace directo = perfección
Q20

16

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 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] Seguí 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 haciendo clic en él. Cuando lo ejecuto en el programador, agrego un argumento: "programador" y eso pasa por alto el indicador.

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%

Esto es lo que utiliza chocolatey para descargar e instalar chocolatey
icc97

Intenté ejecutar el comando Set-ExecutionPolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1 y recibí un mensaje de error. No existe la opción -File para este comando.
David Spector

Oh ya veo. Debe crear un acceso directo que contenga el comando powershell -executionpolicy bypass -File C: \ Users \ david \ Desktop \ test.ps1. El comando test.ps1 se ejecuta incluso cuando se ha dado el comando global seguro Set-ExecutionPolicy Restricted. Espero que esta información básica ayude a alguien.
David Spector

5
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.

5

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

.\scriptname.ps1

1

El comando set-executionpolicy unrestrictedpermitirá que cualquier script que cree se ejecute como el usuario que inició sesión. Solo asegúrese de volver a establecer la configuración de la política de ejecución en firmado con el set-executionpolicy signedcomando antes de cerrar la sesión.


set-executionpolicy signedda, Cannot bind parameter 'ExecutionPolicy'etc.
JinSnow

0

En Windows 10: haga clic en cambiar la propiedad de seguridad de myfile.ps1 y cambie "permitir acceso" haciendo clic con el botón derecho en / properties en myfile.ps1

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.