Set-ExecutionPolicy
设置Windows计算机的 PowerShell 执行策略。
语法
All
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
说明
Set-ExecutionPolicy cmdlet 更改Windows计算机的 PowerShell 执行策略。 有关更多信息,请参阅 about_Execution_Policies。
从非Windows计算机的 PowerShell 6.0 开始,默认执行策略为 Unrestricted,无法更改。
Set-ExecutionPolicy cmdlet 可用,但 PowerShell 会显示不支持的控制台消息。
执行策略是 PowerShell 安全策略的一部分。 执行策略确定是否可以加载配置文件(例如 PowerShell 配置文件)或运行脚本。 而且,脚本是否必须进行数字签名。
该 Set-ExecutionPolicy cmdlet 的默认作用域会影响 LocalMachine使用计算机的每个人。 若要更改其 LocalMachine执行策略,请使用 “以管理员身份运行”启动 PowerShell。
若要显示每个范围的执行策略,请使用 Get-ExecutionPolicy -List。 若要查看 PowerShell 会话 Get-ExecutionPolicy 的有效执行策略,无需参数。
注释
还可以通过组策略设置执行策略。 如果设置了组策略,则会替代本地设置的执行策略。 Windows PowerShell 5.1 和 PowerShell 6.0 及更高版本将执行策略设置存储在不同的位置,并单独管理。 Windows PowerShell (powershell.exe) 的设置不会影响 PowerShell (pwsh.exe)。
示例
示例 1:设置执行策略
此示例演示如何设置本地计算机的执行策略。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine RemoteSigned
该 Set-ExecutionPolicy cmdlet 使用 ExecutionPolicy 参数指定 RemoteSigned 策略。
Scope 参数指定默认范围值LocalMachine。 若要查看执行策略设置,请使用 Get-ExecutionPolicy 带有 List 参数的 cmdlet。
示例 2:设置与组策略冲突的执行策略
此命令尝试将 LocalMachine 作用域的执行策略设置为 Restricted。
LocalMachine 更严格,但不是有效的策略,因为它与组策略冲突。
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
示例 3:将执行策略从远程计算机应用到本地计算机
此命令从远程计算机获取执行策略对象,并在本地计算机上设置策略。
Get-ExecutionPolicy发送Microsoft。PowerShell.ExecutionPolicy 管道中的对象。
Set-ExecutionPolicy 接受管道输入,不需要 ExecutionPolicy 参数。
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy
该 Invoke-Command cmdlet 在本地计算机上执行,并将 ScriptBlock 发送到远程计算机。
ComputerName 参数指定远程计算机 Server01。
ScriptBlock 参数在远程计算机上运行 Get-ExecutionPolicy。 对象 Get-ExecutionPolicy 将管道向下 Set-ExecutionPolicy发送到该对象。
Set-ExecutionPolicy将执行策略应用于本地计算机的默认范围。 LocalMachine
示例 4:设置执行策略的范围
此示例演示如何为指定的范围 CurrentUser设置执行策略。 范围 CurrentUser 仅影响设置此作用域的用户。
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser AllSigned
LocalMachine RemoteSigned
Set-ExecutionPolicy 使用 ExecutionPolicy 参数指定 AllSigned 策略。
Scope 参数指定 CurrentUser. 若要查看执行策略设置,请使用 Get-ExecutionPolicy 带有 List 参数的 cmdlet。
用户的有效执行策略变为 AllSigned。
示例 5:删除当前用户的执行策略
此示例演示如何使用 Undefined 执行策略删除指定范围的执行策略。
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Set-ExecutionPolicy 使用 ExecutionPolicy 参数指定 Undefined 策略。
Scope 参数指定 CurrentUser. 若要查看执行策略设置,请使用 Get-ExecutionPolicy 带有 List 参数的 cmdlet。
示例 6:设置当前 PowerShell 会话的执行策略
Process 范围仅影响当前的 PowerShell 会话。 执行策略保存在环境变量 $Env:PSExecutionPolicyPreference 中,并在会话关闭时删除。
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process AllSigned
CurrentUser RemoteSigned
LocalMachine RemoteSigned
使用 Set-ExecutionPolicyExecutionPolicy 参数指定 AllSigned 策略。
Scope 参数指定值Process。 若要查看执行策略设置,请使用 Get-ExecutionPolicy 带有 List 参数的 cmdlet。
示例 7:取消阻止脚本以运行脚本而不更改执行策略
此示例演示如何 RemoteSigned 执行策略阻止你运行未签名的脚本。
最佳做法是读取脚本的代码,并在使用 cmdlet Unblock-File验证它是否安全。 该 Unblock-File cmdlet 取消阻止脚本,以便它们可以运行,但不会更改执行策略。
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-ExecutionPolicyExecutionPolicy 参数指定 RemoteSigned 策略。 为默认范围 LocalMachine设置策略。
该 Get-ExecutionPolicy cmdlet 显示 RemoteSigned 当前 PowerShell 会话的有效执行策略。
脚本 Start-ActivityTracker.ps1 从当前目录执行。 脚本被 RemoteSigned 阻止,因为该脚本未进行数字签名。
对于此示例,脚本的代码已查看并验证为安全运行。 cmdlet Unblock-File 使用 Path 参数取消阻止脚本。
若要验证Unblock-File是否未更改执行策略,Get-ExecutionPolicy请显示有效的执行策略。 RemoteSigned
Start-ActivityTracker.ps1脚本从当前目录执行。 该脚本开始运行,因为它已被 Unblock-File cmdlet 取消阻止。
参数
-Confirm
在运行 cmdlet 之前,提示你进行确认。
参数属性
| 类型: | SwitchParameter |
| 默认值: | False |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | Cf |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ExecutionPolicy
指定执行策略。 如果没有组策略,并且每个范围的执行策略都设置为 Undefined,则 Restricted 将成为所有用户的有效策略。
可接受的执行策略值如下所示:
-
AllSigned。 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。 -
Bypass。 没有阻止任何内容,也没有警告或提示。 -
Default。 设置默认执行策略。 Windows客户端的Restricted,或Windows服务器的RemoteSigned。 -
RemoteSigned。 要求从 Internet 下载的所有脚本和配置文件都由受信任的发布者签名。 Windows 服务器计算机的默认执行策略。 -
Restricted。 不加载配置文件或运行脚本。 Windows 客户端计算机的默认执行策略。 -
Undefined。 没有为范围设置执行策略。 从组策略未设置的范围中删除分配的执行策略。 如果所有范围内的执行策略为Undefined,则有效执行策略为Restricted。 -
Unrestricted。 从 PowerShell 6.0 开始,这是非Windows计算机的默认执行策略,无法更改。 加载所有配置文件并运行所有脚本。 如果运行从 Internet 下载的未签名脚本,则会在运行之前提示你获得权限。
参数属性
| 类型: | ExecutionPolicy |
| 默认值: | None |
| 接受的值: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | 0 |
| 必需: | True |
| 来自管道的值: | True |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Force
取消所有确认提示。 请谨慎使用此参数以避免意外结果。
参数属性
| 类型: | SwitchParameter |
| 默认值: | False |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Scope
指定受执行策略影响的作用域。 默认作用域为 LocalMachine. 该参数接受以下值:
-
MachinePolicy- 由计算机的所有用户的组策略设置 -
UserPolicy- 由计算机的当前用户的组策略设置 -
Process- 仅影响当前 PowerShell 会话 -
CurrentUser- 仅影响当前用户 -
LocalMachine- 影响计算机所有用户的默认范围
注释
MachinePolicy 并 UserPolicy 按组策略设置。 如果尝试将范围设置为这些值之一,PowerShell 会显示一条错误消息,指出该作用域由组策略设置,并且无法更改。
如果组策略未定义执行策略,则有效的执行策略由优先级顺序确定,如下所示:
-
Process- 最高优先级 -
CurrentUser- 第二高优先级 -
LocalMachine- 最低优先级
有关 PowerShell 如何存储执行策略的详细信息,请参阅 NOTES 部分。
参数属性
| 类型: | ExecutionPolicyScope |
| 默认值: | LocalMachine |
| 接受的值: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | 1 |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | True |
| 来自剩余参数的值: | False |
-WhatIf
显示 cmdlet 运行时会发生什么情况。 cmdlet 未能运行。
参数属性
| 类型: | SwitchParameter |
| 默认值: | False |
| 支持通配符: | False |
| 不显示: | False |
| 别名: | 无线 |
参数集
(All)
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
CommonParameters
此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。
输入
ExecutionPolicy
可以通过管道将执行策略对象传递给此 cmdlet。
String
可以通过管道将包含执行策略名称的字符串传递给此 cmdlet。
输出
None
此 cmdlet 不返回任何输出。
备注
Set-ExecutionPolicy 无法更改 MachinePolicy 和 UserPolicy 作用域,因为它们是由组策略设置的。
Set-ExecutionPolicy 不会替代组策略,即使用户首选项比策略更严格。
如果组策略未定义执行策略,则有效的执行策略由优先级顺序确定,如下所示:
-
Process- 最高优先级。Process范围仅影响当前的 PowerShell 会话。 执行策略保存在环境变量$Env:PSExecutionPolicyPreference中,而不是注册表中。 关闭 PowerShell 会话后,将删除变量和值。 -
CurrentUser- 第二高优先级。 此设置存储在用户特定的powershell.config.json文件中。 -
LocalMachine- 最低优先级。 该设置存储在$PSHOME/powershell.config.json文件中。
有关该文件的详细信息 powershell.config.json ,请参阅 about_PowerShell_Config。