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"