Búsqueda de sitios web

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


De forma predeterminada, la configuración de Windows impide que se ejecuten los scripts de PowerShell. Desde una perspectiva de seguridad, es importante restringir la ejecución de códigos no confiables y maliciosos desde scripts de PowerShell. La política de ejecución determina la configuración para ejecutar scripts de PowerShell. En este artículo, veremos las configuraciones disponibles para ejecutar secuencias de comandos de PS en Windows, cómo cambiar la política de ejecución y configurar las políticas de ejecución de secuencias de comandos de PowerShell para computadoras de dominio que usan GPO.

La ejecución de secuencias de comandos de PowerShell está deshabilitada en este sistema

Al intentar ejecutar cualquier secuencia de comandos de PowerShell (un archivo PS1) en Windows 10 limpio, se produce el siguiente error:

File C:\ps\script.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

Puede obtener la configuración actual de la política de ejecución de scripts de PowerShell en Windows con el siguiente comando:

Get-ExecutionPolicy

Los siguientes valores de la política de ejecución de PowerShell están disponibles:

  • Restricted

    - la ejecución de scripts de PowerShell está deshabilitada, solo puede ejecutar comandos interactivos en la consola PS;

  • AllSigned

    - solo se permiten secuencias de comandos de PS firmadas con una firma digital de un editor de confianza (puede firmar una secuencia de comandos con un certificado autofirmado y agregarlo a certificados raíz de confianza). Al ejecutar scripts que no son de confianza, aparece la siguiente advertencia:

    Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers.
  • RemoteSigned

    - puede ejecutar scripts locales de PowerShell sin restricciones. Puede ejecutar archivos PS remotos con una firma digital (no puede ejecutar archivos PS1 descargados de Internet o iniciados desde una carpeta de red compartida a través de la ruta UNC);

  • Unrestricted

    - todos los scripts de PowerShell pueden ejecutarse;

    Al intentar ejecutar secuencias de comandos de PowerShell de terceros, es posible que se le solicite que confirme el inicio (consulte a continuación).

  • Bypass 

    - Se permite la ejecución de cualquier archivo PS (no se muestran advertencias). La política generalmente se usa para ejecutar secuencias de comandos de PS automáticamente sin mostrar ninguna notificación (por ejemplo, cuando las secuencias de comandos se ejecutan a través de GPO, SCCM, Programador de tareas, etc.) y no se recomienda para uso permanente;

  • Default 

    - restablece la configuración de ejecución de secuencias de comandos de PowerShell a las predeterminadas;

    En Windows 10, el valor predeterminado para la política de ejecución de PowerShell es Restringido, y en Windows Server 2016 es RemoteSigned.

  • Undefined

    - la política no está establecida. La política Restringida se aplica a los sistemas operativos de escritorio y RemoteSigned para los de servidor.

¿Cómo permitir que PowerShell ejecute scripts usando la política de ejecución?

Para cambiar el valor actual de la política de ejecución de secuencias de comandos de PowerShell, se usa el cmdlet Set-ExecutionPolicy.

Por ejemplo, permitamos ejecutar archivos de script PS locales:

Set-ExecutionPolicy RemoteSigned

Confirme el cambio de la política de ejecución para los scripts de PS1 presionando Y o A.

Para evitar mostrar el mensaje de confirmación, puede usar el parámetro Forzar.

Set-ExecutionPolicy RemoteSigned -Force

Si ha establecido el valor de la Política de ejecución de PowerShell en Sin restricciones, seguirá viendo el aviso cuando intente ejecutar scripts remotos desde carpetas compartidas mediante rutas UNC o archivos descargados de Internet:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

¿Cómo diferencia PowerShell entre scripts locales y remotos? es debido a la

ZoneId

identificador que un navegador establece en el flujo alternativo al descargar un archivo (consulte el artículo ¿Cómo sabe Windows si un archivo se descargó de Internet?). Puede desbloquear el archivo marcando Desbloquear en las propiedades del archivo o borrar la etiqueta de zona usando el

Unblock-File

cmdlet.

También debe distinguir entre diferentes ámbitos de la política de ejecución de PowerShell:

MachinePolicy

- se configura usando GPO y se aplica a todos los usuarios de una computadora;

UserPolicy

- también se configura usando GPO y se aplica a los usuarios de computadoras;

Process

- La configuración de la política de ejecución se aplica solo a la sesión actual de PowerShell (y se restablece después de que finaliza el proceso powershell.exe);

CurrentUser

- la política de ejecución se aplica solo al usuario actual (un parámetro de la clave de registro HKEY_CURRENT_USER);

LocalMachine

es una política para todos los usuarios de una computadora (un parámetro de la clave de registro HKEY_LOCAL_MACHINE).

Puede establecer el ámbito de la política mediante el parámetro Alcance del cmdlet Set-ExecutionPolicy. Por ejemplo:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force

Verifiquemos la configuración actual de ExecutionPolicy para todos los ámbitos:

Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Bypass
CurrentUser Undefined
LocalMachine RemoteSigned

Los valores de la política de ejecución que establece con el cmdlet Set-ExecutionPolicy para los ámbitos CurrentUser y LocalMachine se almacenan en el registro. Por ejemplo, ejecute este comando:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted -Force

Abra la clave de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell \ShellIds\Microsoft.PowerShell y verifique el valor REG_SZ del parámetro ExecutionPolicy. Debería cambiar a Restringido (los valores de parámetros permitidos son Restringido, Todos firmados, Remotos firmados, Omitir, Sin restricciones y No definido).

La misma configuración para el alcance de CurrentUser se encuentra en HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell \ShellIds\Microsoft.PowerShell.

Significa que puede implementar la configuración de la política de ejecución de secuencias de comandos de PowerShell a través del registro mediante las Preferencias de la política de grupo.

Tenga en cuenta que ExecutionPolicy con el valor AllSigned en el nivel LocalMachine se usa con mayor frecuencia en un entorno corporativo. Proporciona el mejor equilibrio entre seguridad y comodidad. Para uso personal, puede usar la configuración RemoteSigned en su computadora. La política Omitir solo se puede usar para ejecutar algunas tareas (por ejemplo, para ejecutar scripts usando GPO o tareas en el Programador de tareas).

Establecer la política de ejecución de PowerShell en Active Directory mediante GPO

Puede configurar la Política de ejecución para scripts de PowerShell en servidores o equipos de dominio en el dominio de Active Directory mediante Políticas de grupo.

  1. En el editor de GPO del dominio (

    gpmc.msc

    ), cree un GPO nuevo o edite uno existente y vincúlelo a la unidad organizativa que contiene los equipos a los que desea aplicar la política de ejecución de secuencias de comandos de PowerShell;

  2. Abra la Configuración de la computadora -> Políticas -> Plantillas administrativas -> Componentes de Windows -> Windows PowerShell en el editor de GPO y busque el parámetro Activar ejecución de script.

    Existe la misma política en la sección de GPO de usuario: Configuración de usuario, pero la política de la computadora tiene una prioridad más alta.

  3. La póliza puede tener tres valores:

    1. Permitir solo scripts firmados: correspondiente a la política AllSigned

    2. Permitir secuencias de comandos locales y secuencias de comandos firmadas de forma remota, según la política de PS RemoteSigned

    3. Permitir todos los scripts: correspondiente a la política Sin restricciones

  4. Establezca el valor de la política que desee, guarde el GPO y actualice la configuración de la Política de grupo en su computadora;

  5. Asegúrese de que se hayan aplicado nuevas configuraciones de ejecución al alcance de MachinePolicy.

Después de configurar la Política de ejecución mediante GPO, no podrá cambiar la configuración de la política de ejecución de scripts manualmente. Si intenta cambiar la configuración de la política de ejecución en una computadora a la que se aplica el GPO, aparece el siguiente error:

Set-ExecutionPolicy: Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.

De la misma manera, puede configurar la política de ejecución en una computadora independiente utilizando el editor de GPO local: gpedit.msc.

¿Cómo omitir la política de ejecución de PowerShell en Windows?

Hay algunos trucos que pueden ayudarlo si desea ejecutar un script de PowerShell en su computadora sin cambiar la configuración de la Política de ejecución. Por ejemplo, quiero ejecutar un script simple de PS1 que verifique si se ejecuta como administrador.

Puede obtener el contenido del script mediante Get-Content y redirigirlo al flujo de entrada estándar de la consola PS.

Get-Content c:\ps\check_process_elevation.ps1 | PowerShell.exe -noprofile -

O puede ejecutar un nuevo proceso powershell.exe con la política Omitir:

powershell.exe -noprofile -executionpolicy bypass -file c:\ps\check_process_elevation.ps1

Artículos relacionados