Administración de la política de ejecución de scripts con PowerShell Set-ExecutionPolicy – ​​TrucosInformaticos

Powershell

Tiene una tarea que requiere un script de PowerShell y descargó uno de Internet. Pero cuando lo ejecutas, obtienes el siguiente mensaje de error:

Una de las características clave de seguridad en PowerShell es la Política de Ejecución, que determina el nivel de confianza para ejecutar scripts. En esta publicación de blog, exploraremos los diferentes aspectos de la administración de la política de ejecución de scripts mediante el cmdlet Set-ExecutionPolicy de PowerShell.

Descripción del alcance y el tipo de política de ejecución de scripts de PowerShell

La política de ejecución de PowerShell es una función de seguridad que controla las condiciones en las que se pueden ejecutar los scripts de PowerShell. Ayuda a prevenir la ejecución de scripts maliciosos y proporciona control sobre los scripts que se pueden ejecutar en un sistema.

La política de ejecución se puede establecer en diferentes ámbitos, lo que permite a los administradores definir la política para usuarios, procesos o máquinas específicos.

Tipos de políticas de ejecución

PowerShell proporciona varios tipos de políticas de ejecución, cada uno con diferentes niveles de seguridad y restricciones. Los tipos de políticas de ejecución disponibles son:

  • TodosFirmados: Requiere que todos los scripts y archivos de configuración estén firmados por un editor de confianza antes de que puedan ejecutarse.
  • RemotoFirmado: Requiere que todos los scripts y archivos de configuración descargados de Internet estén firmados por un editor de confianza. No es necesario firmar los scripts creados localmente.
  • Restringido: No permite la ejecución de todos los scripts y archivos de configuración, independientemente de su origen. Esta es la política de ejecución más segura.
  • Irrestricto: Permite la ejecución de todos los scripts y archivos de configuración sin restricciones. Esta es la política de ejecución menos segura.
  • Derivación: Omite la verificación de la política de ejecución por completo, lo que permite que se ejecuten todos los scripts. Esto se usa normalmente para solucionar problemas y con fines de desarrollo.
  • Indefinido: Representa una política de ejecución no definida o no reconocida.

Ámbitos de la política de ejecución

Las políticas de ejecución de PowerShell se pueden aplicar en diferentes ámbitos, que determinan el alcance del efecto de la política. Los alcances de la política de ejecución disponibles son:

  • MachinePolicy: este alcance establece la política de ejecución para todos los usuarios y procesos en la máquina. Está definido por la configuración de directiva de grupo y se aplica a todos los usuarios y procesos en la máquina.
  • Política de usuario: este ámbito establece la política de ejecución para todos los usuarios de la máquina. También está definido por la configuración de la directiva de grupo y se aplica a todos los usuarios de la máquina.
  • Proceso: este ámbito establece la política de ejecución solo para el proceso actual de PowerShell. No se guarda ni persiste.
  • Usuario actual: este ámbito establece la política de ejecución para el usuario actual. Se aplica solo al usuario actual y se guarda y persiste.
  • Máquina local: este ámbito establece la política de ejecución para todos los usuarios de la máquina. Se aplica a todos los usuarios de la máquina y se guarda y persiste.

Nota. Si la política de ejecución de Proceso, Usuario actualy Máquina local los alcances se establecen en Indefinido, la política efectiva aplicada a ese ámbito es Restringido. Si el MachinePolicy y Política de usuario los alcances están configurados para Indefinidosignifica que no están configurados a través de objetos de directiva de grupo y no afectan a nada.

Política de ejecución Orden de precedencia

Al determinar la política de ejecución efectiva, PowerShell sigue un orden de precedencia específico. El orden de precedencia de la política de ejecución, de mayor a menor, es el siguiente:

  1. MachinePolicy
  2. Política de usuario
  3. Proceso
  4. Usuario actual
  5. Máquina local

PowerShell comprueba la política de ejecución en cada ámbito y aplica la política del ámbito con la prioridad más alta. Si no se define ninguna política de ejecución en un ámbito particular, PowerShell pasa al siguiente ámbito en el orden de precedencia.

Para ver la lista de políticas de ejecución en cada ámbito, puede ejecutar el Get-ExecutionPolicy-List dominio. Este comando muestra las políticas de ejecución para todos los ámbitos disponibles y lo ayuda a comprender el orden en que se aplican las políticas.

Por ejemplo, la siguiente lista de políticas de ejecución es la predeterminada en una computadora con Windows 11.

política de ejecución de powershell

¿Cómo reconoce PowerShell un script remoto?

En la sección anterior (Tipos de políticas de ejecución), discutimos que la política RemoteSigned requiere que todos los scripts «procedentes de Internet» tengan una firma digital (Publicación relacionada. ¿Cómo firmar el script de PowerShell?).

Pero, ¿cómo reconoce PowerShell que un script proviene de Internet? Al mirar en el Arroyo información del expediente. Por ejemplo, descargué un script de Internet llamado Eliminar-IISLog.ps1.

Para verificar si este archivo proviene de una fuente externa, ejecutaré el siguiente comando para enumerar sus transmisiones.

Get-item .\Delete-IISLogs.ps1 -Stream *

Como puede ver, este archivo tiene dos zonas: $DATOS y Zona.Identificador. El flujo Zone.Identifier contiene el información de la zona donde se descargó el archivo.

política de ejecución de conjunto de PowerShell

Para mostrar el Zona.Identificador stream, vamos a ejecutar el siguiente comando.

Get-Content .\Delete-IISLogs.ps1 -Stream Zone.Identifier

establecer política de ejecución powershell

Como puede ver, este archivo provino de GitHub, que se clasifica en ZoneID 3. A continuación se muestra la tabla ZoneID para su referencia.

Zona ID Zona
——- ———————
0 mi computadora
1 zona de intranet local
2 Zona de sitios de confianza
3 Zona Internet
4 Zona de Sitios Restringidos

Configuración de la política de ejecución de scripts de PowerShell

Para establecer la política de ejecución para el script de PowerShell, el comando a ejecutar es el Establecer-ExecutionPolicy cmdlet.

El comando Set-ExecutionPolicy configura la política de ejecución de scripts en un sistema. Le permite especificar el nivel de confianza requerido para ejecutar scripts de PowerShell. Al establecer la política de ejecución, puede controlar si los scripts se pueden ejecutar y qué tipos de scripts se pueden ejecutar.

Sintaxis de Set-ExecutionPolicy

La sintaxis del comando Set-ExecutionPolicy es la siguiente:

Set-ExecutionPolicy [-ExecutionPolicy] <PolicyType> [-Scope <PolicyScope>]

Aquí, representa el tipo de política de ejecución deseada, como «Restringido,” “RemotoFirmado,” “Irrestricto”, etc. -Alcance El parámetro es opcional y le permite definir el alcance en el que se debe aplicar la política de ejecución, como el usuario actual, la máquina local, el proceso, etc. Si no se especifica, el alcance predeterminado es Máquina local.

Al ejecutar el comando Set-ExecutionPolicy con los parámetros apropiados, puede aplicar una política de ejecución específica que se alinee con sus requisitos de seguridad y políticas organizacionales.

Es importante tener en cuenta que cambiar la política de ejecución requiere privilegios administrativos y modificar la política de ejecución puede tener implicaciones de seguridad. Por lo tanto, se recomienda considerar cuidadosamente la política de ejecución deseada y su impacto antes de realizar cualquier cambio.

Establecer la política de ejecución del ámbito predeterminado (LocalMachine)

Para configurar el Máquina local política de ejecución de alcance, no necesita especificar la -Alcance parámetro. Sin él, el alcance predeterminado afectado es Máquina local.

Primero, confirmemos la política actual de ejecución de scripts de PowerShell.

Get-ExecutionPolicy -List

En este ejemplo, el Máquina local la política de ejecución es RemotoFirmado.

política de ejecución de scripts de powershell

Vamos a cambiarlo a TodosFirmados.

Set-ExecutionPolicy -ExecutionPolicy AllSigned

Como puede ver a continuación, sólo el Máquina local el alcance ha cambiado.

política de ejecución de cambios de powershell

Tenga en cuenta que puede recibir un mensaje de error similar al siguiente.

Set-ExecutionPolicy: PowerShell actualizó su política de ejecución correctamente, pero la configuración se anula con una política definida en un ámbito más específico. Debido a la anulación, su shell conservará su actual política de ejecución efectiva de RemoteSigned.

Este mensaje de error es un mensaje informativo que dice que la política de ejecución que cambió es para un ámbito con menor prioridad que el ámbito actual de su sesión. En este ejemplo, la política de alcance del proceso se establece en RemotoFirmado y prevalecerá sobre el Máquina local alcance.

Establecer la Política de Ejecución de un Ámbito Específico

Para cambiar la política de ejecución de un ámbito específico, debe especificarlo con el parámetro -Alcance.

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned 
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned 
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned 

# List all execution policies 
Get-ExecutionPolicy -List

establecer la directiva de ejecución powershell

Trabajar alrededor de la política de ejecución de scripts de PowerShell

Recuerde que la política de ejecución de scripts de PowerShell es una característica de seguridad, no una medida de seguridad. Se puede omitir o ignorar si el contexto del usuario tiene privilegios administrativos.

En algunos casos, es posible que deba evitar la política de ejecución de scripts de PowerShell, especialmente cuando ejecuta scripts de fuentes que no son de confianza o durante el desarrollo y las pruebas. Aquí hay un par de métodos para evitar la política de ejecución.

Uso del parámetro de omisión -ExecutionPolicy

Sin cambiar la política de ejecución de scripts de PowerShell, puede omitir la verificación de la política de ejecución mediante el -Omisión de política de ejecución parámetro al ejecutar scripts de PowerShell. Este parámetro anula la política de ejecución actual durante la ejecución del script.

Con este método, está iniciando un nuevo proceso de PowerShell con la política de ejecución Omitir.

PowerShell.exe -ExecutionPolicy Bypass -File <ScriptPath>

Reemplazar con la ruta al script de PowerShell que desea ejecutar.

En este ejemplo, la ejecución de scripts está deshabilitada porque la política de ejecución es Restringido. Cuando llamo al script directamente en mi sesión de PowerShell, aparece el error que dice: «El archivo C:\demo.ps1 no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema.

usando la política de ejecución de conjuntos de PowerShell

Como solución alternativa, puedo ejecutar el siguiente comando en su lugar. Este comando inicia una nueva instancia de Windows PowerShell.

powershell.exe -ExecutionPolicy Bypass -File C:\demo.ps1

omisión de política de ejecución

También puede iniciar una instancia de PowerShell Core (7x). El nombre del ejecutable es pwsh.exe.

pwsh.exe -ExecutionPolicy Bypass -File C:\demo.ps1

PowerShell establece la política de ejecución Permitir todo

Ejecutar el código de PowerShell en la memoria

Otra forma de solucionar la política de ejecución es importar el script de PowerShell directamente a la memoria y ejecutarlo sin escribirlo en el disco. Este método puede ser útil cuando tiene una política de ejecución restringida que impide la ejecución de scripts externos.

$scriptContent = Get-Content -Path <ScriptPath> -Raw 
Invoke-Expression -Command $scriptContent

Reemplazar con la ruta al script de PowerShell que desea ejecutar.

$scriptContent = Get-Content -Path C:\demo.ps1 -Raw 
Invoke-Expression -Command $scriptContent

Al importar el script a la memoria y usar el Expresión de invocación cmdlet, puede ejecutar el código de PowerShell sin activar la verificación de la política de ejecución.

política de ejecución de windows

Conclusión

Administrar la política de ejecución de scripts de PowerShell es crucial para mantener un equilibrio entre la seguridad y la funcionalidad. Al comprender los diferentes tipos de políticas de ejecución, alcances y orden de precedencia, puede controlar efectivamente la ejecución de scripts en su sistema.

Ya sea que necesite verificar la política de ejecución actual, establecer una nueva política o evitar la política para escenarios específicos, PowerShell Establecer-ExecutionPolicy cmdlet es la herramienta principal para administrar la política de ejecución de scripts de manera eficiente.

Recuerde elegir la política de ejecución adecuada según sus requisitos de seguridad y revise y actualice periódicamente las políticas para garantizar la seguridad y confiabilidad de sus scripts de PowerShell.

4/5 - (104 votos)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *