Cuando intento ejecutar mi script de PowerShell me sale este error:
El archivo C: \ Common \ Scripts \ hello.ps1 no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema. Consulte "get-help about_signing" para obtener más detalles.
En la línea: 1 char: 13
+. \ Hello.ps1 <<<<
+ CategoryInfo: NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId: RuntimeException
fuente
LocalMachine
. Para establecer otros ámbitos (CurrentUser
oProcess
), pase-Scope
explícitamente.La Política de ejecución predeterminada está configurada como restringida, puede verla escribiendo:
Debe escribir lo siguiente para que pase al modo sin restricciones:
Espero que esto ayude
fuente
RemoteSigned
no bloquea copiar y pegar, no bloquea git u otros métodos de descarga que no sean IE, ¿para qué sirve? Dilo conmigo: "¡absolutamente nada!". Creo que exigir que los scripts se firmen con un certificado de firma de código de $ 100 es inútil, estúpido y niega todo lo bueno que un lenguaje de script decente puede hacer para Windows. Dicho esto, si el camino a seguir es lograr que los usuarios comprendan lo que están haciendo para usar los scripts de PS, entonces es posible que tengamos demasiadas cosas ... Nahhhh, eso nunca funcionará ;-)En mi máquina que uso para scripts de desarrollo, usaré -restricted como arriba. Sin embargo, cuando implemente mis scripts en una máquina de usuario final, solo llamaré a powershell con el modificador -executionpolicy:
fuente
Podemos obtener el estado de ExecutionPolicy actual mediante el siguiente comando:
Por defecto está restringido . Para permitir la ejecución de scripts de PowerShell, necesitamos establecer esta ExecutionPolicy como Bypass o Unrestricted .
Podemos establecer la política para el Usuario actual como
Bypass
oUnrestricted
usando cualquiera de los siguientes comandos de PowerShell:La política sin restricciones carga todos los archivos de configuración y ejecuta todos los scripts. Si ejecuta un script sin firmar que se descargó de Internet, se le solicitará permiso antes de que se ejecute.
Mientras que en la política de omisión , nada está bloqueado y no hay advertencias ni avisos durante la ejecución del script. Bypass ExecutionPolicy es más relajado que Unrestricted.
fuente
Dependiendo de la versión y configuración de Windows, puede tener la siguiente advertencia, incluso en
Unrestricted
modo:La solución es utilizar la política de "omisión", habilitada con el siguiente comando:
De la documentación :
Esto es obviamente inseguro, por favor entienda los riesgos involucrados.
fuente
Una clave de registro con:
Windows Registry Editor Version 5.00
y:
funciona de hecho también.
fuente
Por alguna razón, el cmdlet de PowerShell no habilitó la ejecución local globalmente, solo para el contexto del usuario local. Si intentara iniciar un script de Powershell desde el indicador bash de CygWin, por ejemplo, que se ejecuta en su propio contexto de usuario, no se ejecutaría, dando el error "no está firmado digitalmente". La respuesta fue ir al Editor de políticas de grupo local -> Política de computadora local -> Plantillas administrativas -> Componentes de Windows -> Windows PowerShell y hacer doble clic en 'Activar ejecución de script'. Esto me permite cambiarlo a 'Habilitado' y luego la política de ejecución de "Permitir scripts locales y scripts firmados remotos" y hacer que funcione globalmente, independientemente del contexto del usuario.
fuente
La respuesta aceptada es correcta, pero la modificación de la política solo está disponible para la instancia actualmente en ejecución de Powershell, lo que significa que una vez que se cierra la instancia de Powershell. La política se restablecerá. Si un usuario vuelve a abrir otra instancia de Powershell, se aplicará la política predeterminada que es
Restricted
Para mí, necesito usar la consola de VisualStudio Code y g ++ de cygwin para construir cosas. La consola está usando Powershell, con la política predeterminada, no se puede hacer nada. Una solución es cambiar la política cada vez que se dispara la consola en la consola de VisualStudio Code, tal vez una secuencia de comandos para cambiar la política.
Soy flojo, así que otra solución es cuando ejecuto Powershell en modo administrador, similar a lo que hace la respuesta aceptada. pero con un parámetro adicional que cambia los valores en la tabla del Registro. Una vez hecho esto. Otras instancias de Powershell usarán la
RemoteSigned
política de forma predeterminada.set-executionpolicy remotesigned -Scope CurrentUser
fuente
Establecer la política (correctamente) es la mejor opción, pero en mis sistemas administrados no tengo la capacidad de cambiar esa política.
Para mí, la solución más simple para cambiar la política es abrir el script en el "ISE de PowerShell" , resaltar el código (o parte del código) para ejecutar y luego hacer clic en el botón "Ejecutar selección" (o usar el F8 atajo).
Esta no es la mejor solución y hace poco para automatizar tareas, pero sí me permite el uso y la utilidad de PowerShell sin afectar mi departamento de IS.
fuente
La razón por la que funciona la tecla reg es porque está haciendo exactamente lo que hacen los comandos PS. Los comandos escriben los cambios en las teclas de registro. Los comandos son mucho más rápidos y fáciles que crear una clave de registro o cavar en el registro.
fuente