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.

Anuncios

2 comentarios en “Permitir la ejecución de scripts Powershell en Windows 10

  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

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

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.