about_Execution_Policies

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

TEMA

about_Execution_Policies

DESCRIPCIÓN BREVE

Describe las directivas de ejecución de Windows PowerShell® y explica cómo administrarlas.

DESCRIPCIÓN LARGA

Las directivas de ejecución de Windows PowerShell permiten determinar las condiciones en que Windows PowerShell carga los archivos de configuración y ejecuta los scripts.

Puede establecer una directiva de ejecución para el equipo local, para el usuario actual o para una sesión determinada. También puede utilizar una configuración de directiva de grupo para establecer la directiva de ejecución para equipos y usuarios.

Las directivas de ejecución para el equipo local y el usuario actual se almacenan en el registro. No es necesario que establezca directivas de ejecución en su perfil de Windows PowerShell. La directiva de ejecución de una determinada sesión solo se almacena en memoria y se pierde cuando se cierra la sesión.

La directiva de ejecución no es un sistema de seguridad que restrinja las acciones del usuario. Por ejemplo, los usuarios pueden sortear fácilmente una directiva si escriben el contenido del script en la línea de comandos cuando no puedan ejecutar un script. En su lugar, la directiva de ejecución ayuda a los usuarios a establecer reglas básicas y evita que las infrinjan involuntariamente.

DIRECTIVAS DE EJECUCIÓN DE WINDOWS POWERSHELL

Las directivas de ejecución de Windows PowerShell son las siguientes:

"Restricted" es la directiva predeterminada.

RESTRICTED

- Directiva de ejecución predeterminada en Windows 8, Windows Server 2012 y Windows 8.1.

- Permite comandos individuales, pero no se ejecutarán scripts.

- Impide la ejecución de todos los archivos de scripts, incluidos los archivos de configuración y formato (.ps1xml), los archivos de scripts de módulos (.psm1) y los perfiles de Windows PowerShell (.ps1).

ALLSIGNED

- Pueden ejecutarse scripts.

- Requiere que todos los scripts y archivos de configuración estén firmados por un editor de confianza, incluidos los scripts que se escriban en el equipo local.

- Solicita confirmación antes de ejecutar scripts de publicadores que no haya clasificado como que son o no de confianza.

- Riesgos en la ejecución de scripts firmados, pero malintencionados.

REMOTESIGNED

- Pueden ejecutarse scripts. Se trata de la directiva de ejecución predeterminada en Windows Server 2012 R2.

- Requiere una firma digital de un editor de confianza en los scripts y archivos de configuración que se descarguen de Internet (incluidos los programas de correo electrónico y de mensajería instantánea).

- No requiere firmas digitales en los scripts que haya escrito en el equipo local (que no se hayan descargado de Internet).

- Ejecuta scripts que se descargan de Internet y no están firmados, si están desbloqueados, por ejemplo mediante el cmdlet Unblock-File.

- Riesgos en la ejecución de scripts de orígenes distintos a Internet y scripts firmados, pero malintencionados.

UNRESTRICTED

- Pueden ejecutarse scripts sin firmar. (Se corre el riesgo de ejecutar scripts malintencionados).

- Advierte al usuario antes de ejecutar archivos de configuración y scripts descargados de Internet.

BYPASS

- No se bloquea nada y tampoco se muestran advertencias ni mensajes.

- Esta directiva de ejecución está diseñada para configuraciones en las que un script de Windows PowerShell está integrado en una aplicación más grande o en configuraciones en las que Windows PowerShell es la base de un programa que tiene su propio modelo de seguridad.

UNDEFINED

- No hay ninguna directiva de ejecución establecida en el ámbito actual.

- Si la directiva de ejecución en todos los ámbitos es Undefined, la directiva de ejecución efectiva será Restricted, que es la directiva de ejecución predeterminada.

Nota: En los sistemas en los que no se distinguen las rutas de acceso de convención de nomenclatura universal (UNC) de las rutas de acceso de Internet, es posible que no se permita la ejecución de scripts identificados por una ruta de acceso UNC con la directiva de ejecución RemoteSigned.

ÁMBITO DE DIRECTIVA DE EJECUCIÓN

Puede establecer una directiva de ejecución que sea efectiva solo en un ámbito determinado.

Los valores válidos para Scope son Process, CurrentUser y LocalMachine. LocalMachine es el valor predeterminado cuando se establece una directiva de ejecución.

Los valores de Scope se muestran por orden de prioridad.

- PROCESS

La directiva de ejecución afecta solo a la sesión actual (el proceso de Windows PowerShell actual).

La directiva de ejecución se almacena en la variable de entorno $env:PSExecutionPolicyPreference, no en el registro, y se elimina cuando se cierra la sesión. No se puede cambiar la directiva mediante una modificación del valor de la variable.

- CURRENTUSER

La directiva de ejecución sólo afecta al usuario actual. Se almacena en la subclave del registro HKEY_CURRENT_USER.

- LOCALMACHINE

La directiva de ejecución afecta a todos los usuarios del equipo actual. Se almacena en la subclave del registro HKEY_LOCAL_MACHINE.

La directiva que tiene prioridad es efectiva en la sesión actual, incluso aunque se estableciera una directiva más restrictiva en un nivel de prioridad inferior.

Para más información, consulte Set-ExecutionPolicy.

OBTENCIÓN DE LA DIRECTIVA DE EJECUCIÓN

Para obtener la directiva de ejecución de Windows PowerShell que está en vigor en la sesión actual, use el cmdlet Get-ExecutionPolicy.

El comando siguiente obtiene la directiva de ejecución actual:

Get-ExecutionPolicy    

Para obtener todas las directivas de ejecución que afectan a la sesión actual y mostrarlas en orden de prioridad, escriba:

        Get-ExecutionPolicy -List

El resultado será similar a la siguiente salida de ejemplo:

                  Scope    ExecutionPolicy
                  -----    ---------------
          MachinePolicy          Undefined
             UserPolicy          Undefined
                Process          Undefined
            CurrentUser       RemoteSigned
           LocalMachine          AllSigned

En este caso, la directiva de ejecución en vigor es RemoteSigned porque la directiva de ejecución para el usuario actual tiene prioridad sobre la directiva de ejecución establecida para el equipo local.

Para obtener la directiva de ejecución establecida para un ámbito determinado, utilice el parámetro Scope de Get-ExecutionPolicy.

Por ejemplo, el comando siguiente obtiene la directiva de ejecución para el ámbito del usuario actual.

        Get-ExecutionPolicy -Scope CurrentUser
        

CAMBIO DE LA DIRECTIVA DE EJECUCIÓN

Para cambiar la directiva de ejecución Windows PowerShell en el equipo, use el cmdlet Set-ExecutionPolicy.

El cambio se aplica inmediatamente; no es necesario reiniciar Windows PowerShell.

Si establece la directiva de ejecución para el equipo local (valor predeterminado) o el usuario actual, el cambio se guarda en el registro y permanece en vigor hasta que se vuelva a cambiar.

Si establece la directiva de ejecución para el proceso actual, no se guarda en el registro. Se conserva hasta que se cierran el proceso actual y los procesos secundarios.

Nota: en Windows Vista y versiones posteriores de Windows, para ejecutar comandos que cambien la directiva de ejecución para el equipo local (valor predeterminado), inicie Windows PowerShell con la opción "Ejecutar como administrador".

Para cambiar la directiva de ejecución, escriba:

        Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Por ejemplo:

        Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Para establecer la directiva de ejecución en un ámbito determinado, escriba:

        Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

Por ejemplo:

        Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Un comando para cambiar una directiva de ejecución puede realizarse correctamente y, aun así, no cambiar la directiva de ejecución en vigor.

Por ejemplo, un comando que establece la directiva de ejecución para el equipo local puede realizarse correctamente, pero verse reemplazada por la directiva de ejecución para el usuario actual.

ELIMINACIÓN DE LA DIRECTIVA DE EJECUCIÓN

Para quitar la directiva de ejecución para un ámbito determinado, establezca el valor de la directiva de ejecución en Undefined.

Por ejemplo, para quitar la directiva de ejecución para todos los usuarios del equipo local, escriba:

        Set-ExecutionPolicy Undefined

O bien, escriba:

        Set-ExecutionPolicy Undefined -scope LocalMachine

Si no se establece ninguna directiva de ejecución en ningún ámbito, la directiva de ejecución en vigor será Restricted, que es el valor predeterminado.

ESTABLECIMIENTO DE UNA DIRECTIVA DE EJECUCIÓN DIFERENTE PARA UNA SESIÓN

Puede usar el parámetro ExecutionPolicy de PowerShell.exe para establecer una directiva de ejecución para una nueva sesión de Windows PowerShell. La directiva solo afecta a la sesión actual y a las sesiones secundarias.

Para establecer la directiva de ejecución para una nueva sesión, inicie Windows PowerShell en la línea de comandos (como Cmd.exe o Windows PowerShell) y, después, utilice el parámetro ExecutionPolicy de PowerShell.exe para establecer la directiva de ejecución.

Por ejemplo:

PowerShell.exe -ExecutionPolicy AllSigned

La directiva de ejecución que establezca no se almacena en el registro. En su lugar, se almacena en la variable de entorno $env:PSExecutionPolicyPreference. La variable se elimina cuando se cierra la sesión en la que se establece la directiva. No se puede cambiar la directiva mediante una modificación del valor de la variable.

Durante la sesión, la directiva de ejecución que está establecida para la sesión tiene prioridad sobre una directiva de ejecución que se establezca en el registro para el equipo local o el usuario actual. Sin embargo, no tiene prioridad sobre la directiva de ejecución definida mediante una configuración de directiva de grupo (que se explica a continuación).

USO DE UNA DIRECTIVA DE GRUPO PARA ADMINISTRAR LA DIRECTIVA DE EJECUCIÓN

Puede usar la configuración de directiva de grupo "Activar la ejecución de scripts" para administrar la directiva de ejecución de los equipos de la empresa. La configuración de la directiva de grupo reemplaza las directivas de ejecución establecidas en Windows PowerShell, en todos los ámbitos.

La configuración de directiva "Activar la ejecución de scripts" se explica a continuación:

-- Si deshabilita "Activar la ejecución de scripts", no se ejecutan scripts. Esto es equivalente a la directiva de ejecución "Restricted".

-- Si habilita "Activar la ejecución de scripts", puede seleccionar una directiva de ejecución. La configuración de directiva de grupo es equivalente a la siguiente configuración de directiva de ejecución.

        Group Policy                Execution Policy  
        ------------                ----------------
        Allow all scripts.          Unrestricted

        Allow local scripts         RemoteSigned
        and remote signed
        scripts. 

        Allow only signed           AllSigned
        scripts.

-- Si no se configura "Activar la ejecución de scripts", no tiene ningún efecto. La directiva de ejecución establecida en Windows PowerShell está en vigor.

Los archivos PowerShellExecutionPolicy.adm y PowerShellExecutionPolicy.admx agregan la directiva "Activar la ejecución de scripts" a los nodos Configuración del equipo y Configuración de usuario en el Editor de directivas de grupo en las siguientes rutas de acceso.

        For Windows XP and Windows Server 2003:
        Administrative Templates\Windows Components\Windows PowerShell

        For Windows Vista and later versions of Windows:
        Administrative Templates\Classic Administrative Templates\
        Windows Components\Windows PowerShell

Las directivas establecidas en el nodo Configuración del equipo tienen prioridad sobre las directivas establecidas en el nodo Configuración de usuario.

El archivo PowerShellExecutionPolicy.adm está disponible en el Centro de descarga de Microsoft. Para más información, consulte "Plantillas administrativas para Windows PowerShell" en https://go.microsoft.com/fwlink/?LinkId=131786.

Para más información, consulte about_Group_Policy_Settings en https://go.microsoft.com/fwlink/?LinkID=251696.

PRIORIDAD DE LA DIRECTIVA DE EJECUCIÓN

Al determinar la directiva de ejecución en vigor para una sesión, Windows PowerShell evalúa las directivas de ejecución en el orden de prioridad siguiente:

        - Group Policy: Computer Configuration
        - Group Policy: User Configuration
        - Execution Policy: Process (or PowerShell.exe -ExecutionPolicy)
        - Execution Policy: CurrentUser
        - Execution Policy: LocalMachine    

ADMINISTRACIÓN DE SCRIPTS FIRMADOS Y SIN FIRMAR

Si la directiva de ejecución de Windows PowerShell es RemoteSigned, Windows PowerShell no ejecutará scripts sin firmar que se descarguen de Internet (incluidos los scripts sin firmar que reciba mediante el correo electrónico y los programas de mensajería instantánea).

Puede firmar el script u optar por ejecutar un script sin firmar, sin cambiar la directiva de ejecución.

A partir de Windows PowerShell 3.0, puede utilizar el parámetro Stream del cmdlet Get-Item para identificar archivos que se bloquean porque se descargaron de Internet, y puede usar el cmdlet Unblock-File para desbloquear los scripts a fin de que se puedan ejecutar en Windows PowerShell.

Para más información, consulte about_Signing, Get-Item y Unblock-File.

VEA TAMBIÉN

about_Environment_Variables

about_Signing

Get-ExecutionPolicy

Set-ExecutionPolicy

Get-Item

Unblock-File

"Plantillas administrativas para Windows PowerShell"

(https://go.microsoft.com/fwlink/?LinkId=131786)

"Ayuda de consola PowerShell.exe"

(https://go.microsoft.com/fwlink/?LinkID=113439)