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


Cuando intento ejecutar mi secuencia de comandos de PowerShell obtengo este error:

No se puede cargar el archivo C: \ Common \ Scripts \ hello.ps1 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


181


origen




Respuestas:


  1. Inicie Windows PowerShell con la opción "Ejecutar como administrador". Solo los miembros del grupo Administradores en la computadora pueden cambiar la política de ejecución.

  2. Habilite la ejecución de scripts sin firmar ingresando:

    set-executionpolicy remotesigned
    

Esto permitirá ejecutar scripts sin firmar que escriba en su computadora local y firmado guiones de Internet.

Ver también Ejecutando Scripts en la biblioteca de Microsoft TechNet.


271



+1 para remotesigned en lugar de irrestricted. Puede ejecutar sus scripts locales sin exponerse a los peligros de cualquier otro lugar. - DarrellNorton
Gracias - este post me ayudó. Sin embargo, todavía tenía más problemas porque no había ejecutado PowerShell "como administrador" en win8. - sergeantKK
¿Esto cambiará la política de manera permanente o tendré que hacer esto cada vez que reinicie mi computadora? - Ray
¿Hay alguna manera de habilitar la ejecución de un específico ¿script de powershell? Entonces tal vez solo quiero permitir hello.ps1 desde el OP, o Microsoft.PowerShell_profile.ps1 en el cuadro de un usuario? (Creo que podría decirse que se trata de la pregunta OP abiertamente amplia (¡ja, que ahora veo también es tuya!). Si sientes que es una pregunta nueva, puedo pedírtelo). - ruffin
@ruffin ¿Podría hacer una pregunta por separado para esto? A continuación, puede vincularlo aquí. - Pavel Chuchuva


La Política de ejecución predeterminada está configurada como restringida, puede verla escribiendo:

Get-ExecutionPolicy

Debe escribir lo siguiente para que pase al modo no restringido:

Set-ExecutionPolicy unrestricted

Espero que esto ayude


60



-1. eso es demasiado abierto para simplemente ejecutar. RemoteSigned es mejor. - TomTom
La firma obligatoria requiere sentido si espera que el usuario copie y pegue secuencias de comandos maliciosas de Internet. Si asume que el usuario no es estúpido, entonces "remotesigned" no agrega ningún tipo de seguridad y hace la vida más difícil. - Guss


En mi máquina que uso para las secuencias de comandos dev, usaré -sin restricción como la anterior. Sin embargo, al implementar mis scripts en una máquina del usuario final, simplemente llamaré a powershell con el parámetro -executionpolicy:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1

48



Es posible que desee combinar este truco con un truco políglota en un archivo .CMD. Ver stackoverflow.com/a/8597794/5314 - Jay Bazuzi
¡Bonito! He estado implementando sfx's made by winrar rarlabs.com - MDMoore313
Ese truco me permitió ejecutar el script de powershell de Git Bash (MINGW32 bash) - Kamil Szot


Podemos obtener el estado de la actual ExecutionPolicy por el siguiente comando:

Get-ExecutionPolicy;

Por defecto es Restringido. Para permitir la ejecución de las secuencias de comandos de PowerShell, debemos configurar ExecutionPolicy como Derivación o Irrestricto.

Podemos establecer la política para el usuario actual como Bypass o Unrestricted utilizando cualquiera de los siguientes comandos de PowerShell:

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

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

Irrestricto la política 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 pedirá permiso antes de que se ejecute.

Mientras en Derivación política, nada está bloqueado y no hay advertencias o solicitudes durante la ejecución del script. Bypass ExecutionPolicy es más relajado que irrestricto.


7





Dependiendo de la versión y configuración de Windows, es posible que tenga la siguiente advertencia, incluso en Unrestricted modo:

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 "omisión", habilitada con el siguiente comando:

Set-ExecutionPolicy Bypass

Desde el documentación:

Desvío: nada está bloqueado y no hay advertencias o indicaciones.

Esto es obviamente inseguro. Comprenda los riesgos involucrados.


3



esta fue la única forma en que pude ejecutar mi script en un entorno WINE con powershell 2.0. Gracias. - Wyatt8740


Una clave de registro con:
Editor de registro de Windows versión 5.00

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

y:

Windows Registry Editor Version 5.00

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

también funciona de verdad


1





La razón por la que funciona la clave 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 profundizar en el registro.


-1



Eso es simplemente incorrecto: las claves que se mencionaron en otras respuestas cambian la política de ejecución de powershell, que luego habilita la secuencia de comandos de powershell para ejecutarse. - Patrick R.