Pregunta

Estoy tratando de ejecutar un Archivo que llama a un guión de cmd.exe, y estoy recibiendo el siguiente error:

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

he corrido

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Y cuando corro Get-ExecutionPolicy de , Yo obtengo Unrestricted espalda.

PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> powershell .\Management_Install.ps1 1

WARNING: Running x86 PowerShell...

Expediente C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1 no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema. Por favor mira "get-help about_signing" para más detalles.

En la línea: 1 char: 25

  • .\Management_Install.ps1 <<<< 1

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

    • Totalmente calificadoerRORID: RuntimeException

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

Press any key to continue . . .

El sistema es Windows Server 2008R2.

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Si estás usando Windows Server 2008 R2 entonces hay un x64 y x86 Versión de PowerShell, los cuales tienen que tener sus políticas de ejecución establecidas. ¿Estableció la política de ejecución en ambos hosts?

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

Set-ExecutionPolicy RemoteSigned

Para más información, ver Usando el CMDLET de SET-ExecutionPolicy.

Otros consejos

Puede evitar esta política agregando -ExecutionPolicy ByPass Al ejecutar PowerShell

powershell -ExecutionPolicy ByPass -File script.ps1

Tuve un problema similar y noté que el valor predeterminado cmd en Windows Server 2012, estaba ejecutando el x64 uno.

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

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

x64 (64 bit)
Abierto C:\Windows\system32\cmd.exe
Ejecutar 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 del directorio de 32 bits vs 64 bits

La mayoría de las respuestas existentes explican el Cómo, pero muy pocos explican el Por qué. 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 tecnología Sobre la página de políticas de ejecución:

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.

Cuyos beneficios, según enumerados por PowerShell Basics - Política de ejecución y firma de código, son:

  • Control de la ejecución - Controle el nivel de confianza para ejecutar scripts.
  • Comandar highjack - Evite la inyección de comandos en mi camino.
  • Identidad - ¿Es el script creado y firmado por un desarrollador en el que confío y/o un firmado con un certificado de una autoridad de certificado 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ás el Set-ExecutionPolicy cmdlet.

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

Tipo de política de ejecución:

  • Restricted - Ningún script local, remoto o descargado se puede ejecutar en el sistema.
  • AllSigned - Todos los script que se ejecutan requieren que se firmen digitalmente.
  • RemoteSigned - Todos los scripts remotos (UNC) o descargados deben firmarse.
  • 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 afecta solo al usuario actual.
  • Process - La política de ejecución afecta solo al proceso actual de Windows PowerShell.

† = predeterminado

Por ejemplo: Si quisiera cambiar la política a remotesigned solo para el UCTURYUSer, ejecutaría el siguiente comando:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Nota: Para cambiar la política de ejecución, debe estar ejecutándose PowerShell como administrador. Si está en modo regular e intenta cambiar la política de ejecución, obtendrá el siguiente error:

Acceso a la clave de registro 'HKEY_LOCAL_MACHINE Software Microsoft Powershell 1 shellids Microsoft.Powershell' se niega. Para cambiar la política de ejecución para el alcance 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 contiene los metadatos de UNC), puede obligar a la política a ejecutar solo SRIPTS firmados. Para firmar sus propios guiones, puede seguir las instrucciones sobre el artículo de Scott Hanselman en Firma de guiones 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 como le guste.

El archivo se encuentra típicamente 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 importe en el perfil, y no quiera preocuparse por su configuración de seguridad, puede eliminarlo y PowerShell no encontrará nada que no pueda ejecutar.

En Windows 7:

Vaya al menú Iniciar y busque "Windows PowerShell ISE".

Haga clic derecho en la versión X86 y elija "Ejecutar como administrador".

En la parte superior, pasta Set-ExecutionPolicy RemoteSigned; Ejecute el guión. Elija "SÍ".

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

Solo aclaro los pasos que @chad Miller insinuó. ¡Gracias Chad!

También ejecuta este comando antes de que el script también resuelva el problema:

set-executionpolicy unrestricted

Si se encuentra en un entorno donde no es un administrador, puede establecer 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 leer todo sobre esto en la entrada de ayuda.

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

RemoteSigned: todos los scripts que creó se ejecutarán, y todos los scripts descargados de Internet deberán ser firmados por un editor de confianza.

Ok, cambie la política simplemente escribiendo:

Set-ExecutionPolicy RemoteSigned

Podemos obtener el estado de la corriente ExecutionPolicy por el comando a continuación:

Get-ExecutionPolicy;

Por defecto es Restringido. Para permitir la ejecución de los scripts de PowerShell, necesitamos establecer esta EjecutionPolicy ya sea como Derivación o Irrestricto.

Podemos establecer la política para el usuario actual como Bypass o Unrestricted Al usar 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 solicita permiso antes de que se ejecute.

Mientras en Derivación Política, nada se bloquea y no hay advertencias ni indicaciones durante la ejecución del script. Derivación ExecutionPolicy es más relajado que Unrestricted.

Estoy usando Windows 10 y no pudo 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ó. Era 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 se anula por una política definida en un alcance más específico. Debido a la anulación, su shell conservará su política de ejecución efectiva actual de ...

Entonces encontré otra forma (solución):

  1. Comando/consola de abrir ejecutar (Victoria + Riñonal)
  2. Escribe: gpedit.msc (Política grupal Editor)
  3. Buscar Política informática local -> Configuracion de Computadora -> Plantillas Administrativas -> Componentes de Windows -> Windows PowerShell.
  4. Habilitar "Activar la ejecución del script"
  5. Establezca la política según sea necesario. Puse el mío en "Permitir todos los scripts".

Ahora abierto PowerShell y disfruta;)

Establecer la política de ejecución es específica del entorno. Si está intentando ejecutar un script desde la ejecución x86 ISE Debe usar el X86 PowerShell 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.

Victoria + Riñonal y escriba Copiar el comando Pegue y presione OK:

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

Y ejecuta tu script.

Luego revertir cambios como:

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

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 formas diferentes de evitar el PowerShell Set-ExecutionPolicy Si no tiene privilegios de administrador:

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

  1. Abrir PowerShell como administrador y ejecutar Set -ejecutionPolicy -scope currentUser
  2. Proveer Remoturado y presione Entrar
  3. Correr Set -ejecutionPolicy -scope currentUser
  4. Proveer Irrestricto y presione Entrar

En el PowerShell ISE Editor que encontré ejecutar la siguiente línea primero permitió scripts.

Set-ExecutionPolicy RemoteSigned -Scope Process

En PowerShell 2.0, la política de ejecución se estableció en deshabilitado por defecto.

A partir de entonces, el equipo de PowerShell ha realizado muchas mejoras, y confían 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 de la consola PowerShell y di que sí.

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

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

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

Ir a la ruta del registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell y establecer ExecutionPolicy a RemoteSigned.

Si estás aquí por ejecutarlo con Rubí o Cocinero y utilizando la ejecución del sistema ``, ejecute lo siguiente:

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

Ese comando es para obtener la carpeta "MyDocuments".

-ExecutionPolicy Unrestricted Hace el truco.

Espero que sea útil para alguien más.

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 hay un cambio permanente en la política de ejecución y puede obtener la restricción del administrador más allá. Úselo con SchedTask para comenzar un lote con:

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

de ambos 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 funcionó mejor para uno de mis Windows Server 2008 Servidores R2. Un par de otros no tuvieron problemas sin esta línea en mis guiones de PowerShell:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process

Abra la ventana PowerShell como un Administrador. Funcionará.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top