Set-ExecutionPolicy
Establece las directivas de ejecución de PowerShell para equipos Windows.
Sintaxis
All
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
El cmdlet Set-ExecutionPolicy cambia las directivas de ejecución de PowerShell para equipos Windows. Para obtener más información, vea about_Execution_Policies.
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 ámbito predeterminado del Set-ExecutionPolicy cmdlet es LocalMachine, que afecta a todos los usuarios del 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 de 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 cmdlet Get-ExecutionPolicy 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 directiva de ejecución del ámbito LocalMachine en Restricted. LocalMachine es más restrictivo, pero no es la directiva efectiva porque entra en conflicto con una directiva de grupo. La directiva restringida se escribe en el HKEY_LOCAL_MACHINE de subárbol 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 directiva restringida . 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 cmdlet Invoke-Command se ejecuta en el equipo local y envía el ScriptBlock al equipo remoto. El parámetro computerName especifica el equipo remoto, Server01. El parámetro ScriptBlock ejecuta Get-ExecutionPolicy en el equipo remoto. El objeto Get-ExecutionPolicy se envía a la canalización al Set-ExecutionPolicy.
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 utiliza el parámetro ExecutionPolicy para especificar la directiva AllSigned .
El parámetro Scope especifica el CurrentUser. Para ver la configuración de la directiva de ejecución, use el cmdlet Get-ExecutionPolicy con el parámetro List.
La directiva de ejecución efectiva para el usuario pasa a ser 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 indefinida 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 utiliza el parámetro ExecutionPolicy para especificar la directiva Undefined .
El parámetro Scope especifica el CurrentUser. Para ver la configuración de la directiva de ejecución, use el cmdlet Get-ExecutionPolicy con el parámetro List.
Ejemplo 6: Establecimiento de la directiva de ejecución para la sesión actual de PowerShell
El ámbito del proceso solo afecta a la sesión actual de PowerShell. La directiva de ejecución se guarda en la variable de entorno $env:PSExecutionPolicyPreference 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
Utiliza Set-ExecutionPolicy 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 cmdlet Get-ExecutionPolicy 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 de remoteSigned
Un procedimiento recomendado es leer el código del script y comprobar que es seguro antes de mediante el cmdlet Unblock-File. El cmdlet Unblock-File 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:
El
El cmdlet Get-ExecutionPolicy 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. El script está bloqueado por 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 cmdlet Unblock-File 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 fue desbloqueado por el cmdlet Unblock-File.
Parámetros
-Confirm
Le pide confirmación antes de ejecutar el cmdlet.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | False |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | cf |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-ExecutionPolicy
Especifica la directiva de ejecución. Si no hay directivas de grupo y la directiva de ejecución de cada ámbito se establece en Undefined, Restricted se 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 no hay advertencias ni avisos.
- Predeterminado. Establece la directiva de ejecución predeterminada. Restringido para clientes de Windows o RemoteSigned 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.
- Restringido. No carga archivos de configuración ni ejecuta scripts. La directiva de ejecución predeterminada para los 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 no está establecido por una directiva de grupo. Si la directiva de ejecución en todos los ámbitos es Undefined, la directiva de ejecución efectiva es Restricted.
- Sin restricciones. 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.
Propiedades de parámetro
| Tipo: | ExecutionPolicy |
| Valor predeterminado: | None |
| Valores aceptados: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | 0 |
| Obligatorio: | True |
| Valor de la canalización: | True |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Force
Suprime todas las solicitudes de confirmación. Tenga cuidado con este parámetro para evitar resultados inesperados.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | 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. Establecido por una Directiva de Grupo para todos los usuarios del equipo.
- Política de usuario. Establecido por una Directiva de Grupo para el usuario actual del equipo.
- Proceso. Afecta solo a la sesión actual de PowerShell.
- Usuario actual. Afecta solo al usuario actual.
- Máquina local. Ámbito predeterminado que afecta a todos los usuarios del equipo.
El ámbito del proceso solo afecta a la sesión actual de PowerShell. La política de ejecución se guarda en la variable $env:PSExecutionPolicyPreferencede entorno, en lugar de en el 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 HKEY_LOCAL_USER del subárbol del Registro.
Las directivas de ejecución para el ámbito LocalMachine se escriben en el HKEY_LOCAL_MACHINE del subárbol del Registro.
Propiedades de parámetro
| Tipo: | ExecutionPolicyScope |
| Valor predeterminado: | LocalMachine |
| Valores aceptados: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | 1 |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | True |
| Valor de los argumentos restantes: | False |
-WhatIf
Muestra lo que sucedería si el cmdlet se ejecuta. El cmdlet no se ejecuta.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | False |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | Wi |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
CommonParameters
Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.
Entradas
Microsoft.PowerShell.ExecutionPolicy, System.String
Puede canalizar un objeto de política de ejecución o una cadena que contenga el nombre de una política 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 los establecen las 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 opción Activar ejecución de scripts de directiva de grupo 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.