La ejecución de script en PowerShell esta bloqueado por defecto, ademas de la recomendación de bloquearlo en las directivas de grupo si estamos dentro de un directorio activo.
Pero en ocasiones nos vemos en la necesidad de ejecutar algun script en powershell. Como fue en mi caso activar el entrono virtual para desarrollar en Python. No suelo utilizar windows, pero las obligaciones son las que son.
Powershell nos ofrece varios comandos para configurar este tipo de configuraciones.
Estado de las politicas de ejecución
Para ver nuestra configuración respecto a la politica de ejecución de script en nuestro powershell podemos utlizar el comando
Get-ExecutionPolicy
La salida de este comando nos mostrara el nivel de restriccion en el que nos escontramos actualmente. El valor por defecto suele ser «Restricted». No podemos ejecutar ningun tipo de de script .ps1.
Tipos de politicas de ejecución de PowerShell
Los tipos de restricciones que nos podemos encontrar son las siguientes.
RESTRICTED: Es la opción predetermida a partir de sistemas Windows 8 y Windows Server 2012. No permite la ejecución de ningun tipo de script.
ALLSIGNED: Podemos ejecutar, siempre y cuando, el script este firmado por una organización de confianza. Antes de la ejecuión nos pedira autorización.
REMOTESIGNED: Es la opción predeterminada en Windows Server 2012 R2. Podemos ejecutar script, tanto locales como remotos. Los descargados desde internet tendran que estar desbloqueados.
UNRESTRICTED: Podemos ejecutar cualquier tipo de script, tanto lo firmado como los que no lo estan. Alto riesgo de ejecutar script peligrosos.
BYPASS: No bloquea la ejecuación de ningun script, tampoco nos pìde confirmación. Este modulo esta pensado para los script que se ejecutan embebidos dentro de otras aplicaciones más grandes.
UNDEFINED: Sin ningun tipo de restricciones.
Como cambiar las policas de ejecución en PowerShell
Aunque tengamos establecida la politica predeterminada, podemos establecer otro tipo de politica global que mejor se ajuste a nuestras necesidades. Para hacer esto utilizaremos el comando
Set-ExecutionPolicy
Si ejecutamos el comando sin ningun tipo de parametro, este no pedira el tipo de politca que deseamos utilizar.
Para saltarnos este paso podemos establecer el tipo de politica que deseamos utlizar seguido del comando, o seguido del paramentro «-ExecutionPolicy», por ejemplo
Set-ExecutionPolicy Unrestricted
o
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Pero en ocasiones las directivas establecidas en las politicas del dominio en el directorio activo, nos lo impide.
Ambitos en las directivas de ejecución
PowerShell nos estable varios ambitos de ejecución. Si por politicas en el directorio activo, estas bloque algun tipo, como es mi caso, el cambio global puede no estar permitido. Para saltar esta restrición podemos establecer el tipo de politica de ejecución ha algun ambito de ejecución en concreto.
Tipos de ambitos de policas de ejecuión
En PowerShell tenemos tres ambitos para ejecutar nuestro script.
PROCESS: La politica de ejecución se estable para la sesión actual. Al reiniciar se establecera de nuevo la politica establecida por defecto.
CURRENTUSER: Este ambito avarca al usuario actual. Se cambia en estado en la subclave que se encuentra en HKEY_CURRENT_USER que se encarga de almacenar la configuración del usuario actual.
LOCALMACHINE: Este ambito se aplica a la maquina local, cualquier usuario que se registra en la maquina afectada tendra la politica de ejecución que establezcamos.
Em mi caso el problema que me impedia cambiar la politica global es la restricción en las politicas del directorio activo para establecer el tipo en el ambito de LOCALMACHINE.
Podemos ver las configuraciones de los diferentes ambitos los podemos realizarar indicando el parametro -List al comando Get-ExecutionPolicy
Get-ExecutionPolicy -List
El comando de Set-ExecutionPolicy nos permite especificar en que ambito queremos interactuar.
Para ello ejecutaremos el comando de la siguiente forma Set-ExecutionPolicy -Scope Ambito_queremos_actuar tipo_politica, por ejemplo
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned