TEMA about_Execution_Policies DESCRIPCIÓN BREVE Describe las directivas de ejecución de Windows PowerShell y explica cómo se administran. DESCRIPCIÓN DETALLADA 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. Se puede establecer una directiva de ejecución para el equipo local, para el usuario actual o para una sesión determinada. También se puede utilizar una configuración de Directiva de grupo para establecer la directiva de ejecución de los equipos y usuarios. Las directivas de ejecución del equipo local y del usuario actual se almacenan en el Registro. No es necesario establecer las directivas de ejecución en el perfil de Windows PowerShell. La directiva de ejecución de una sesión determinada se almacena solamente en la memoria y se pierde cuando se cierra la sesión. La directiva de ejecución no es un sistema de seguridad que restringe las acciones del usuario. Por ejemplo, los usuarios pueden sortear con facilidad una directiva escribiendo el contenido del script en la línea de comandos cuando no pueden ejecutar un script. En lugar de ello, la directiva de ejecución ayuda a los usuarios a establecer reglas básicas y evita que se infrinjan involuntariamente. DIRECTIVAS DE EJECUCIÓN DE WINDOWS POWERSHELL ------------------------------------- Las directivas de ejecución de Windows PowerShell son: "Restricted" es la directiva predeterminada. Restricted - Directiva de ejecución predeterminada. - Admite comandos individuales, pero no permite ejecutar scripts. - Evita que se ejecuten todos los archivos de script, incluidos los archivos de formato y configuración (.ps1xml), los archivos de script de módulos (.psm1) y los perfiles de Windows PowerShell (.ps1). AllSigned - Permite ejecutar scripts. - Requiere que todas los scripts y archivos de configuración estén firmados por un editor de confianza, incluidos los scripts que se escriben en un equipo local. - Pide confirmación antes de ejecutar los scripts de editores que no se han clasificado para indicar si son de confianza o no. - Se corre el riesgo de ejecutar scripts sin firmar procedentes de orígenes distintos de Internet y malintencionados, aunque estén firmados. RemoteSigned - Permite ejecutar scripts. - Requiere una firma digital de un editor de confianza en scripts y archivos de configuración descargados de Internet (también desde programas de correo electrónico y de mensajería instantánea). - No requiere firma digital en los scripts ejecutados y escritos en el equipo local (que no se hayan descargado desde Internet). - Se corre el riesgo de ejecutar scripts malintencionados, aunque estén firmados. Unrestricted - Permite ejecutar scripts sin firma. (Se corre el riesgo de ejecutar scripts malintencionados.) - Advierte al usuario antes de ejecutar scripts y archivos de configuración que se descargan de Internet. Bypass - No se bloquea nada y no 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 mayor o para configuraciones en que Windows PowerShell constituye 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 es Undefined en todos los ámbitos, la directiva de ejecución efectiva es Restricted, que es la directiva de ejecución predeterminada. Nota: en los sistemas que no distinguen las rutas de la Convención de nomenclatura universal (UNC) de las rutas de Internet, puede ser que la directiva RemoteSigned no permita la ejecución de scripts identificados por una ruta UNC. ÁMBITO DE EJECUCIÓN DE LAS DIRECTIVAS ---------------------- Se puede establecer una directiva de ejecución que sea efectiva solamente en un ámbito determinado. Los valores válidos de 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 precedencia. - Process La directiva de ejecución afecta solamente a la sesión actual (el proceso actual de Windows PowerShell). La directiva de ejecución se almacena en la variable de entorno de $PSExecutionPolicyPreference. Este valor se elimina cuando se cierra la sesión en la que se establece la directiva. - CurrentUser La directiva de ejecución afecta solamente al usuario actual. Se almacena en la subclave HKEY_CURRENT_USER del Registro. - LocalMachine La directiva de ejecución afecta a todos los usuarios del equipo actual. Se almacena en la subclave HKEY_LOCAL_MACHINE del Registro. La directiva que tiene precedencia surte efecto en la sesión actual aunque se haya establecido una directiva más restrictiva en un nivel de precedencia inferior. Para obtener más información, vea Set-ExecutionPolicy. OBTENER LA DIRECTIVA DE EJECUCIÓN ------------------------------ Para obtener la directiva de ejecución de Windows PowerShell que está en vigor en la sesión actual, se utiliza 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 por orden de precedencia, escriba: get-executionpolicy -list El resultado se parecerá a la salida del ejemplo siguiente: Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser RemoteSigned LocalMachine AllSigned En este caso, la directiva de ejecución efectiva es RemoteSigned porque la directiva de ejecución correspondiente al usuario actual tiene precedencia sobre la directiva de ejecución establecida para el equipo local. Para obtener la directiva de ejecución establecida para un ámbito determinado, se utiliza 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 CAMBIAR LA DIRECTIVA DE EJECUCIÓN ------------------------------ Para cambiar la directiva de ejecución de Windows PowerShell en el equipo, se utiliza el cmdlet Set-ExecutionPolicy. El cambio surte efecto de inmediato; no es necesario reiniciar Windows PowerShell. Si la directiva de ejecución se establece para el equipo local (valor predeterminado) o para el usuario actual, el cambio se guarda en el Registro y permanece efectivo hasta que se vuelva a cambiar. Si la directiva de ejecución se establece para el proceso actual, no se guarda en el Registro. Se conserva hasta que se cierran el proceso actual y sus procesos secundarios. Nota: en Windows Vista y en las versiones posteriores de Windows, para ejecutar comandos que modifican la directiva de ejecución del equipo local (valor predeterminado), es preciso iniciar Windows PowerShell con la opción "Ejecutar como administrador". Para cambiar la directiva de ejecución, escriba: Set-ExecutionPolicy <nombre-de-la-directiva> Por ejemplo: Set-ExecutionPolicy RemoteSigned Para establecer la directiva de ejecución en un ámbito determinado, escriba: Set-ExecutionPolicy <nombre-de-la-directiva> -scope <ámbito> Por ejemplo: Set-ExecutionPolicy RemoteSigned -scope CurrentUser Aunque se ejecute correctamente, puede suceder que un comando para cambiar una directiva no cambie la directiva de ejecución efectiva. Por ejemplo, un comando que establece la directiva de ejecución del equipo local puede ejecutarse correctamente pero ser invalidado por la directiva de ejecución correspondiente al usuario actual. QUITAR LA DIRECTIVA DE EJECUCIÓN ---------------------------- Para quitar la directiva de ejecución de un ámbito determinado, se establece 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: set-executionpolicy Undefined -scope LocalMachine Si no hay ninguna directiva de ejecución establecida en ningún ámbito, la directiva de ejecución efectiva es Restricted, que es el valor predeterminado. ESTABLECER UNA DIRECTIVA DE EJECUCIÓN EN POWERSHELL.EXE ----------------------------------------- El parámetro ExecutionPolicy de PowerShell.exe se puede utilizar a fin de establecer una directiva de ejecución para una nueva sesión de Windows PowerShell. La directiva afecta solamente a la sesión actual y sus sesiones secundarias. Para establecer la directiva de ejecución de una nueva sesión, debe iniciarse Windows PowerShell en la línea de comandos (como Cmd.exe o Windows PowerShell) y, a continuación, se utiliza 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 se establece no se almacena en el Registro. En lugar de ello, se almacena en la variable de entorno de $PSExecutionPolicyPreference. La variable se elimina al cerrar la sesión en la que se ha establecido la directiva. Durante la sesión, la directiva de ejecución que se ha establecido para la sesión tiene precedencia sobre una directiva de ejecución que esté establecida en el Registro para el equipo local o el usuario actual. Sin embargo, no tiene precedencia sobre la directiva de ejecución establecida mediante una configuración de Directiva de grupo (explicada más adelante). UTILIZAR LA DIRECTIVA DE GRUPO PARA ADMINISTRAR LAS DIRECTIVAS DE EJECUCIÓN ------------------------------------------- La opción de activación de la ejecución de scripts de la Directiva de grupo se puede utilizar para administrar la directiva de ejecución de los equipos de la empresa. La configuración de la Directiva de grupo invalida las directivas de ejecución establecidas en todos los ámbitos de Windows PowerShell. La opción de activación de la ejecución de scripts de la directiva funciona como sigue: -- Si se deshabilita la activación de la ejecución de scripts, los scripts no se ejecutan. Equivale a la directiva de ejecución "Restricted". -- Si se habilita la activación de la ejecución de script, se puede seleccionar una directiva de ejecución. La configuración de la Directiva de grupo es equivalente a la configuración de directiva de ejecución siguiente. Directiva de grupo Directiva de ejecución ------------ ---------------- Permitir todos los scripts. Unrestricted Permitir los scripts locales RemoteSigned y los remotos firmados. Permitir solo scripts firmados. AllSigned -- Si la activación de la ejecución de scripts no se configura, no surte efecto. La directiva de ejecución establecida en Windows PowerShell es la efectiva. El archivo PowerShellExecutionPolicy.adm agrega la directiva de activación de la ejecución de script a los nodos Configuración del equipo y Configuración de usuario del Editor de directivas de grupo en las rutas de acceso siguientes. Para Windows XP y Windows Server 2003: Plantillas administrativas\Componentes de Windows\Windows PowerShell Para Windows Vista y versiones posteriores de Windows: Plantillas administrativas\Plantillas administrativas clásicas\Componentes de Windows\Windows PowerShell Las directivas establecidas en el nodo Configuración del equipo tienen precedencia sobre las establecidas en el nodo Configuración de usuario. El archivo PowerShellExecutionPolicy.adm está disponible en el Centro de descarga de Microsoft. Para obtener más información, vea "Administrative Templates for Windows PowerShell" en https://go.microsoft.com/fwlink/?LinkId=131786. PRECEDENCIA DE LAS DIRECTIVAS DE EJECUCIÓN --------------------------- Al determinar la directiva de ejecución efectiva para una sesión, Windows PowerShell evalúa las directivas de ejecución en el orden de precedencia siguiente: - Directiva de grupo: Configuración del equipo - Directiva de grupo: Configuración de usuario - Directiva de ejecución: Process (o PowerShell.exe - ExecutionPolicy) Directiva de ejecución: CurrentUser - Directiva de ejecución: LocalMachine ADMINISTRAR SCRIPTS FIRMADOS Y SIN FIRMAR ---------------------------------- Si la directiva de ejecución de Windows PowerShell es RemoteSigned, Windows PowerShell no ejecutará scripts sin firma descargados desde Internet (ni desde programas de correo electrónico y mensajería instantánea). Se puede firmar el script o bien optar por ejecutar un script sin firmar sin cambiar la directiva de ejecución. Para obtener más información, vea about_Signing. VEA TAMBIÉN Get-ExecutionPolicy Set-ExecutionPolicy about_Signing "Administrative Templates for Windows PowerShell" (https://go.microsoft.com/fwlink/?LinkId=131786)