Estoy tratando de ejecutar un cmd archivo que llama a potencia Shellscript de cmd.exe
, y obtengo 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 huyo Get-ExecutionPolicy
depotencia ShellVuelvo Unrestricted
.
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...
El archivo
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 vea "get-help about_signing
" para 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\> PAUSE
Press any key to continue . . .
El sistema es Windows Server 2008R2.
¿Qué estoy haciendo mal?
Get-ExecutionPolicy -List
.Respuestas:
Si está utilizando Windows Server 2008 R2, entonces hay una versión x64 y x86 de PowerShell, las cuales deben tener establecidas sus políticas de ejecución. ¿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:
Para obtener más información, vea Usar el cmdlet Set-ExecutionPolicy .
Cuando haya terminado, puede restablecer la política a su valor predeterminado con:
fuente
Set-ExecutionPolicy Restricted
parece ser la forma de deshacerlo si desea volver a poner los permisos como estaban: technet.microsoft.com/en-us/library/ee176961.aspx . El método de derivación temporal@Jack Edmonds
me parece más seguro:powershell -ExecutionPolicy ByPass -File script.ps1
Get-ExecutionPolicy -List
me ayudaron a ver los diferentes ámbitos. El cmdGet-ExecutionPolicy
no muestra todos los ámbitos.Import-Module SQLPS
Ahora está trabajando con políticas modificadas de la siguiente manera:{Undefined- Process,MachinePolicy,UserPolicy,}; {RemoteSigned- CurrentUser, LocalMachine}
.Puede omitir esta política para un solo archivo agregando
-ExecutionPolicy Bypass
al ejecutar PowerShellfuente
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass
en mi barra de tareas.type script.ps1 | powershell -
funciona..ps1
y ejecuten accidentalmente algo que no querían. Esto sucedería con los.bat
archivosTuve un problema similar y noté que el valor predeterminado
cmd
en Windows Server 2012 era el x64.Para Windows 7 , Windows 8 , Windows 10 , Windows Server 2008 R2 o Windows Server 2012 , ejecute los siguientes comandos como Administrador :
x86 (32 bit)
Abrir
C:\Windows\SysWOW64\cmd.exe
Ejecute el comando
powershell Set-ExecutionPolicy RemoteSigned
x64 (64 bit)
Abrir
C:\Windows\system32\cmd.exe
Ejecute el comando
powershell Set-ExecutionPolicy RemoteSigned
Puede verificar el modo usando
echo %PROCESSOR_ARCHITECTURE%
[Environment]::Is64BitProcess
Referencias:
MSDN - Políticas de ejecución de Windows PowerShell
Windows - Explicación del directorio de 32 bits frente a 64 bits
fuente
La mayoría de las respuestas existentes explican el cómo , pero muy pocas explican el por qué . Y antes de comenzar a ejecutar código de extraños en Internet, especialmente el código que deshabilita las medidas de seguridad, debe comprender exactamente lo que está haciendo. Aquí hay un poco más de detalles sobre este problema.
Desde la página de TechNet Acerca de las políticas de ejecución :
Los beneficios de los cuales, según lo enumerado por PowerShell Basics - Política de ejecución y firma de código , son:
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
Set-ExecutionPolicy
cmdlet.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 ninguna secuencia de comandos local, remota o descargada en el sistema.AllSigned
- Todas las secuencias de comandos que se ejecutan 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 afecta solo al usuario actual.Process
- La política de ejecución afecta solo al proceso actual de Windows PowerShell.† = Predeterminado
Por ejemplo : si desea cambiar la política a RemoteSigned solo para CurrentUser, debe ejecutar el siguiente comando:
Nota : para cambiar la política de ejecución, debe ejecutar PowerShell como administrador . Si está en modo normal e intenta cambiar la política de ejecución, obtendrá el siguiente error:
Si desea reforzar las restricciones internas en sus propios scripts que no se han descargado de Internet (o al menos no contienen los metadatos de UNC), puede obligar a la política a ejecutar solo sripts firmados. Para firmar sus propios scripts, puede seguir las instrucciones del artículo de Scott Hanselman sobre Signing PowerShell Scripts .
Nota : es probable que la mayoría de las personas reciban este error cada vez que abran Powershell porque lo primero que PS intenta hacer cuando se inicia es ejecutar el script de perfil de usuario que configura su entorno como quiera.
El archivo generalmente se encuentra en:
Puede encontrar la ubicación exacta ejecutando la variable powershell
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.
fuente
Get-Content .\MyFile.ps1 | powershell.exe -NoProfile -
.-ExecutionPolicy ByPass
embargo, dada la existencia de , ¿cuál es el propósito de esta política? ¿Es solo para evitar que los usuarios abran accidentalmente una consola de PowerShell y ejecuten un script malicioso? ¿No podría el atacante simplemente usar un ejecutable o un script por lotes si quisieran evitar esto? Incluso después de leer el comentario de @BaconBits, no estoy muy seguro de qué escenario esta política debe evitar ...En Windows 7:
Vaya al menú Inicio y busque "Windows PowerShell ISE".
Haga clic derecho en la versión x86 y seleccione "Ejecutar como administrador".
En la parte superior, pegue
Set-ExecutionPolicy RemoteSigned
; ejecuta el script Elige "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 @Chad Miller insinuó. Gracias Chad!
fuente
También ejecutar este comando antes de que el script también resuelva el problema:
fuente
RemoteSigned
antes de eliminar todas las restricciones de su política de seguridad. Si eso no funciona, vuelva a evaluar cuáles son sus puntos débiles y por qué no funciona. Puede establecerlounrestricted
como último recurso, pero no debería ser su punto de partida.Remotesigned
.Si se encuentra en un entorno en el que no es administrador, puede establecer la Política de ejecución solo para usted, y no requerirá administrador.
o
Puede leer todo al respecto en la entrada de ayuda.
fuente
Set-ExecutionPolicy Unrestricted
como administrador no parecía "irrestricto" lo suficiente como para realmente ayudar.RemoteSigned: todos los scripts que creó usted mismo se ejecutarán, y todos los scripts descargados de Internet deberán estar firmados por un editor de confianza.
OK, cambie la política simplemente escribiendo:
fuente
Podemos obtener el estado actual
ExecutionPolicy
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 queUnrestricted
.fuente
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
También es una manera rápida y sucia de decirle a VS2015 que deje de quejarse y ejecute mi script sangriento. Gracias. salvador de la vida.Estoy usando Windows 10 y no pude ejecutar ningún comando. El único comando que me dio algunas pistas fue este:
[x64]
Pero esto no funcionó. Fue limitado. Probablemente nuevas políticas de seguridad para Windows10. Tuve este error:
Entonces encontré otra forma ( solución ):
Ahora abra PowerShell y disfrute;)
fuente
Set-ExecutionPolicy RemoteSigned
Unrestricted
. Es una mejor práctica usarRemoteSigned
La configuración de la política de ejecución es específica del entorno. Si está intentando ejecutar un script desde el ISE x86 en ejecución , debe usar el 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.
fuente
Win+ Ry escriba el comando copiar y pegar y presione OK:
Y ejecuta tu script.
Luego revierta cambios como:
fuente
También puede omitir esto utilizando el siguiente comando:
También puede leer este artículo de Scott Sutherland que explica 15 formas diferentes de omitir PowerShell
Set-ExecutionPolicy
si no tiene privilegios de administrador:15 formas de evitar la política de ejecución de PowerShell
fuente
fuente
puede probar esto y seleccionar la opción "Todos"
fuente
En el editor PowerShell ISE encontré que ejecutar la siguiente línea permitía primero los scripts.
fuente
En PowerShell 2.0, la política de ejecución se estableció en deshabilitada de manera predeterminada.
A partir de entonces, 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í.fuente
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 la política de 32 bits de forma remota:
fuente
Vaya a la ruta de registro
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
y configúreloExecutionPolicy
enRemoteSigned
.fuente
Recibo otra advertencia cuando intento correr
Set-ExecutionPolicy RemoteSigned
Resolví con estos comandos
fuente
Si está aquí por ejecutarlo con Ruby o Chef y usar `` ejecución del sistema, ejecute lo siguiente:
Ese comando es para obtener la carpeta "MyDocuments".
-ExecutionPolicy Unrestricted
Hace el truco.Espero que sea útil para alguien más.
fuente
Varias respuestas apuntan a la política de ejecución. Sin embargo, algunas cosas requieren "administrador de runas" también. Esto es más seguro ya que no hay cambios permanentes en la política de ejecución y puede superar la restricción del administrador. Use con schedtask para comenzar un lote con:
tanto de Jack Edmonds arriba como de Peter Mortensen / Dhana de post ¿Cómo ejecutar una aplicación como "ejecutar como administrador" desde el símbolo del sistema?
fuente
Encontré que esta línea funcionaba mejor para uno de mis servidores Windows Server 2008 R2. Un par de otros no tuvieron problemas sin esta línea en mis scripts de PowerShell:
fuente
Abra la consola de Powershell como administrador y luego configure la política de ejecución
fuente
Puede usar una forma especial para evitarlo:
Canaliza el contenido del script powershell a powershell.exe y lo ejecuta sin pasar por la política de ejecución.
fuente
Esto resolvió mi problema
Abra el
PowerShell
comando de Windows y ejecute la consulta a continuación para cambiarExecutionPolicy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
si solicita cambios de confirmación, presione 'Y' y presione enter.
fuente
Ejecutar
Set-ExecutionPolicy RemoteSigned
comandofuente
usa este comando
fuente
Abra cmd en lugar de powershell. Esto me ayudó ...
fuente
Abra la ventana de PowerShell como administrador . Funcionará.
fuente