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á deshabilitada 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 línea 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.
Ahora que estamos en la consola, escribiremos:
Get-ExecutionPolicy
Seguro que veremos un ajuste como el siguiente (restricted).
Ahora, para ver los modos de ejecución de scripts disponibles, escribiremos:
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
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»:
Así es como debe quedar el valor de la nueva cadena:
Tras aceptar los cambios, se habrá aplicado el nuevo ajuste.
Consejo del día: Protege tu PC con los mejores antivirus gratis Windows 10. He creado un listado que espero que te sea de gran utilidad. También tienes opciones premium para una seguridad más completa. ¡Seguimos!.
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
Ahora seleccionaremos «Activar la ejecución de scripts» y seleccionaremos Habilitada.
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.