我试图将执行策略设置为Unrestricted
,但我得到以下错误:
PS> Set-ExecutionPolicy Unrestricted
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
Set-ExecutionPolicy : Access to the registry key
'HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell' is denied. To change the execution
policy for the default (LocalMachine) scope, start Windows PowerShell with the "Run as administrator" option. To
change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy unrestricted
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyComma
nd
Set-ExecutionPolicy
默认设置整个系统的脚本执行策略(隐含-Scope LocalMachine
)。
-Scope LocalMachine
只能在提升的会话中使用(作为admin运行);[1]如果您的会话没有提升,您将得到您看到的错误-错误文本实际上既解释了问题,又提供了如何解决它的说明。
总结:
-
要么:从提升会话重新运行命令,假设您有管理凭据。
- 你可以用
Start-Process powershell -Verb RunAs
(在PowerShell (Core) 7+中使用pwsh
)启动一个。
- 你可以用
-
或者:仅为当前用户(
更改持久执行策略-Scope CurrentUser
)Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force
注意:
-
我选择了
RemoteSigned
作为示例调用中的策略,因为它提供了安全性和便利性之间的平衡:它对本地脚本没有限制,但阻止执行从web下载的未加密签名的脚本。 -
-Force
绕过交互提示符。 -
虽然当前用户执行策略优先于本地机器执行策略,但两者都可以被基于gpo的策略抢占-有关更多信息,请参阅此回答。
-
还有一种方法可以通过
-Scope Process
设置单个会话的执行策略,尽管这通常是通过PowerShell命令行(powershell.exe
for Windows PowerShell,pwsh
for PowerShell (Core) 7+)以-ExecutionPolicy Bypass
的形式使用。
[1]原则上同样适用于PowerShell (Core) 7+,如果您恰好将其安装在当前用户位置,则提升不需要。还要注意,当你在类unix平台上使用PowerShell (Core) 7+时,执行策略基本上不适用。