Saltar al contenido

Permitir la ejecución de scripts Powershell en Windows 10

Powershell es un intérprete de comandos para sistemas Windows muy popular, por potente y por extenso, dado que cualquiere puede desarrollar sus propios scripts y se puede utilizar para infinidad de cosas, ya sea reparar archivos corruptos en Windows o realizar bastionado, por ejemplo desactivar shares administrativos en Windows.

Anteriormente a Windows 10 / 8.1 tenía más protagonismo el CMD de toda la vida (o command prompt). No obstante Powershell viene incluido de forma nativa en sistemas Windows a partir de Windows 7 y en Windows Server 2008 en adelante.

La ejecución de scripts Powershell es algo muy común hoy en día en la administración de sistemas, porque permite automatizar tareas pesadas para no tener que realizar tanta manualidad.

Lo que ocurre es que el ajuste por defecto en Windows, aunque permite abrir y ejecutar comandos desde este terminal, no permite la ejecución de scripts debido al peligro que puede suponer. Si cargamos un script malintencionado, el sistema podría infectarse, volverse inestable, etcétera. Esto es algo con lo que me encontré un buen día, intentando cargar un script.

Solución al error de PowerShell «No se puede cargar el archivo porque la ejecución de scripts está deshabilidada en este sistema»

A continuación detallo tres métodos diferentes que nos llevarán al mismo resultado: seremos capaces de evitar el mensaje y saltarnos la prohibición que trae Windows por defecto. No cabe duda de que el primer método (que implica hacerlo desde la propia linea de comandos Powershell) es el más conveniente para el usuario medio.

Sin embargo, los otros métodos restantes serán de utilidad al administrador de sistemas o seguridad para controlar esta capacidad en entornos corporativos, además de poder automatizar su configuración.

Permitir ejecución de scripts Powershell en Windows 10

Abriremos la consola de Powershell pulsando WIN + X > Powershell (administrador) en sistemas Windows 10

Si aparece Símbolo de sistema en su lugar, escribiremos en el CMD «powershell» seguido de intro (si queremos trabajar desde esa misma ventana) o lo buscaremos en el lanzador de aplicaciones.

Abrir powershell Windows 10

Ahora que estamos en la consola, escribiremos:

Get-ExecutionPolicy

Seguro que veremos un ajuste como el siguiente (restricted).

Powershell Get-ExecutionPolicy

Ahora, para ver los modos de ejecución de scripts disponibles, escribiremos:

Get-ExecutionPolicy -list

Get-ExecutionPolicy -list

Modos de ExecutionPolicy

Estos son los modos de ejecución, de más restrictivo a menos restrictivo.

  • Restricted: Opción predefinida en Windows 10. No permite ejecutar scripts, ni archivos de configuración .ps1xml u otros similares, sino solo comandos.
  • Allsigned: Permite ejecución de scripts y archivos de configuración firmados por un editor de confianza. Esto incluye los escritos en el equipo local. Conlleva el riesgo de ejecutar un script que sea malintencionado, a pesar de haber sido firmado.
  • RemoteSigned: permite ejecutar scripts powershell y archivos de configuración descargados de internet (de cualquier forma). Conlleva cierto riesto, dado que no solicita firmas digitales para scripts diseñados en el equipo local. Para ejecutar scripts descargados de internet (sin firmar) es necesario usar la opción Unblock-File.
  • Unrestricted: permite ejecutar cualquier script o archivo de configuración, esté firmado o no. Muestra advertencia al usuario.
  • Bypass: similar al anterior, pero además de no bloquear tampoco alerta de los riesgos. Este modo se suele utilizar en integraciones de Powershell con otras aplicaciones, en las que funciona en una capa inferior, dado que dichas aplicaciones cuentan con un modelo de seguridad propio.
  • Undefined: no se establece directiva alguna. Esto se traduce normalmente en «Restricted», suponiendo que en todos los ámbitos se haya dejado sin definir.

Es recomedable utilizar el principio de mínimo privilegio, por lo que haremos lo siguiente:

Set-ExecutionPolicy RemoteSigned

Powershell Set-ExecutionPolicy

También es posible escribirlo así.

Set-ExecutionPolicy RemoteSigned -Force

Aceptaremos el aviso correspondiente, sabiendo lo que conlleva. Si queremos verificarlo, volveremos a escribir:

Get-ExecutionPolicy

Con este paso habremos terminado, no es preciso reiniciar.

Permitir ejecutar scripts Powershell mediante el Editor de registro

NOTA: siempre es recomendable hacer una copia de seguridad del registro antes de hacer cambios.

Pulsaremos la combinación de teclas WIN + R y escribiremos:

Regedit

Navegaremos por la ruta:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

Una vez allí, crearemos un nuevo valor de cadena con el nombre «Execution Policy»:

Habilitar scripts en powershell mediante editor del registo

Así es como debe quedar el valor de la nueva cadena:

Habilitar scripts en powershell mediante editor del registro 2

Tras aceptar los cambios, se habrá aplicado el nuevo ajuste.

Permitir ejecución de scripts para Powershell mediante Política de Grupo

Si disponemos de un sistema operativo Windows 10 Pro o Enterprise (en versiones anteriores es similar) podemos acceder al Editor de Directivas de Grupo. Para ello, pulsaremos la combinación WIN + R y escribiremos:

gpedit.msc

Navegaremos por los siguientes objetos:

Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows Powershell

Activar scripts powershell con Editor de Directivas de grupo

Ahora seleccionaremos «Activar la ejecución de scripts» y seleccionaremos Habilitada.

Habilitar scripts en Powershell

Os recomiendo seleccionar la opción más restrictiva: «Permitir solo scripts firmados

Espero que os resulte de ayuda. No dudéis en preguntar si tenéis alguna duda e intentaré ayudaros.

Alejandro Ver todo

Trabajo como consultor de ciberseguridad y me gusta lo que hago. Aficionado a la informática / tecnología en general, me gusta compartir con la gente lo poco que sé. También soy aficionado al deporte y los videojuegos.

27 comentarios sobre “Permitir la ejecución de scripts Powershell en Windows 10 Deja un comentario

  1. Muy bueno. Me acuerdo cuando empecé con el bastionado de equipos siguiendo las guías CCN-STIC, que al principio me encontraba con algunos PCs que no ejecutaban los Scripts adjuntos a las guías. Me estuve dando cabezazos hasta que me decidí a editar los Scripts y es cuando me di cuenta que la ejecución requería RemoteSigned. Fue cambiar de Restricted a RemoteSigned y todo fue como la seda. Eso sí, tenía que tener la precaución de volver a Restricted ya que al fin y al cabo se trataba de PCs bastionados.
    Salu2

    Le gusta a 1 persona

  2. Que tal a todos, realicé un codigo para una persona mayor (edad avanzada) este codigo ejecuta un proceso que debe activarse cada vez que enciende su computadora, esta diseñado con vbscript, este codigo copia un documente en el Escritorio y asi le facilita el trabajo a esta persona.

    Mi pregunta es: ¿Donde se debe copiar este script para que aparezca el documento en su escritorio?

    Seria posible en el regedit? Si no es alli, donde entonces? La idea es activarlo al aparecer el Escritorio. Por favor que sugerencia aportan?

    Me gusta

    • Hola Alejo, el script puede estar en cualquier parte de la máquina excepto en el registro. Para activarlo bastará configurar una tarea de Windows que lo lance cuando ocurra el evento de inicio de sesión de usuario, por ejemplo. El Id de evento sería 4624. Saludos.

      Me gusta

  3. Hola Alejandro! Muy bien explicado y funciono perfecto. Te queria consultar, tuve que realizar este procedimiento para finalizar correctamente la instalacion de gulp para desarrollo web. Pero me quede con la duda, esta es la manera correcta? No estamos exponiendo nuestra pc de más? Me llama la atencion que esta sea la manera de solucionar el error que tuve con gulp =/ Saludos!

    Me gusta

  4. Increible, estuve buscando por mucho tiempo la manera de poder convertir archivos pesados de CSV a JSON
    y de esta manera se logro. Muchas gracias por el gran aporte que has brindado

    Le gusta a 1 persona

  5. Hola Alejandro, mira que tengo este mensaje ejecutando desde visualcode un script de python:

    ¨Windows PowerShell no carga comandos de la ubicación actual de forma predeterminada¨ ya habilité la ejecución de scripts desde el gpedit.msc pero aun no me funciona

    Me gusta

Deja tu comentario (puedes hacerlo de forma anónima)

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.