Por defecto, la ejecución de scripts de Windows PowerShell está deshabilitada en el sistema. Por motivos de seguridad, todos los scripts de PowerShell deben estar firmados digitalmente, y este método se denomina “directivas de ejecución”.
Si un script no cumple esta condición, entonces la ejecución de scripts de PowerShell en el sistema está prohibida. Esto se debe principalmente al hecho de que el script puede contener algún código malicioso que puede dañar el sistema operativo.
PowerShell tiene varios modos de ejecución que determinan cual es el tipo de código que se permite ejecutar. Existen 5 modos de ejecución diferentes:
- Restringido (Restricted), es el valor predeterminado. Se bloquea la ejecución de todos los scripts y se permiten los comandos interactivos.
- Todos Firmados (All Signed), se permite ejecutar scripts que tengan una firma digital.
- Firmado Remotamente (Remote Signed), se permite la ejecución de scripts locales sin firma. Todos los scripts descargados deben estar firmados digitalmente.
- Sin restricciones (Unrestricted), se permite la ejecución de cualquier script. Cuando ejecutas un script sin firmar que hayas descargado de Internet, el programa podrá pedir confirmación.
- Ignorar (Bypass), no se bloquea nada, no aparecen advertencias ni requerimientos.
El modo predeterminado de PowerShell es el «Restringido«. En este modo, PowerShell funciona como un entorno interactivo. Si no has configurado PowerShell antes, entonces en lugar de ejecutarse el script verás un mensaje de error escrito con letras rojas tal y como se muestra en la captura de pantalla siguiente.
La forma más segura de solucionar este problema es: cambiar la directiva de ejecución al modo “Sin restricciones”, luego ejecutar el script y, por último, volver la directiva al modo “Restringido”.
Para cambiar la directiva de ejecución al modo “Sin restricciones”, utilicemos la consola PowerShell abierta con privilegios de administrador, y ejecutemos el siguiente comando:
Set-ExecutionPolicy Unrestricted
Después de ejecutar dicho comando, se nos pedirá que confirmemos el cambio de la directiva de ejecución. Respondamos S (Sí).
Ya podemos ejecutar el script. Sin embargo, estaremos poniendo el sistema en grave riesgo, así que en cuanto el script termine de ejecutarse, asegurémonos de restablecer la directiva de ejecución al modo “Restringido”. Podremos hacerlo usando el siguiente comando:
Set-ExecutionPolicy Restricted
Después de ejecutar dicho comando, se nos pedirá que confirmemos el cambio de la directiva de ejecución. Respondamos S (Sí).
A continuación, citaremos todos los comandos con los cuales podremos cambiar la directiva de ejecución.
Bloquear la ejecución de cualquier script. Valor predeterminado.
Set-ExecutionPolicy Restricted
Permitir la ejecución de scripts que tengan firma digital.
Set-ExecutionPolicy AllSigned
Los scripts preparados en un equipo local pueden ejecutarse sin restricciones, pero los descargados de Internet, solamente si están firmados digitalmente.
Set-ExecutionPolicy RemoteSigned
Permitir la ejecución de cualquier script. Cuando ejecutas un script sin firmar, que hayas descargado de Internet, el programa podrá pedir que confirmes la acción.
Set-ExecutionPolicy Unrestricted
No se bloquea nada, no aparecen advertencias ni requerimientos.
Set-ExecutionPolicy Bypass
Para ejecutar los comandos antes citados sin confirmar el cambio, debes usar el parámetro -Force, por ejemplo, ejecutando el siguiente comando:
Set-ExecutionPolicy Bypass -Force
Ahora no será necesario confirmar los cambios al ejecutar comandos.