侧边栏壁纸
  • 累计撰写 23 篇文章
  • 累计创建 8 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

PowerShell 执行策略

付心武士
2024-06-16 / 0 评论 / 0 点赞 / 12 阅读 / 11947 字

PowerShell 执行策略如下:

  • AllSigned

    • 脚本可以运行。

    • 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。

    • 在运行来自尚未分类为可信或不可信的发布者的脚本之前会提示你。

    • 存在运行已签名的恶意脚本的风险。

  • Bypass

    • 不阻止任何操作,并且没有任何警告或提示。

    • 此执行策略专为将 PowerShell 脚本内置到较大应用程序中的配置,或以 PowerShell 为具有自己的安全模型的程序的基础的配置而设计。

  • Default

    • 设置默认执行策略。

    • Restricted(适用于 Windows 客户端)。

    • RemoteSigned(适用于 Windows 服务器)。

  • RemoteSigned

    • Windows 服务器计算机的默认执行策略。

    • 脚本可以运行。

    • 需要受信任的发布者对从 Internet 下载的脚本和配置文件(包括电子邮件和即时消息程序)的数字签名。

    • 在本地计算机上编写且不是从 Internet 下载的脚本不需要数字签名。

    • 如果脚本已解除阻止(例如通过使用 Unblock-File cmdlet),则运行从 Internet 下载且未签名的脚本。

    • 存在运行来自 Internet 以外来源的未签名脚本以及可能存在恶意的签名脚本的风险。

  • Restricted

    • Windows 客户端计算机的默认执行策略。

    • 允许单个命令,但不允许脚本。

    • 阻止运行所有脚本文件,包括格式和配置文件 (.ps1xml)、模块脚本文件 (.psm1) 和 PowerShell 配置文件 (.ps1)。

  • Undefined

    • 当前作用域内没有设置执行策略。

    • 如果所有作用域内的执行策略均为 Undefined,则对于 Windows 客户端,有效执行策略为 Restricted;对于 Windows Server,有效执行策略为 RemoteSigned

  • Unrestricted

    • 非 Windows 计算机的默认执行策略,无法更改。

    • 未签名的脚本可以运行。 存在运行恶意脚本的风险。

    • 在运行非来自本地 Intranet 区域的脚本和配置文件之前警告用户。


使用 PowerShell 管理执行策略

若要获取当前 PowerShell 会话的有效执行策略,请使用 Get-ExecutionPolicy cmdlet。

以下命令可获取有效的执行策略:

PowerShell复制

Get-ExecutionPolicy

若要获取影响当前会话的所有执行策略,并按优先级顺序显示它们,请执行以下操作:

PowerShell复制

Get-ExecutionPolicy -List

结果类似于以下示例输出:

Output复制

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine       AllSigned

在这种情况下,有效的执行策略是 RemoteSigned,因为当前用户的执行策略优先于本地计算机设置的执行策略。

若要为特定作用域设置执行策略,请使用 Get-ExecutionPolicyScope参数。

例如,以下命令获取 CurrentUser 作用域的执行策略:

PowerShell复制

Get-ExecutionPolicy -Scope CurrentUser

更改执行策略

若要更改 Windows 计算机上的 PowerShell 执行策略,请使用 Set-ExecutionPolicy cmdlet。 更改立即生效。 无需重启 PowerShell。

如果为 LocalMachineCurrentUser 作用域设置执行策略,则更改将保存在注册表中并保持有效,直到再次更改为止。

如果为 Process 作用域设置执行策略,它不会保存在注册表中。 执行策略将保留到当前进程和任何子进程关闭为止。

备注

在 Windows Vista 和更高版本的 Windows 中,要运行更改本地计算机 LocalMachine 作用域的执行策略的命令,请使用“以管理员身份运行”选项启动 PowerShell。

若要更改执行策略,请执行以下操作:

PowerShell复制

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

例如:

PowerShell复制

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

若要在特定作用域内设置执行策略,请执行以下操作:

PowerShell复制

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

例如:

PowerShell复制

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

更改执行策略的命令可能会成功,但仍然不会更改有效的执行策略。

例如,为本地计算机设置执行策略的命令可能会成功,但会被当前用户的执行策略覆盖。

删除执行策略

若要删除特定作用域的执行策略,请将执行策略设置为 Undefined

例如,若要删除本地计算机所有用户的执行策略:

PowerShell复制

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

若要删除 Scope 的执行策略,请执行以下操作:

PowerShell复制

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

如果未在任何作用域内设置执行策略,则有效的执行策略为 Restricted,这是 Windows 客户端的默认执行策略。

为一个会话设置不同的策略

可以使用 pwsh.exeExecutionPolicy 参数为新的 PowerShell 会话设置执行策略。 该策略仅影响当前会话和子会话。

若要为新会话设置执行策略,请在命令行(如 cmd.exe 或 PowerShell)启动 PowerShell,然后使用 pwsh.exeExecutionPolicy 参数设置执行策略。

例如:

PowerShell复制

pwsh.exe -ExecutionPolicy AllSigned

设置的执行策略不会存储在注册表中, 而是存储在 $env:PSExecutionPolicyPreference 环境变量中。 关闭设置策略的会话时,将删除该变量。 无法通过编辑变量值来更改策略。

在会话期间,为会话设置的执行策略优先于在本地计算机或当前用户的注册表中设置的执行策略。 但是,它并不优先于使用组策略设置的执行策略。

使用组策略管理执行策略

可以使用“打开脚本执行组策略”设置来管理企业中计算机的执行策略。 组策略设置会覆盖 PowerShell 中在所有范围内设置的执行策略。

启用脚本执行”策略设置如下所示:

  • 如果禁用“启用脚本执行”,则脚本不会运行。 这等效于 Restricted 执行策略。

  • 如果启用“启用脚本执行”,则可以选择一个执行策略。 组策略设置等效于以下执行策略设置:

    展开表

    组策略

    执行策略

    允许所有脚本

    Unrestricted

    允许本地脚本和远程签名脚本

    RemoteSigned

    仅允许签名脚本

    AllSigned

  • 如果未配置“启用脚本执行”,则不起作用。 PowerShell 中设置的执行策略有效。

PowerShellExecutionPolicy.adm 和 PowerShellExecutionPolicy.admx 文件会将“启用脚本执行”策略添加到组策略编辑器以下路径中的“计算机配置”和“用户配置”节点。

对于 Windows XP 和 Windows Server 2003:

Administrative Templates\Windows Components\Windows PowerShell

对于 Windows Vista 和更高版本的 Windows:

Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell

“计算机配置”节点中设置的策略优先于“用户配置”节点中设置的策略。

有关详细信息,请参阅 about_Group_Policy_Settings

执行策略优先级

在确定会话的有效执行策略时,PowerShell 按以下优先顺序评估执行策略:

复制

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: LocalMachine
Execution Policy: CurrentUser

管理已签名和未签名的脚本

在 Windows 中,Internet Explorer 和 Microsoft Edge 等程序会向下载的文件添加备用数据流。 这会将文件标记为“来自 Internet”。 如果 PowerShell 执行策略是 RemoteSigned,PowerShell 将不会运行从 Internet 下载的未签名脚本,其中包括电子邮件和即时消息程序。

可以对脚本进行签名,或选择在不更改执行策略的情况下运行未签名的脚本。

从 PowerShell 3.0 开始,可以使用 Get-Itemcmdlet 的 Stream 参数来检测因从 Internet 下载而被阻止的文件。 使用 Unblock-File cmdlet 解除阻止脚本,以便可以在 PowerShell 中运行这些脚本。

0

评论区