help - PowerShell dice que "la ejecución de scripts está deshabilitada en este sistema".
get help about_signing (22)
- Abra PowerShell como administrador y ejecute Set-ExecutionPolicy -Scope CurrentUser
- Proporcionar RemoteSigned y presionar Enter
- Ejecutar Set-ExecutionPolicy -Scope CurrentUser
- Proporcionar sin restricciones y presionar Enter
Estoy intentando ejecutar un archivo .cmd que llama a un script de PowerShell desde el símbolo del sistema, y aparece 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 vuelvo unrestricted
.
// Salida de Powershell
PS C: / Users / Administrator> get -ecutionpolicy
Irrestricto
// Salida de DOS
C: / Projects / Microsoft.Practices.ESB / Source / Samples / Management Portal / Install / Scr
ipts> powershell. / Management_Install.ps1 1
ADVERTENCIA: Ejecutando PowerShell x86 ...
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. Consulte "obtener ayuda sobre 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> pause
Pulse cualquier tecla para continuar . . .
El sistema es Windows Server 2008 R2.
¿Qué estoy haciendo mal?
Abra la ventana de PowerShell como administrador . Funcionará.
En PowerShell 2.0, la política de ejecución se configuró como deshabilitada de forma 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 los scripts. Entonces, desde PowerShell 4.0 en adelante, está habilitado por defecto.
En su caso, escriba Set-ExecutionPolicy RemoteSigned
desde la consola de PowerShell y diga sí.
En Windows 7:
Vaya al menú Inicio y busque "Windows PowerShell ISE".
Haga clic derecho en la versión x86 y elija "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 @Chad Miller insinuó. ¡Gracias Chad!
En el editor ISE PowerShell, encontré que ejecutar la siguiente línea primero los scripts permitidos.
Set-ExecutionPolicy RemoteSigned -Scope Process
Encontré que esta línea funcionó 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:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
Estoy usando Windows 10 y no pude ejecutar ningún comando. El único comando que me dio algunas pistas fue este:
[x64]
- Abra C: / Windows / SysWOW64 / cmd.exe [como administrador]
- Ejecute el comando> powershell Set-ExecutionPolicy Unrestricted
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 está anulada por una política definida en un ámbito más específico. Debido a la anulación, su shell mantendrá su actual política de ejecución efectiva de ...
Así que encontré otra forma ( solución ):
- Abrir Ejecutar comando / consola ( Win + R )
- Tipo: gpedit.msc (Editor de Políticas de Grupo )
- Vaya a Directiva de equipo local -> Configuración del equipo -> Plantillas administrativas -> Componentes de Windows -> Windows Powershell .
- Habilitar " Activar ejecución de script "
- Establecer la política según sea necesario. Puse el mío en " Permitir todos los scripts ".
Ahora abre PowerShell y disfruta;)
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.
La mayoría de las respuestas existentes explican el Cómo , pero muy pocas explican el Por qué . Y antes de ejecutar el código de extraños en Internet, especialmente el código que desactiva las medidas de seguridad, debe comprender exactamente lo que está haciendo. Así que aquí hay un poco más de detalle sobre este problema.
Desde la página de políticas de ejecución de TechNet:
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, tal como se enumeran en los conceptos básicos de PowerShell - Política de ejecución y firma de código , son:
- Control de ejecución : controla el nivel de confianza para ejecutar scripts.
- Command Highjack : evita 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 que está firmado con un certificado de una autoridad de certificación en la que confío.
- Integridad : los scripts no pueden ser modificados por malware o usuario malintencionado.
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 en el sistema ningún script local, remoto o descargado. -
AllSigned
: todas las secuencias de comandos que seAllSigned
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 quisiera cambiar la política a RemoteSigned solo para el CurrentUser, ejecutaría el siguiente comando:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
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:
Se ha denegado 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 ámbito predeterminado (LocalMachine), inicie Windows PowerShell con la opción "Ejecutar como administrador".
Si desea restringir las restricciones internas en sus propios scripts que no se han descargado de Internet (o al menos no contienen los metadatos UNC), puede forzar que la política solo ejecute sripts firmados. Para firmar sus propios scripts, puede seguir las instrucciones del artículo de Scott Hanselman sobre Firmar PowerShell Scripts .
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 el script de perfil de usuario que configura su entorno como lo desee.
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 te importe en el perfil y no quieras preocuparte por la configuración de seguridad, puedes eliminarlo y powershell no encontrará nada que no pueda ejecutar.
Podemos obtener el estado de ExecutionPolicy
actual mediante el siguiente comando:
Get-ExecutionPolicy;
Por defecto está restringido . Para permitir la ejecución de los scripts de PowerShell necesitamos establecer esta ExecutionPolicy como Bypass o Unrestricted .
Podemos establecer la política para el usuario actual como Bypass
o Unrestricted
usando cualquiera de los siguientes comandos de PowerShell:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;
La política no restringida carga todos los archivos de configuración y ejecuta todos los scripts. Si ejecuta una secuencia de comandos sin firmar que se descargó de Internet, se le solicitará un permiso antes de ejecutarse.
Mientras que en la política de Bypass , nada está bloqueado y no hay advertencias ni avisos durante la ejecución del script. Bypass ExecutionPolicy
es más relajado que Unrestricted
.
Puede omitir esta política agregando -ExecutionPolicy ByPass
al ejecutar PowerShell
powershell -ExecutionPolicy ByPass -File script.ps1
RemoteSigned: todos los scripts que usted creó se ejecutarán, y todos los scripts descargados de Internet deberán estar firmados por un editor de confianza.
OK, cambia la política simplemente escribiendo:
Set-ExecutionPolicy RemoteSigned
Si está aquí por ejecutarlo con Ruby o Chef y usar 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 de ayuda para otra persona.
Si está utilizando Windows Server 2008 R2, entonces hay una versión x64 y x86 de PowerShell, las cuales tienen que tener establecidas 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 escribiendo esto en su ventana de PowerShell:
Set-ExecutionPolicy RemoteSigned
Para obtener más información, consulte Uso del cmdlet Set-ExecutionPolicy .
Si se encuentra en un entorno donde no es un administrador, puede establecer la Política de ejecución solo para usted, y no será necesario que sea administrador.
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
o
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"
Puedes leer todo sobre esto en la entrada de ayuda.
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
También ejecutar este comando antes de que el script resuelva el problema:
set-executionpolicy unrestricted
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 omitir la política Set-ExecutionPolicy
PowerShell si no tiene privilegios de administrador:
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í 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}
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 del directorio 32bit vs 64bit
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 un cambio permanente en la política de ejecución y puede pasar la restricción del administrador. Utilice con schedtask para iniciar un lote con:
runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1
de Jack Edmonds arriba y Peter Mortensen / Dhana de la publicación ¿Cómo ejecutar una aplicación como "ejecutar como administrador" desde el símbolo del sistema?
Vaya a la ruta del registro HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/PowerShell/1/ShellIds/Microsoft.PowerShell
y configure ExecutionPolicy
en RemoteSigned
.
Win + R y escriba el comando copiar, pegar y presionar OK :
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
Y ejecuta tu guión.
Luego revertir cambios como:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"