2010-02-08 18:41:03 +0000 2010-02-08 18:41:03 +0000
305
305

¿Cómo habilitar la ejecución de los scripts de PowerShell?

Cuando intento ejecutar mi script de PowerShell obtengo este error:

El archivo C:\Common\Scripts\hello.ps1 no puede ser cargado porque la ejecución de los scripts está deshabilitada en este sistema. Por favor, vea “get-help about_signing” para más detalles. At line:1 char:13 + .\hello.ps1 <<<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException

Respuestas (10)

451
451
451
2010-02-08 18:44:16 +0000
  1. Inicie Windows PowerShell con la opción “Ejecutar como administrador”. Sólo los miembros del grupo de Administradores del equipo pueden cambiar la política de ejecución.

  2. Habilitar la ejecución de scripts sin firma escribiendo:

Esto permitirá la ejecución de scripts sin firma que se escriban en el equipo local y scripts firmados desde Internet.

Vea también Ejecutar scripts en Microsoft TechNet Library.

91
91
91
2010-02-08 18:43:25 +0000

La Política de Ejecución por Defecto está establecida como restringida, puedes verla escribiendo:

Get-ExecutionPolicy

Deberías escribir lo siguiente para que vaya a modo no restringido:

Set-ExecutionPolicy unrestricted

Espero que esto ayude

66
66
66
2013-01-14 00:46:49 +0000

En mi máquina que uso para desarrollar scripts, usaré -sin restricciones como arriba. Sin embargo, cuando despliegue mis scripts en una máquina de usuario final, sólo llamaré a powershell con el interruptor de política de ejecución:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
21
21
21
2016-09-07 07:06:18 +0000

Podemos obtener el estado de la actual Política de Ejecución por el comando de abajo:

Get-ExecutionPolicy;

Por defecto es Restringido. Para permitir la ejecución de los Scripts de PowerShell necesitamos establecer esta Política de Ejecución como Bypass o Sin restricciones.

Podemos establecer la política para el Usuario Actual como Bypass o Unrestricted usando cualquiera de los siguientes comandos de PowerShell:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

Sin restricciones la política carga todos los archivos de configuración y ejecuta todos los scripts. Si ejecuta un script sin firma que fue descargado de Internet, se le pide permiso antes de que se ejecute.

Mientras que en la política Bypass no se bloquea nada y no hay advertencias o avisos durante la ejecución del script. La política de Bypass ExecutionPolicy es más relajada que la de Unrestricted.

5
5
5
2016-01-21 10:01:36 +0000

Dependiendo de la versión y configuración de Windows, puede tener la siguiente advertencia, incluso en el modo Unrestricted:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

La solución es usar la política de “bypass”, activada con el siguiente comando:

Set-ExecutionPolicy Bypass

Desde la documentación :

Bypass: No hay nada bloqueado y no hay advertencias o avisos.

Esto es obviamente inseguro, por favor entienda los riesgos que implica.

3
3
3
2017-11-29 10:10:20 +0000

Una clave reg con: Editor del Registro de Windows Versión 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\NPolíticas\NMicrosoft\Windows\PowerShell] “EnableScripts”=dword:00000001 “ExecutionPolicy”=“Bypass”

y:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

funciona de hecho también.

1
1
1
2018-12-04 22:06:53 +0000

Por alguna razón el cmdlet PowerShell no permitía la ejecución local a nivel global, sólo para el contexto de usuario local. Por ejemplo, si intentaba iniciar un script de Powershell desde el bash prompt de CygWin, que se ejecuta en su propio contexto de usuario, no se ejecutaba, dando el error “no está firmado digitalmente”. Esto entonces me permitió cambiarlo a ‘Habilitado’ y luego la política de ejecución de “Permitir scripts locales y scripts firmados remotos” y hacer que funcione globalmente sin importar el contexto del usuario.

1
1
1
2019-04-24 14:47:15 +0000

Configurar la política (correctamente) es la mejor opción, pero en mis sistemas gestionados no tengo la posibilidad de cambiar esa política.

*Para mí, la forma más sencilla de cambiar la política es abrir el guión en el “PowerShell ISE”, resaltar el código (o parte del código) a ejecutar y luego hacer clic en el botón “Ejecutar selección” (o usar el atajo F8). *

Esta no es la mejor solución y hace poco por automatizar tareas, pero me permite el uso y utilidad de PowerShell mientras no se ejecuta en mi departamento de IS.

1
1
1
2018-12-15 01:09:31 +0000

La respuesta aceptada es correcta, pero la modificación de la política sólo está disponible para la instancia actualmente en funcionamiento de la Powershell, es decir, una vez que la instancia de la Powershell se cierre. La política será restablecida. Si un usuario reabre otra instancia de Powershell, se aplicará la política por defecto que es Restricted

Para mí, necesito usar la consola de código de VisualStudio y g++ de cygwin para construir cosas. La consola está usando Powershell, con la política por defecto, no se puede hacer nada. Una solución es cambiar la política cada vez que se dispara la consola en la consola de Código de VisualStudio, tal vez un script de cambio de la política.

Soy perezoso, así que otra solución es cuando ejecuto el Powershell en modo de administración, similar a lo que hace la respuesta aceptada. pero con un parámetro extra que cambia los valores en la tabla de Registro. Una vez hecho esto. Otras instancias de Powershell usarán la política RemoteSigned por defecto.

set-executionpolicy remotesigned -Scope CurrentUser

-2
-2
-2
2018-04-05 13:49:49 +0000

La razón por la que la tecla reg funciona, es porque hace exactamente lo que los comandos PS hacen. Los comandos escriben los cambios en las teclas reg. Los comandos son mucho más rápidos y fáciles que crear una clave reg o escarbar en el registro.