Set-ExecutionPolicy

Establece las directivas de ejecución de PowerShell para equipos Windows.

Syntax

Set-ExecutionPolicy
   [-ExecutionPolicy] <ExecutionPolicy>
   [[-Scope] <ExecutionPolicyScope>]
   [-Force]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Description

El Set-ExecutionPolicy cmdlet cambia las directivas de ejecución de PowerShell para equipos Windows. Para obtener más información, vea about_Execution_Policies.

A partir de PowerShell 6.0 para equipos que no son Windows, la directiva de ejecución predeterminada es Sin restricciones y no se puede cambiar. El Set-ExecutionPolicy cmdlet está disponible, pero PowerShell muestra un mensaje de consola que no es compatible.

Una directiva de ejecución forma parte de la estrategia de seguridad de PowerShell. Las directivas de ejecución determinan si puede cargar archivos de configuración, como el perfil de PowerShell o ejecutar scripts. Además, si los scripts deben firmarse digitalmente antes de que se ejecuten.

El Set-ExecutionPolicy ámbito predeterminado del cmdlet es LocalMachine, que afecta a todos los usuarios que usan el equipo. Para cambiar la directiva de ejecución de LocalMachine, inicie PowerShell con Ejecutar como administrador.

Para mostrar las directivas de ejecución de cada ámbito en el orden de prioridad, use Get-ExecutionPolicy -List. Para ver la directiva de ejecución efectiva para la sesión de PowerShell, use Get-ExecutionPolicy sin parámetros.

Ejemplos

Ejemplo 1: Establecimiento de una directiva de ejecución

En este ejemplo se muestra cómo establecer la directiva de ejecución para el equipo local.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

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

El Set-ExecutionPolicy cmdlet usa el parámetro ExecutionPolicy para especificar la directiva RemoteSigned . El parámetro Scope especifica el valor de ámbito predeterminado, LocalMachine. Para ver la configuración de la directiva de ejecución, use el Get-ExecutionPolicy cmdlet con el parámetro List .

Ejemplo 2: Establecimiento de una directiva de ejecución que entra en conflicto con un directiva de grupo

Este comando intenta establecer la directiva de ejecución del ámbito LocalMachine en Restringido. LocalMachine es más restrictivo, pero no es la directiva eficaz porque entra en conflicto con un directiva de grupo. La directiva restringida se escribe en el subárbol del Registro HKEY_LOCAL_MACHINE.

PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine

Set-ExecutionPolicy : PowerShell updated your local preference successfully, but the setting is
overridden by the Group Policy applied to your system. Due to the override, your shell will retain
its current effective execution policy of "AllSigned". Contact your Group Policy administrator for
more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted

PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds

Name                    Property
----                    --------
Microsoft.PowerShell    Path            : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
                        ExecutionPolicy : Restricted
ScriptedDiagnostics     ExecutionPolicy : Unrestricted

El Set-ExecutionPolicy cmdlet usa el parámetro ExecutionPolicy para especificar la directiva Restricted . El parámetro Scope especifica el valor de ámbito predeterminado, LocalMachine. El Get-ChildItem cmdlet usa el parámetro Path con el proveedor HKLM para especificar la ubicación del Registro.

Ejemplo 3: Aplicación de la directiva de ejecución desde un equipo remoto a un equipo local

Este comando obtiene el objeto de directiva de ejecución de un equipo remoto y establece la directiva en el equipo local. Get-ExecutionPolicy envía un objeto Microsoft.PowerShell.ExecutionPolicy a la canalización. Set-ExecutionPolicy acepta la entrada de canalización y no requiere el parámetro ExecutionPolicy .

PS> Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

El Invoke-Command cmdlet se ejecuta en el equipo local y envía scriptBlock al equipo remoto. El parámetro ComputerName especifica el equipo remoto , Server01. El parámetro ScriptBlock se ejecuta Get-ExecutionPolicy en el equipo remoto. El Get-ExecutionPolicy objeto se envía a la Set-ExecutionPolicycanalización a . Set-ExecutionPolicy aplica la directiva de ejecución al ámbito predeterminado del equipo local, LocalMachine.

Ejemplo 4: Establecimiento del ámbito de una directiva de ejecución

En este ejemplo se muestra cómo establecer una directiva de ejecución para un ámbito especificado, CurrentUser. El ámbito CurrentUser solo afecta al usuario que establece este ámbito.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

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

Set-ExecutionPolicy usa el parámetro ExecutionPolicy para especificar la directiva AllSigned . El parámetro Scope especifica CurrentUser. Para ver la configuración de la directiva de ejecución, use el Get-ExecutionPolicy cmdlet con el parámetro List .

La directiva de ejecución efectiva para el usuario se convierte en AllSigned.

Ejemplo 5: Quitar la directiva de ejecución para el usuario actual

En este ejemplo se muestra cómo usar la directiva de ejecución Undefined para quitar una directiva de ejecución para un ámbito especificado.

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

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

Set-ExecutionPolicy usa el parámetro ExecutionPolicy para especificar la directiva Undefined . El parámetro Scope especifica CurrentUser. Para ver la configuración de la directiva de ejecución, use el Get-ExecutionPolicy cmdlet con el parámetro List .

Ejemplo 6: Establecimiento de la directiva de ejecución para la sesión actual de PowerShell

El ámbito de proceso solo afecta a la sesión actual de PowerShell. La directiva de ejecución se guarda en la variable $env:PSExecutionPolicyPreference de entorno y se elimina cuando se cierra la sesión.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process

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

Set-ExecutionPolicy usa el parámetro ExecutionPolicy para especificar la directiva AllSigned. El parámetro Scope especifica el valor Process. Para ver la configuración de la directiva de ejecución, use el Get-ExecutionPolicy cmdlet con el parámetro List .

Ejemplo 7: Desbloquear un script para ejecutarlo sin cambiar la directiva de ejecución

En este ejemplo se muestra cómo la directiva de ejecución RemoteSigned impide ejecutar scripts sin firmar.

Un procedimiento recomendado es leer el código del script y comprobar que es seguro antes de usar el Unblock-File cmdlet . El Unblock-File cmdlet desbloquea los scripts para que se puedan ejecutar, pero no cambia la directiva de ejecución.

PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

.\Start-ActivityTracker.ps1 : File .\Start-ActivityTracker.ps1 cannot be loaded.
The file .\Start-ActivityTracker.ps1 is not digitally signed.
The script will not execute on the system.
For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

PS> Unblock-File -Path .\Start-ActivityTracker.ps1

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

Task 1:

Set-ExecutionPolicy usa el parámetro ExecutionPolicy para especificar la directiva RemoteSigned. La directiva se establece para el ámbito predeterminado, LocalMachine.

El Get-ExecutionPolicy cmdlet muestra que RemoteSigned es la directiva de ejecución efectiva para la sesión actual de PowerShell.

El script Start-ActivityTracker.ps1 se ejecuta desde el directorio actual. RemoteSigned bloquea el script porque el script no está firmado digitalmente.

En este ejemplo, el código del script se ha revisado y comprobado como seguro para ejecutarse. El Unblock-File cmdlet usa el parámetro Path para desbloquear el script.

Para comprobar que Unblock-File no cambió la directiva de ejecución, Get-ExecutionPolicy muestra la directiva de ejecución efectiva , RemoteSigned.

El script, Start-ActivityTracker.ps1 se ejecuta desde el directorio actual. El script comienza a ejecutarse porque el Unblock-File cmdlet lo ha desbloqueado.

Parámetros

-Confirm

Le solicita su confirmación antes de ejecutar el cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExecutionPolicy

Especifica la directiva de ejecución. Si no hay ninguna directiva de grupo y la directiva de ejecución de cada ámbito se establece en Sin definir, Restricted se convierte en la directiva efectiva para todos los usuarios.

Los valores aceptables de la directiva de ejecución son los siguientes:

  • AllSigned. Requiere que todos los scripts y archivos de configuración estén firmados por un editor de confianza, incluidos los scripts escritos en el equipo local.
  • Omisión. No se bloquea nada y tampoco se muestran advertencias ni mensajes.
  • Default. Establece la directiva de ejecución predeterminada. Restringido para clientes de Windows o RemoteSigned para servidores Windows.
  • RemoteSigned. Requiere que todos los scripts y archivos de configuración descargados de Internet estén firmados por un editor de confianza. Directiva de ejecución predeterminada para equipos con Windows Server.
  • Restringido. No carga archivos de configuración ni ejecuta scripts. Directiva de ejecución predeterminada para equipos cliente de Windows.
  • Sin definir. No se establece ninguna directiva de ejecución para el ámbito. Quita una directiva de ejecución asignada de un ámbito que un directiva de grupo no establece. Si la directiva de ejecución en todos los ámbitos es Undefined, la directiva de ejecución efectiva es Restringida.
  • Sin restricciones. A partir de PowerShell 6.0, esta es la directiva de ejecución predeterminada para equipos que no son Windows y no se puede cambiar. Carga todos los archivos de configuración y ejecuta todos los scripts. Si ejecuta un script sin firmar que se descargó de Internet, se le pedirá permiso antes de que se ejecute.
Type:ExecutionPolicy
Accepted values:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

Suprime todos los mensajes de confirmación. Tenga cuidado con este parámetro para evitar resultados inesperados.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Scope

Especifica el ámbito afectado por una directiva de ejecución. El ámbito predeterminado es LocalMachine.

La directiva de ejecución efectiva viene determinada por el orden de prioridad de la siguiente manera:

  • MachinePolicy. Se establece mediante un directiva de grupo para todos los usuarios del equipo.
  • UserPolicy. Se establece mediante un directiva de grupo para el usuario actual del equipo.
  • Proceso. Afecta solo a la sesión actual de PowerShell.
  • CurrentUser. Afecta solo al usuario actual.
  • LocalMachine. Ámbito predeterminado que afecta a todos los usuarios del equipo.

El ámbito Process solo afecta a la sesión actual de PowerShell. La directiva de ejecución se guarda en la variable $env:PSExecutionPolicyPreferencede entorno , en lugar del Registro. Cuando se cierra la sesión de PowerShell, se eliminan la variable y el valor.

Las directivas de ejecución para el ámbito CurrentUser se escriben en el subárbol del Registro HKEY_LOCAL_USER.

Las directivas de ejecución para el ámbito LocalMachine se escriben en el subárbol del Registro HKEY_LOCAL_MACHINE.

Type:ExecutionPolicyScope
Accepted values:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Position:1
Default value:LocalMachine
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

Muestra lo que sucedería si se ejecutara el cmdlet. El cmdlet no se ejecuta.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

Microsoft.PowerShell.ExecutionPolicy, System.String

Puede canalizar un objeto de directiva de ejecución o una cadena que contenga el nombre de una directiva de ejecución a Set-ExecutionPolicy.

Salidas

None

Set-ExecutionPolicy no devuelve ninguna salida.

Notas

Set-ExecutionPolicy no cambia los ámbitos MachinePolicy y UserPolicy porque están establecidos por directivas de grupo.

Set-ExecutionPolicyno invalida un directiva de grupo, incluso si la preferencia del usuario es más restrictiva que la directiva.

Si la directiva de grupo Activar ejecución de scripts está habilitada para el equipo o el usuario, se guarda la preferencia del usuario, pero no es efectiva. PowerShell muestra un mensaje que explica el conflicto.