Búsqueda de sitios web

Cómo solucionar PowerShell "La ejecución de scripts está deshabilitada en este sistema"


¿Estás intentando ejecutar un script de PowerShell y aparece el error “No se puede cargar porque la ejecución de scripts está deshabilitada en este sistema”? Luego necesitamos cambiar la política de ejecución en PowerShell. Para proteger su computadora de scripts maliciosos, la política de ejecución de PowerShell está configurada como restringida de forma predeterminada.

Esta configuración predeterminada le impedirá ejecutar cualquier secuencia de comandos de PowerShell en su computadora, incluso secuencias de comandos que haya escrito usted mismo. Por suerte, podemos cambiar la política fácilmente con un solo comando en PowerShell.

En este artículo, explicaré cómo puede corregir rápidamente el error al ejecutar scripts que están deshabilitados en este sistema, cuáles son las diferentes políticas y cómo cambiarlas en todas las computadoras con una Política de grupo.

Arreglar La ejecución de scripts está deshabilitada en este sistema

Vamos a empezar con una solución rápida. El método siguiente solo resuelve el problema temporalmente, por lo que puede ejecutar el script y continuar. Para encontrar una solución más sostenible, desplácese un poco hacia abajo hasta el siguiente capítulo.

  1. Abra PowerShell o Terminal de Windows
  2. Ingrese el siguiente comando para ejecutar su script

    powershell -ExecutionPolicy Bypass -Archivo script.ps1

El método anterior omite la política de ejecución sólo temporalmente. Esto funciona muy bien para un solo archivo, pero requiere que use el comando anterior cada vez que desee ejecutar el archivo. Una solución más sostenible es cambiar la política de ejecución.

Cambiar la política de ejecución de forma permanente

Cuando trabaja mucho con scripts de PowerShell, probablemente desee cambiar la Política de ejecución de forma permanente. Pero antes de ver cómo cambiar la política, primero expliquemos su propósito y las diferentes políticas disponibles.

La política de ejecución no está diseñada como un sistema de seguridad para impedir que los usuarios ejecuten scripts de PowerShell. Cada usuario puede simplemente omitir la política en su sesión actual de PowerShell o incluso copiar y pegar el contenido del script directamente en la consola. ¿Cuál es entonces el propósito de la política? Bueno, está diseñado para evitar la ejecución involuntaria de scripts de PowerShell.

A la hora de cambiar de póliza tenemos cinco opciones para elegir:

Restricted

Opción predeterminada: no permite ejecutar ningún script de PowerShell

Unrestricted

Puede ejecutar cualquier script, muestra advertencia para los scripts descargados

RemoteSigned

Requiere una firma digital para los scripts descargados. Puede
ejecutar scripts escritos localmente. Puedes desbloquear scripts descargados
para ejecutarlos sin firma

ByPass

Puede ejecutar todos los scripts y no se muestran advertencias

AllSigned

Sólo puedes ejecutar scripts firmados de editores de confianza.

La mayoría de las personas tienden a establecer la política sin restricciones, lo que le permite ejecutar cualquier script de PowerShell. Pero una mejor opción es utilizar la política RemoteSigned. De esta manera, puede ejecutar cualquier script escrito localmente, pero primero deberá desbloquear todos los scripts descargados. El manejo adicional evita que los usuarios descarguen y ejecuten accidentalmente scripts de PowerShell maliciosos en su sistema.

Todos los usuarios vs usuario actual

Al cambiar la política también podemos determinar el alcance del cambio. Los siguientes alcances están disponibles para la política:

CurrentUser

La política solo está configurada para el usuario que ha iniciado sesión actualmente.

LocalMachine

Se cambia la política para todos los usuarios de la máquina.

Process

La política solo se cambia para la sesión actual de PowerShell

Establecer política de ejecución para el usuario actual

Entonces, el escenario más común es que desee cambiar la política de ejecución de PowerShell para el usuario actual. Esto solucionará el error "la ejecución de scripts está deshabilitada en este sistema" para el usuario que inició sesión. Estableceremos la política en RemoteSigned, lo que significa que el usuario aún debe realizar un paso adicional para los scripts descargados.

  1. Abra PowerShell
  2. Ingrese el siguiente comando y presione enter
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
  1. Opcional: verifique la configuración con el comando Get-ExecutionPolicy

Ahora puede ejecutar cualquier secuencia de comandos de PowerShell creada localmente sin que aparezca el error la ejecución de secuencias de comandos está deshabilitada en este sistema.

Cuando intenta ejecutar un script de PowerShell descargado con la política de ejecución RemoteSigned, aparece el error de que el archivo no se puede cargar. El script de PowerShell no está firmado digitalmente:

Para solucionar esto, primero deberás desbloquear el archivo. Para hacer esto, por supuesto, podemos usar un cmdlet de PowerShell, Unblock-File. Simplemente escriba el cmdlet seguido del nombre del archivo/ruta:

Unblock-File -path .\CreateTestFiles.ps1

Establecer política de ejecución para todos los usuarios

También podemos cambiar la política para todos los usuarios de una computadora. Para hacer esto, necesitará tener permisos elevados (permiso de administrador).

  1. Haga clic derecho en Inicio o presione la tecla de Windows + X
  2. Elija Windows PowerShell (Administrador) o Windows Terminal (Administrador)
  3. Escriba el siguiente comando:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

Podemos verificar los resultados con el cmdlet Get-ExecutionPolicy -List que muestra la política para cada alcance. Es bueno saber que la política CurrentUser tiene prioridad sobre la política LocalMachine. Entonces, cuando configura la política CurrentUser en restringido y LocalMachine en RemoteSigned, el usuario aún no puede ejecutar ningún script de PowerShell, porque la política establecida en el alcance de CurrentUser anula la política de LocalMachine.

Cambiar la política solo para las sesiones actuales

Otra opción es cambiar la política sólo para la sesión actual de PowerShell. Este método es útil cuando necesita ejecutar un par de scripts de PowerShell, pero no desea cambiar la política de forma permanente. Puede usar la opción Omitir para cada secuencia de comandos, pero por lo tanto también es posible configurar el cambio del alcance solo para la sesión actual de PowerShell. Utilice el alcance Proceso para esto:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Establecer política de ejecución PowerShell con GPO

Cuando necesite modificar la política en varias computadoras, es una buena idea utilizar una Política de grupo para esto. Las políticas de grupo le permiten cambiar la configuración de Windows en varias computadoras que son miembros de un dominio. Otra ventaja de la política es que la configuración no se puede sobrescribir en la computadora.

  1. Abra el Editor de administración de políticas de grupo y cree una nueva política.
  2. Expandir la configuración de la computadora
  3. Vaya a Políticas > Plantillas administrativas > Componentes de Windows > Windows PowerShell
  4. Abra la configuración Activar ejecución de script

  1. Cambie la configuración a Habilitado
  2. Seleccione la Política de ejecución Permitir scripts locales y scripts firmados remotamente. Esto es lo mismo que RemoteSigned que configuramos anteriormente.

Podemos verificar la configuración en uno de los clientes que son miembros de la unidad organizativa donde acabamos de aplicar la configuración. Primero, asegúrese de que se aplique la política más reciente en la computadora usando el comando GPUpdate. Opcionalmente, puede usar el comando RSOP para verificar la política, o simplemente verificar si la política de ejecución está configurada con el comando:

Get-ExecutionPolicy -list

# Result
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy    RemoteSigned
   UserPolicy    RemoteSigned
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

Como se mencionó, la ventaja de las políticas es que los usuarios ya no pueden cambiarlas. Cuando utilice el cmdlet set-executionpolicy, obtendrá un error indicando que se cambió la política, pero la configuración se anula por una política definida en un ámbito más específico:

Concluyendo

La mejor manera de configurar la Política de ejecución en PowerShell es utilizar la Política de grupo. De esta manera, todas las máquinas nuevas y existentes en su dominio se pueden configurar con la política correcta. Por supuesto, puedes crear una política diferente para el departamento de TI.

Espero que este artículo te haya ayudado a resolver el error "no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema". Si tienes alguna pregunta, deja un comentario a continuación. Si desea obtener más información sobre PowerShell, asegúrese de leer esta guía de introducción.

Artículos relacionados