Contents
Powershell 脚本执行策略
TL;DR
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
Get-ExecutionPolicy -List | Format-Table -AutoSize
基本说明
Powershell 默认是不允许执行 PS1 脚本。
# 查看当前执行策略
Get-ExecutionPolicy
# 查看当前各个作用域(scope)的执行策略
Get-ExecutionPolicy -List | Format-Table -AutoSize
一共有 6 种执行策略,分别是:Undefined, Bypass, Unrestricted, Remotesigned, Allsigned, Restricted.
默认情况下是 Restricted 策略,更详细的可以参考:
https://technet.microsoft.com/library/hh847748.aspx
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-6
本地计算机 (Local Machine) 和当前用户 (Current User) 的执行策略存储在注册表中。无需在 Windows PowerShell 配置文件中设置执行策略。某个特定会话的执行策略仅存储在内存中,当关闭会话时,该执行策略会丢失。
执行策略 (Execution Policy) 机制不是限制用户操作的安全系统。例如,当用户无法运行脚本时,可以通过在命令行键入脚本内容轻松绕过策略。相反,执行策略帮助用户设置基本规则并阻止他们无意中违反规则。
WINDOWS POWERSHELL 执行策略
默认执行策略为 “Restricted”。
RESTRICTED
- Windows 8、Windows Server 2012 和 Windows 8.1 中的默认执行策略。
-
允许单独的命令,但不会运行脚本。
-
阻止所有脚本文件的运行,包括格式设置文件和配置文件 (.ps1xml)、模块脚本文件 (.psm1) 和 Windows PowerShell 配置文件 (.ps1)。
ALLSIGNED
-
脚本可以运行。
-
要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。
-
会在运行来自某类发布者(即你尚未归类为受信任或不受信任的发布者)的脚本之前提示你。
-
存在运行已签名但却是恶意的脚本的风险。
REMOTESIGNED
-
脚本可以运行。这是 Windows Server 2012 R2 中的默认执行策略。
-
要求从 Internet 下载的脚本和配置文件(包括电子邮件和即时消息程序)具有受信任的发布者的数字签名。
-
不要求你在本地计算机上编写的脚本(不是从 Internet 下载的)具有数字签名。
-
如果脚本已被取消阻止(比如通过使用 Unblock-File cmdlet),则运行从 Internet 下载但未签名的脚本。
-
存在运行来自 Internet 之外的源的未签名脚本和已签名但却是恶意的脚本的风险。
UNRESTRICTED
-
未签名的脚本可以运行。(这存在运行恶意脚本的风险。)
-
在运行从 Internet 下载的脚本和配置文件之前提醒用户。
BYPASS
-
不阻止任何内容,并且没有任何警告或提示。
-
该执行策略旨在用于后述配置:在其中 Windows PowerShell 被内置于一个更大的应用程序中,或者在其中 Windows PowerShell 是具有其自己安全模式的程序的基础。
UNDEFINED
-
当前作用域中未设置执行策略。
-
如果所有作用域中的执行策略都是 Undefined,则有效的执行策略是 Restricted,它是默认执行策略。
注意:在不区分通用命名约定 (UNC) 路径和 Internet 路径的系统上,可能不允许使用 RemoteSigned 执行策略运行由 UNC 路径标识的脚本。
执行策略作用域
你可以设置仅在某个特定作用域中有效的执行策略。
Scope 的有效值为 Process、CurrentUser 和 LocalMachine。设置执行策略时,LocalMachine 是默认值。
按优先顺序列出这些 Scope 值。
- PROCESS
执行策略仅影响当前会话(当前 Windows PowerShell 进程)。
执行策略存储在 $env:PSExecutionPolicyPreference
环境变量中,不是存储在注册表中,并且当关闭会话时会删除它。不能通过编辑变量值来更改策略。
- CURRENTUSER
执行策略仅影响当前用户。它存储在 HKEY_CURRENT_USER 注册表子项中。 -
LOCALMACHINE
执行策略会影响当前计算机上的所有用户。它存储在 HKEY_LOCAL_MACHINE 注册表子项中。
LOCALMACHINE 策略优先级更高,即使在较低优先级(用户,进程)上设置了更加严格的策略。
有关详细信息,请参阅 Set-ExecutionPolicy。
绕过
netspi 关于 15种 绕过 powershell 执行策略的方式
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
参考资料
PowerShell 脚本执行策略
https://lightless.me/archives/powershell-executtion-policies.html
Powershell 文档 about_Execution_Policies (低版本)
https://docs.microsoft.com/zh-cn/previous-versions/windows/powershell-scripting/hh847748(v=wps.640)
Powershell 文档 about_Execution_Policies
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-6
netspi 关于 15种 绕过 powershell 执行策略的方式
https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
Leave a Reply