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 Unrestricted
y no se puede cambiar. El Set-ExecutionPolicy
cmdlet está disponible, pero PowerShell muestra un mensaje de consola que no se admite.
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 estar firmados 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 Administración istrator.
Para mostrar las directivas de ejecución para cada ámbito, 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 RemoteSigned
directiva. 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 una directiva de grupo
Este comando intenta establecer la LocalMachine
directiva de ejecución del ámbito en Restricted
.
LocalMachine
es más restrictivo, pero no es la directiva efectiva porque entra en conflicto con una directiva de grupo. La Restricted
directiva se escribe en el subárbol HKEY_LOCAL_MACHINE
del Registro .
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 Restricted
directiva. El parámetro Scope especifica el valor de ámbito predeterminado, LocalMachine
. El Get-ChildItem
cmdlet usa el parámetro Path con la unidad para especificar la HKLM:
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 .
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-ExecutionPolicy
canalizació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 CurrentUser
ámbito 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 AllSigned
directiva.
El parámetro Scope especifica el CurrentUser
objeto . 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 Undefined
directiva de ejecución 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 Undefined
directiva. El parámetro Scope especifica el CurrentUser
objeto . 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 Process
ámbito 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 AllSigned
directiva. 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 impide que la RemoteSigned
directiva de ejecución ejecute 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 RemoteSigned
directiva. 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.
Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by
RemoteSigned' porque el script no está firmado digitalmente.
En este ejemplo, el código del script se revisó y comprobó 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 se Start-ActivityTracker.ps1
ejecuta desde el directorio actual. El script comienza a ejecutarse porque el cmdlet lo desbloqueó Unblock-File
.
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 Undefined
en , se Restricted
convierte en la directiva efectiva para todos los usuarios.
Los valores de directiva de ejecución aceptables 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.Bypass
. No se bloquea nada y tampoco se muestran advertencias ni mensajes.Default
. Establece la directiva de ejecución predeterminada.Restricted
para clientes de Windows oRemoteSigned
para servidores de Windows.RemoteSigned
. Requiere que todos los scripts y archivos de configuración descargados de Internet estén firmados por un publicador de confianza. Directiva de ejecución predeterminada para equipos con Windows Server.Restricted
. No carga archivos de configuración ni ejecuta scripts. Directiva de ejecución predeterminada para equipos cliente windows.Undefined
. No se establece ninguna directiva de ejecución para el ámbito. Quita una directiva de ejecución asignada de un ámbito que no está establecido por una directiva de grupo. Si la directiva de ejecución en todos los ámbitos esUndefined
, la directiva de ejecución efectiva esRestricted
.Unrestricted
. 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 todas las solicitudes 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
- Establecer por una directiva de grupo para todos los usuarios del equipoUserPolicy
- Establecido por una directiva de grupo para el usuario actual del equipoProcess
- Afecta solo a la sesión actual de PowerShell.LocalMachine
- Ámbito predeterminado que afecta a todos los usuarios del equipoCurrentUser
- Afecta solo al usuario actual.
El Process
ámbito solo afecta a la sesión actual de PowerShell. La directiva de ejecución se guarda en la variable $env:PSExecutionPolicyPreference
de 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 CurrentUser
ámbito se escriben en el subárbol HKEY_LOCAL_USER
del Registro .
Las directivas de ejecución para el LocalMachine
ámbito se escriben en el subárbol HKEY_LOCAL_MACHINE
del Registro .
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
Puede canalizar un objeto de directiva de ejecución a este cmdlet.
Puede canalizar una cadena que contenga el nombre de una directiva de ejecución a este cmdlet.
Salidas
None
Este cmdlet no devuelve ningún resultado.
Notas
Set-ExecutionPolicy
no cambia los MachinePolicy
ámbitos y UserPolicy
porque se establecen mediante directivas de grupo.
Set-ExecutionPolicy
no invalida una directiva de grupo, aunque la preferencia del usuario sea más restrictiva que la directiva.
Si la directiva de grupo Activar la ejecución de scripts está habilitada para el equipo o el usuario, se guarda la preferencia de usuario, pero no es efectiva. PowerShell muestra un mensaje que explica el conflicto.