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ódigo malicioso y no confiable desde scripts de PowerShell. La política de ejecución determina la configuración para ejecutar scripts de PowerShell. En este artículo, veremos la configuración disponible para ejecutar scripts PS en Windows, cómo cambiar la Política de ejecución y configurar las políticas de ejecución de scripts de PowerShell para equipos de dominio que utilizan GPO.
La ejecución de scripts de PowerShell está deshabilitada en este sistema
Al intentar ejecutar cualquier script de PowerShell (un archivo PS1) en Windows 10 limpio, se produce el siguiente error:
File C:psscript.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 directiva de ejecución de scripts de PowerShell en Windows con el siguiente comando:
Get-ExecutionPolicy
Están disponibles los siguientes valores de la directiva de ejecución de PowerShell:
- Restringido – la ejecución de scripts de PowerShell está deshabilitada, solo puede ejecutar comandos interactivos en la consola PS;
- AllSigned – solo se permiten los scripts PS firmados con una firma digital de un editor de confianza (puede firmar un script con un certificado autofirmado y agregarlo a los 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 de PowerShell locales 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);
- Irrestricto – todos los scripts de PowerShell pueden ejecutarse;
Cuando intente ejecutar scripts de PowerShell de terceros, es posible que se le solicite que confirme el inicio (consulte a continuación).
- Derivación – se permite ejecutar cualquier archivo PS (no se muestran advertencias). La política se usa generalmente para ejecutar scripts PS automáticamente sin mostrar notificaciones (por ejemplo, cuando los scripts se ejecutan a través de GPO, SCCM, Programador de tareas, etc.) y no se recomienda para uso permanente;
- Defecto – restablece la configuración de ejecución de scripts de PowerShell a los predeterminados;
En Windows 10 el valor predeterminado para la política de ejecución de PowerShell es Restringido, y en Windows Server 2016 es RemoteSigned.
- Indefinido – 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 mediante la política de ejecución?
Para cambiar el valor actual de la directiva de ejecución de scripts de PowerShell, Set-ExecutionPolicy Se utiliza el cmdlet.
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 utilizar el Fuerza parámetro.
Set-ExecutionPolicy RemoteSigned –Force
Si ha establecido el valor de la Política de ejecución de PowerShell en Irrestricto, seguirá viendo el mensaje cuando intente ejecutar scripts remotos desde carpetas compartidas por las 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")

ZoneId identificador que un navegador establece en la secuencia alternativa al descargar un archivo (consulte el artículo ¿Cómo sabe Windows si un archivo se descargó de Internet?). Puede desbloquear el archivo marcando Desatascar en las propiedades del archivo o borre la etiqueta de zona con el Unblock-File cmdlet. También debe distinguir entre los diferentes ámbitos de la política de ejecución de PowerShell:
- MachinePolicy – se establece mediante GPO y se aplica a todos los usuarios de una computadora;
- UserPolicy – también se configura mediante GPO y se aplica a los usuarios de computadoras;
- Proceso – La configuración de la política de ejecución se aplica solo a la sesión actual de PowerShell (y se restablece una vez finalizado el proceso de powershell.exe);
- Usuario actual – la Política de ejecución se aplica únicamente al usuario actual (un parámetro de la clave de registro HKEY_CURRENT_USER);
- Máquina local 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 alcance de la política mediante el Alcance parámetro del cmdlet Set-ExecutionPolicy. Por ejemplo:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
Comprobemos 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 directiva de ejecución que establece mediante 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 1 ShellIds Microsoft.PowerShell y verifique el valor REG_SZ del EjecuciónPolítica parámetro. Debería cambiar a Restringido (los valores de parámetro permitidos son Restringido, AllSigned, RemoteSigned, Bypass, Unrestricted y Indefinido).
La misma configuración para el ámbito CurrentUser se encuentra en HKEY_CURRENT_USER SOFTWARE Microsoft PowerShell 1 ShellIds Microsoft.PowerShell.
Tenga en cuenta que ExecutionPolicy con el AllSigned El valor a nivel de LocalMachine se utiliza con mayor frecuencia en un entorno corporativo. Proporciona el mejor equilibrio entre seguridad y conveniencia. Para uso personal, puede utilizar la configuración RemoteSigned en su computadora. La política de omisión puede usarse solo 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.
- En el editor de GPO de dominio (
gpmc.msc), cree un nuevo GPO 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 scripts de PowerShell; - Abrir computadora Configuración -> Políticas -> Plantillas administrativas -> Componentes de Windows -> Windows PowerShell en el editor de GPO y busque el Activar la ejecución de script parámetro.
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.
- La política puede tener tres valores:
- Permitir solo scripts firmados – correspondiente a la política AllSigned
- Permitir secuencias de comandos locales y secuencias de comandos firmadas de forma remota – correspondiente a la política PS RemoteSigned
- Permitir todos los scripts – correspondiente a la política sin restricciones

- Establezca el valor de política que desee, guarde el GPO y actualice la configuración de la política de grupo en su computadora;
- Asegúrese de que se hayan aplicado nuevas configuraciones de ejecución al alcance 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 secuencias de comandos 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.

¿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 compruebe si se ejecuta como administrador.
Puede obtener el contenido del script utilizando Get-Content y redirigirlo al flujo de entrada estándar de la consola PS.
Get-Content c:pscheck_process_elevation.ps1 | PowerShell.exe -noprofile –
O puede ejecutar un nuevo proceso de powershell.exe con la política de omisión:
powershell.exe -noprofile -executionpolicy bypass -file c:pscheck_process_elevation.ps1






