PowerShell dice “la ejecución de scripts está deshabilitada en este sistema”.

Estoy intentando ejecutar el archivo .cmd que llama a un script de PowerShell desde el símbolo del sistema, y ​​obtengo el siguiente error:

Management_Install.ps1 no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema.

He ejecutado set-executionpolicy unrestricted y cuando ejecuto get-executionpolicy desde PowerShell me vuelven unrestricted .

// Salida de Powershell

PS C: \ Users \ Administrador> get-executionpolicy

Irrestricto

// Salida desde DOS

C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Management Portal \ Install \ Scr

ipts> powershell. \ Management_Install.ps1 1

ADVERTENCIA: Ejecutando PowerShell x86 …

No se puede cargar el archivo C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Management Portal \ Install \ Scripts \ Management_Install.ps1 porque la ejecución de scripts está deshabilitada en este sistema. Consulte “get-help about_signing” para obtener más detalles.

En línea: 1 char: 25

  • . \ Management_Install.ps1 <<<< 1

    • CategoryInfo: NotSpecified: (:) [], PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Management Portal \ Install \ Scripts> pausa

Pulse cualquier tecla para continuar . . .

El sistema es Windows Server 2008 R2.

¿Qué estoy haciendo mal?

    Si está utilizando Windows Server 2008 R2, entonces hay una versión x64 y x86 de PowerShell, que deben tener configuradas sus políticas de ejecución. ¿Estableciste la política de ejecución en ambos hosts?

    Como administrador , puede establecer la política de ejecución tipeando esto en su ventana de PowerShell:

     Set-ExecutionPolicy RemoteSigned 

    Para obtener más información, vea Usar el cmdlet Set-ExecutionPolicy .

    Puede omitir esta política agregando -ExecutionPolicy ByPass al ejecutar PowerShell

     powershell -ExecutionPolicy ByPass -File script.ps1 

    Tuve un problema similar y noté que el cmd predeterminado en Windows Server 2012 ejecutaba el x64.

    Para Windows 7 , Windows 8 , Windows Server 2008 R2 o Windows Server 2012 , ejecute los siguientes comandos como administrador :

    x86 (32 bit)
    Abra C:\Windows\SysWOW64\cmd.exe
    Ejecute el comando powershell Set-ExecutionPolicy RemoteSigned

    x64 (64 bit)
    Abra C:\Windows\system32\cmd.exe
    Ejecute el comando powershell Set-ExecutionPolicy RemoteSigned

    Puedes verificar el modo usando

    • En CMD: echo %PROCESSOR_ARCHITECTURE%
    • En Powershell: [Environment]::Is64BitProcess

    Referencias
    MSDN: políticas de ejecución de Windows PowerShell
    Windows: explicación de directorio de 32 bits frente a 64 bits

    La mayoría de las respuestas existentes explican el cómo , pero muy pocas explican el porqué . Y antes de ejecutar el código de extraños en Internet, especialmente el código que deshabilita las medidas de seguridad, debe comprender exactamente lo que está haciendo. Así que aquí hay un poco más de detalle sobre este problema.

    De la página de TechNet About Execution Policies :

    Las políticas de ejecución de Windows PowerShell le permiten determinar las condiciones bajo las cuales Windows PowerShell carga archivos de configuración y ejecuta scripts.

    Los beneficios de los cuales, enumerados por PowerShell Basics – Política de ejecución y firma de código son:

    • Control de ejecución : controle el nivel de confianza para ejecutar scripts.
    • Comando Highjack : evitar la inyección de comandos en mi camino.
    • Identidad : el script creado y firmado por un desarrollador en el que confío y / o firmado con un certificado de una autoridad certificadora en la que confío.
    • Integridad : los scripts no pueden ser modificados por malware o usuario malicioso.

    Para verificar su política de ejecución actual, puede ejecutar Get-ExecutionPolicy . Pero probablemente estés aquí porque quieres cambiarlo.

    Para hacerlo, ejecutará el cmdlet Set-ExecutionPolicy .

    Tendrá que tomar dos decisiones importantes al actualizar la política de ejecución.

    Tipo de política de ejecución:

    • Restricted : no se puede ejecutar ningún script local, remoto o descargado en el sistema.
    • AllSigned : todas las secuencias de comandos que se AllSigned deben estar firmadas digitalmente.
    • RemoteSigned : todos los scripts remotos (UNC) o descargados deben estar firmados.
    • Unrestricted : no se requiere firma para ningún tipo de script.

    Alcance del nuevo cambio

    • LocalMachine – La política de ejecución afecta a todos los usuarios de la computadora.
    • CurrentUser : la política de ejecución solo afecta al usuario actual.
    • Process : la política de ejecución afecta solo al proceso actual de Windows PowerShell.

    † = Por defecto

    Por ejemplo : si desea cambiar la política a RemoteSigned solo para CurrentUser, ejecutará el siguiente comando:

     Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 

    Nota : Para cambiar la política de Ejecución, debe ejecutar PowerShell As Adminstrator . Si está en modo normal e intenta cambiar la política de ejecución, obtendrá el siguiente error:

    Se deniega el acceso a la clave de registro ‘HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell’. Para cambiar la política de ejecución para el scope predeterminado (LocalMachine), inicie Windows PowerShell con la opción “Ejecutar como administrador”.

    Si desea ajustar las restricciones internas en sus propios scripts que no se han descargado de Internet (o al menos no contienen los metadatos de UNC), puede forzar a la política a que solo ejecute sripts firmados. Para firmar sus propios scripts, puede seguir las instrucciones en el artículo de Scott Hanselman sobre Firma de scripts de PowerShell .

    Nota : es probable que la mayoría de las personas obtengan este error cada vez que abren Powershell porque lo primero que PS intenta hacer cuando se inicia es ejecutar su script de perfil de usuario que configura su entorno de la forma que prefiera.

    El archivo generalmente se encuentra en:

     %UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1 

    Puede encontrar la ubicación exacta ejecutando la variable powershell

     $profile 

    Si no hay nada que le interese en el perfil y no quiere preocuparse por su configuración de seguridad, puede simplemente eliminarlo y PowerShell no encontrará nada que no pueda ejecutar.

    También ejecutar este comando antes de la secuencia de comandos también resuelve el problema:

     set-executionpolicy unrestricted 

    En Windows 7:

    Vaya al Menú de Inicio y busque “Windows PowerShell ISE”.

    Haga clic con el botón derecho en la versión x86 y seleccione “Ejecutar como administrador”.

    En la parte superior, pegue Set-ExecutionPolicy RemoteSigned ; ejecutar el script Elija “Sí”.

    Repita estos pasos para la versión de 64 bits de Powershell ISE también (la versión no x86).

    Solo estoy aclarando los pasos que insinuó @Chad Miller. Gracias Chad!

    Si se encuentra en un entorno en el que no es administrador, puede configurar la Política de ejecución solo para usted y no requerirá administrador.

     Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned" 

    o

     Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted" 

    Puede leerlo en la entrada de ayuda.

     Help Get-ExecutionPolicy -Full Help Set-ExecutionPolicy -Full 

    RemoteSigned: se ejecutarán todos los scripts que haya creado y todos los scripts descargados de Internet deberán estar firmados por un editor de confianza.

    De acuerdo, cambie la política simplemente escribiendo:

     Set-ExecutionPolicy RemoteSigned 

    Estoy usando Windows 10 y no pude ejecutar ningún comando. El único comando que me dio algunas pistas fue esto:

    [x64]

    1. Abra C: \ Windows \ SysWOW64 \ cmd.exe [como administrador]
    2. Ejecute el comando> powershell Set-ExecutionPolicy sin restricciones

    Pero esto no funcionó. Fue limitado Probablemente nuevas políticas de seguridad para Windows10. Tuve este error:

    Set-ExecutionPolicy: Windows PowerShell actualizó su política de ejecución con éxito, pero la configuración queda anulada por una política definida en un ámbito más específico. Debido a la anulación, su caparazón mantendrá su actual política de ejecución efectiva de …

    Entonces encontré otra manera ( solución ):

    1. Comando / consola de ejecución abierta ( Win + R )
    2. Tipo: gpedit.msc (Editor de directivas de grupo )
    3. Navegue a la Política de la computadora local -> Configuración de la computadora -> Plantillas administrativas -> Componentes de Windows -> Windows Powershell .
    4. Habilita ” Activar la ejecución de scripts
    5. Establezca la política según sea necesario. Configuré el mío para ” Permitir todos los scripts “.

    Ahora abre PowerShell y disfruta;)

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

     Get-ExecutionPolicy; 

    Por defecto está Restringido . Para permitir la ejecución de los scripts de PowerShell, debemos establecer ExecutionPolicy como Bypass o Sin restricciones .

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

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

    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 pedirá permiso antes de que se ejecute.

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

    La configuración de la política de ejecución es específica del entorno. Si intenta ejecutar un script desde el ISE x86 en ejecución, debe usar PowerShell x86 para establecer la política de ejecución. Del mismo modo, si está ejecutando el ISE de 64 bits, debe establecer la política con el PowerShell de 64 bits.

    También puede omitir esto usando el siguiente comando:

     PS > powershell Get-Content .\test.ps1 | Invoke-Expression 

    También puede leer este artículo de Scott Sutherland que explica 15 maneras diferentes de eludir PowerShell Set-ExecutionPolicy si no tiene privilegios de administrador:

    15 formas de eludir la política de ejecución de PowerShell

    1. Abra PowerShell como administrador y ejecute Set-ExecutionPolicy -cope CurrentUser
    2. Proporcione RemoteSigned y presione Enter
    3. Ejecutar Set-ExecutionPolicy -Scope CurrentUser
    4. Proporcione Sin restricciones y presione Entrar

    Win + R y escribe copy paste command y presiona OK :

     powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned" 

    Y ejecuta tu script

    A continuación, revertir cambios como:

     powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned" 

    En el editor ISE de PowerShell encontré que se ejecutaban las siguientes secuencias de comandos permitidas en la siguiente línea.

     Set-ExecutionPolicy RemoteSigned -Scope Process 

    En PowerShell 2.0, la política de ejecución estaba desactivada de manera predeterminada.

    Desde ese momento, el equipo de PowerShell ha realizado muchas mejoras y confía en que los usuarios no romperán mucho las cosas mientras ejecutan scripts. Entonces, desde PowerShell 4.0 en adelante, está habilitado de forma predeterminada.

    En su caso, escriba Set-ExecutionPolicy RemoteSigned desde la consola de PowerShell y diga sí.

    Vaya a la ruta de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell y establezca ExecutionPolicy en RemoteSigned .

    Si estás aquí porque lo ejecutas con Ruby o Chef y usas “ ejecución del sistema, ejecuta de la siguiente manera:

     `powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')` 

    Ese comando es para obtener la carpeta “Mis documentos”.

    -ExecutionPolicy Unrestricted hace el truco.

    Espero que sea útil para otra persona.

    Varias respuestas apuntan a la política de ejecución. Sin embargo, algunas cosas también requieren “administrador de runas”. Esto es más seguro ya que no existe una política de cambio permanente en la ejecución y puede superar la restricción del administrador. Úselo con schedtask para comenzar un lote con:

      runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1 

    tanto de Jack Edmonds arriba, y Peter Mortensen / Dhana de post ¿Cómo ejecutar una aplicación como “ejecutar como administrador” desde el símbolo del sistema?

    Encontré que esta línea funcionaba mejor para uno de mis servidores de Windows Server 2008 R2. Un par de otros no tenían problemas sin esta línea en mis scripts de PowerShell:

     Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process 

    Tuve el mismo problema hoy. La política de ejecución de 64 bits no estaba restringida, mientras que la de 32 bits estaba restringida.

    Aquí se explica cómo cambiar solo la política de 32 bits de forma remota:

     Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted} 

    Abra la ventana de PowerShell como administrador . Funcionará.