在使用 SAPIEN 的PowerShell Studio时出现如下错误:
无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
ERROR: 所在位置 行:1 字符: 2
ERROR: + &"C:\ProgramData\SAPIEN\Help Data\PowerShell Studio\ComputerPrompt\Co ...
ERROR: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ERROR: + CategoryInfo : SecurityError: (:) [],PSSecurityException
ERROR: + FullyQualifiedErrorId : UnauthorizedAccess
意思是说授权有问题,需要查阅https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
于是对PowerShell的执行策略进行了查阅,总结如下:
一、执行策略级别:PolicyName
所谓级别,是自己的理解,也就是执行限制的范围。
序号 | 级别 | 说明 |
1 | AllSigned |
|
2 | Bypass |
|
3 | Default |
|
4 | RemoteSigned |
|
5 | Restricted |
|
6 | Undefined |
|
7 | Unrestricted |
|
二、执行策略范围:scope
可以设置仅在特定范围内有效的执行策略。有效值为 ScopeMachinePolicy、UserPolicy、ProcessCurrentUser 和 LocalMachine。 设置执行策略时,LocalMachine 是默认设置。
序号 | 范围 | 说明 |
1 | MachinePolicy | 由组策略为计算机的所有用户设置。 |
2 | UserPolicy | 由计算机当前用户的组策略设置。 |
3 | Process | 范围 Process 仅影响当前 PowerShell 会话。 执行策略保存在环境变量 $env:PSExecutionPolicyPreference中,而不是注册表中。 关闭 PowerShell 会话时,变量和值将被删除。 |
4 | CurrentUser | 执行策略仅影响当前用户。 它存储在 HKEY_CURRENT_USER 注册表子项中。 |
5 | LocalMachine | 执行策略会影响当前计算机上的所有用户。 它存储在 HKEY_LOCAL_MACHINE 注册表子项中。 |
三、查看当前执行策略
若要获取当前 PowerShell 会话的有效执行策略,请使用 Get-ExecutionPolicy cmdlet。
获取当前执行策略:
Get-ExecutionPolicy
类似的结果:
AllSigned
获取影响当前会话的所有执行策略并按优先顺序显示:
Get-ExecutionPolicy -List
类似结果:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser AllSigned
LocalMachine RemoteSigned
在这种情况下,有效执行策略为 AllSigned ,因为当前用户的执行策略优先于为本地计算机设置的执行策略。
若要获取为特定范围设置的执行策略,请使用 Scope 的 Get-ExecutionPolicy参数。
获取 CurrentUser 范围的执行策略:
Get-ExecutionPolicy -Scope CurrentUser
类似的结果:
AllSigned
四、更改执行策略
若要更改 Windows 计算机上的 PowerShell 执行策略,请使用 Set-ExecutionPolicy cmdlet。 更改将立即生效,无需重启 PowerShell。
如果为 范围 LocalMachine 或 CurrentUser 设置执行策略,则更改将保存在注册表中,并在再次进行更改之前保持有效。
如果为 Process 范围设置执行策略,则不会将其保存在注册表中。 执行策略将一直保留到当前进程和任何子进程关闭为止。
备注: 📌
在 Windows Vista 和更高版本的 Windows 中,若要运行更改本地计算机( LocalMachine 范围)执行策略的命令,请使用 “以管理员身份运行” 选项启动 PowerShell。
更改策略执行命令
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
例如:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
更改特定范围内执行策略
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>
例如:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
备注: 📌
用于更改执行策略的命令可以成功,但仍不能更改有效的执行策略。
例如,为本地计算机设置执行策略的命令可以成功,但会被当前用户的执行策略覆盖。
五、删除执行策略
若要删除特定范围的执行策略,请将执行策略设置为 Undefined。
删除本地计算机所有用户的执行策略:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
删除当前用户的执行策略:
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
如果未在任何范围内设置执行策略,则有效的执行策略为 Restricted,这是 Windows 客户端的默认策略。
六、为会话设置策略
若要为新会话设置执行策略,请在命令行(如 cmd.exe 或 )启动 PowerShell,然后使用 的 pwsh.exe ExecutionPolicy 参数设置执行策略。
pwsh.exe -ExecutionPolicy AllSigned
注意:
pwsh.exe一定要设置路径环境变量,以便能够找到该程序!
设置的执行策略不会存储在注册表中。 而是存储在 环境变量中 $env:PSExecutionPolicyPreference 。 关闭在其中设置了策略的会话时,变量将被删除。 不能通过编辑变量值来更改策略。
在会话期间,为会话设置的执行策略优先于在本地计算机或当前用户的注册表中设置的执行策略。 但是,它不优先于使用组策略设置的执行策略。
今天是2023年大年初一,祝各位新年快乐,学习进步,事业有成!💖