scripts help habilitar esta ejecutar ejecución ejecucion deshabilitada desde como bat administrador about_signing about_execution_policies windows powershell

windows - help - ¿Cómo cambia con éxito la política de ejecución y habilita la ejecución de los scripts de PowerShell?



habilitar scripts powershell windows 10 (6)

Tengo un problema con respecto al cambio de la Política de ejecución en mi sistema operativo Windows Server 2008+. Es la primera vez que intento ejecutar un script para el que necesito acceso completo a los recursos e intento lo siguiente después de iniciar Powershell en modo elevado :

Set-ExecutionPolicy Unrestricted

Pero entiendo esto:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy". At line:1 char:1 + Set-ExecutionPolicy Unrestricted + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

Aunque soy administrador, no puedo cambiar la política de ejecución. ¿Qué hacer?



Cree el siguiente ps.cmd y póngalo en su RUTA:

POWERSHELL -Command "$enccmd=[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes((Get-Content ''%1'' | Out-String)));POWERSHELL -EncodedCommand $enccmd"

Ahora puedes ejecutar cualquier script de powershell como en:

psa mypowershell.ps1


El mensaje de error indica que la configuración que está intentando definir a través de Set-ExecutionPolicy está anulada por una configuración en otro ámbito. Use Get-ExecutionPolicy -List para ver qué ámbito tiene qué configuración.

PS C:/> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned PS C:/> Set-ExecutionPolicy Restricted -Scope Process -Force PS C:/> Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of Restricted. Type "Get-ExecutionPolicy -List" to view your execution policy settings. ... PS C:/> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Restricted CurrentUser Unrestricted LocalMachine RemoteSigned PS C:/> ./test.ps1 ./test.ps1 : File C:/test.ps1 cannot be loaded because running scripts is disabled on this system. ... PS C:/> Set-ExecutionPolicy Unestricted -Scope Process -Force PS C:/> Set-ExecutionPolicy Restricted -Scope CurrentUser -Force Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of Restricted. Type "Get-ExecutionPolicy -List" to view your execution policy settings. ... PS C:/> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Unrestricted CurrentUser Restricted LocalMachine RemoteSigned PS C:/> ./test.ps1 Hello World!

Como puede ver, ambas configuraciones se definieron a pesar del error, pero la configuración en el ámbito más específico ( Process ) todavía tiene prioridad, ya sea impidiendo o permitiendo la ejecución de scripts.

Dado que el ámbito predeterminado es LocalMachine el error podría deberse a una configuración en el ámbito CurrentUser o Process . Sin embargo, una razón más común es que la ejecución del script se configuró a través de una política de grupo (local o de dominio).

El administrador local puede modificar una política de grupo local a través de gpedit.msc (Editor de políticas de grupo local) como se describe en esta respuesta .

Una política de grupo de dominio no puede ser reemplazada por configuraciones / políticas locales y debe ser cambiada por un administrador de dominio a través de gpmc.msc (Administración de políticas de grupo) en un controlador de dominio.

Para las políticas locales y de dominio, la configuración se puede definir como una configuración de computadora:

Computer Configuration `-Administrative Templates `-Windows Components `-Windows PowerShell -> Turn on Script Execution

o como configuración de usuario:

User Configuration `-Administrative Templates `-Windows Components `-Windows PowerShell -> Turn on Script Execution

Los primeros se aplican a objetos de computadora, mientras que los últimos se aplican a objetos de usuario. Para las políticas locales, no hay una diferencia significativa entre las políticas de usuario y de computadora, porque las políticas de usuario se aplican automáticamente a todos los usuarios de la computadora.

Una política puede tener uno de tres estados (o cinco estados si cuenta las 3 configuraciones disponibles para el estado Habilitado por separado):

  • No configurado : la política no controla la ejecución del script de PowerShell.
  • Habilitado : permitir la ejecución del script PowerShell.
    • Permitir solo los guiones firmados : permitir la ejecución de los guiones firmados solamente (igual que Set-ExecutionPolicy AllSigned ).
    • Permitir guiones locales y guiones firmados remotos : permitir la ejecución de todos los guiones locales (firmados o no) y de guiones firmados desde ubicaciones remotas (igual que Set-ExecutionPolicy RemoteSigned ).
    • Permitir todos los scripts : permite la ejecución de scripts locales y remotos independientemente de si están firmados o no (igual que Set-ExecutionPolicy Unrestricted ).
  • Deshabilitado : no permitir la ejecución del script de PowerShell (igual que Set-ExecutionPolicy Restricted ).

Los cambios realizados a través de Set-ExecutionPolicy solo se hacen efectivos cuando las políticas locales y de dominio están configuradas como No configuradas (política de ejecución no MachinePolicy en los ámbitos MachinePolicy y UserPolicy ).


El problema es que Windows no permite que todos los scripts se ejecuten en modo Unrestricted . En realidad, sin importar la política de ejecución para su usuario (incluso si es administrador), la Local Group Policy tendrá prioridad.

Y, de forma predeterminada, la política de ejecución de la secuencia de comandos del grupo local es tal para la cual las secuencias de comandos no pueden ejecutarse. ¡Necesitamos cambiarlo!

Cambio de la política de ejecución del grupo local

Lo hacemos a través del Local Group Policy Editor que puede acceder buscando en la barra de búsqueda de Windows "política de grupo". O haz esto:

  1. Abra la Consola de administración presionando Win + r y escribiendo el comando mmc .
  2. Vaya a File -> Add Remove Snap In...
  3. En el panel izquierdo, busque el Group Policy Object Editor y añádalo.
  4. Cierra el formulario.

Luego, en el panel izquierdo, se puede expandir el editor de grupo. Expanda y navegue a Computer Configuration -> Administrative Templates -> Windows Components .

Luego a Windows PowerShell .

Así que seleccione Turn on Script Execution . Cambie la configuración a Enabled y especifique Allow all scripts en la Execution Policy .

Confirme pulsando Ok y cierre la consola de gestión.


Si se está ejecutando en Visual Studio 2015 recientemente, verifique si hay actualizaciones para el administrador de paquetes nuget en herramientas> extensiones y actualizaciones>


Si un controlador de dominio establece la política de ejecución de PowerShell a través de una política de grupo, deberá restablecer la política de ejecución a "Omitir" en el registro después de cada inicio. He creado un par de scripts de inicio para automatizar el proceso. A continuación, describo mi proceso.

Cree una carpeta llamada% USERPROFILE% / Documents / StartupScripts y luego coloque un script de PowerShell llamado ExecutionPolicy.ps1 con el siguiente código:

Push-Location Set-Location HKLM:/Software/Policies/Microsoft/Windows/PowerShell Set-ItemProperty . ExecutionPolicy "Bypass" Pop-Location

Luego cree un archivo llamado% USERPROFILE% / AppData / Roaming / Microsoft / Windows / Start Menu / Programs / Startup / Startup.cmd y coloque el siguiente código en él:

PowerShell -Version 3.0 -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%/StartupLog.txt" 2>&1 PowerShell -Version 3.0 "%USERPROFILE%/Documents/StartupScripts/ExecutionPolicy.ps1" >> "%TEMP%/StartupLog.txt" 2>&1

Este script se ejecutará al inicio de cada inicio de sesión.