当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于执行政策

作者:精品下载站 日期:2024-12-14 02:23:11 浏览:12 分类:玩电脑

关于执行政策


简短描述

描述 PowerShell 执行策略并解释如何管理它们。

详细描述

PowerShell 的执行策略是一项安全功能,用于控制 PowerShell 加载配置文件和运行脚本的条件。此功能有助于防止恶意脚本的执行。

在 Windows 计算机上,您可以为本地计算机、当前用户或特定会话设置执行策略。您还可以使用组策略设置来设置计算机和用户的执行策略。

本地计算机和当前用户的执行策略存储在注册表中。您无需在 PowerShell 配置文件中设置执行策略。特定会话的执行策略仅存储在内存中,并且在会话关闭时丢失。

执行策略不是限制用户操作的安全系统。例如,当用户无法运行脚本时,可以通过在命令行中键入脚本内容来轻松绕过策略。相反,执行策略帮助用户设置基本规则并防止他们无意中违反这些规则。

在非 Windows 计算机上,默认执行策略为无限制且无法更改。 Set-ExecutionPolicy cmdlet 可用,但 PowerShell 显示一条控制台消息,表明它不受支持。虽然 Get-ExecutionPolicy 在非 Windows 平台上返回 Unrestricted,但该行为确实与 Bypass 匹配,因为这些平台未实现 Windows 安全区域。

PowerShell执行策略

这些策略仅在 Windows 平台上执行。 PowerShell执行策略如下:

  • 全部签名

    • 脚本可以运行。
  • 要求所有脚本和配置文件均由受信任的发布者签名,包括您在本地计算机上编写的脚本。
  • 在运行来自尚未分类为可信或不可信的发布者的脚本之前提示您。
  • 运行已签名但恶意的脚本的风险。
  • 绕过

    • 没有任何内容被阻止,也没有警告或提示。
  • 此执行策略专为将 PowerShell 脚本内置到较大应用程序中的配置或以 PowerShell 为具有自己的安全模型的程序的基础的配置而设计。
  • 默认

    • 设置默认执行策略。
  • Windows 客户端受限
  • 适用于 Windows 服务器的RemoteSigned
  • 远程签名

    • Windows 服务器计算机的默认执行策略。
  • 脚本可以运行。
  • 需要来自受信任发布者对从互联网下载的脚本和配置文件(包括电子邮件和即时消息程序)的数字签名。
  • 在本地计算机上编写且不是从 Internet 下载的脚本不需要数字签名。
  • 如果脚本已解除阻止(例如通过使用 Unblock-File cmdlet),则运行从 Internet 下载且未签名的脚本。
  • 运行来自互联网以外来源的未签名脚本以及可能是恶意的签名脚本的风险。
  • 受限

    • Windows 客户端计算机的默认执行策略。
  • 允许单独的命令,但不允许脚本。
  • 阻止运行所有脚本文件,包括格式和配置文件 (.ps1xml)、模块脚本文件 (.psm1) 和 PowerShell 配置文件 (.ps1)代码>)。
  • 未定义

    • 当前范围内没有设置执行策略。
  • 如果所有范围内的执行策略均为未定义,则对于 Windows 客户端,有效执行策略为受限;对于 Windows Server,有效执行策略为RemoteSigned
  • 无限制

    • 非 Windows 计算机的默认执行策略,无法更改。
  • 未签名的脚本可以运行。存在运行恶意脚本的风险。
  • 在运行非来自本地 Intranet 区域的脚本和配置文件之前警告用户。
  • 笔记

    在不区分通用命名约定 (UNC) 路径和 Internet 路径的系统上,由 UNC 路径标识的脚本可能不允许使用远程签名执行策略运行。

    执行政策范围

    您可以设置仅在特定范围内有效的执行策略。

    Scope 的有效值为 MachinePolicyUserPolicyProcessCurrentUser本地机器LocalMachine 是设置执行策略时的默认值。

    范围值按优先顺序列出。即使在较低优先级设置了更严格的策略,优先的策略在当前会话中仍然有效。

    有关更多信息,请参阅设置执行策略。

    • MachinePolicy

      由组策略为计算机的所有用户设置。

    • UserPolicy

      由计算机当前用户的组策略设置。

    • 过程

      进程范围仅影响当前的PowerShell会话。执行策略保存在环境变量 $env:PSExecutionPolicyPreference 中,而不是注册表中。当 PowerShell 会话关闭时,变量和值将被删除。

    • CurrentUser

      执行策略仅影响当前用户。它存储在 HKEY_CURRENT_USER 注册表子项中。

    • LocalMachine

      执行策略影响当前计算机上的所有用户。它存储在HKEY_LOCAL_MACHINE注册表子项中。

    使用 PowerShell 管理执行策略

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

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

    Get-ExecutionPolicy
    

    要获取影响当前会话的所有执行策略并按优先顺序显示它们:

    Get-ExecutionPolicy -List
    

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

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

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

    要获取为特定范围设置的执行策略,请使用 Get-ExecutionPolicyScope 参数。

    例如,以下命令获取 CurrentUser 范围的执行策略:

    Get-ExecutionPolicy -Scope CurrentUser
    

    改变执行策略

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

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

    如果您为 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
    

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

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

    删除执行策略

    要删除特定范围的执行策略,请将执行策略设置为未定义

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

    Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine
    

    要删除范围的执行策略:

    Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
    

    如果在任何范围内未设置执行策略,则有效的执行策略为受限,这是 Windows 客户端的默认执行策略。

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

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

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

    例如:

    pwsh.exe -ExecutionPolicy AllSigned
    

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

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

    使用组策略来管理执行策略

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

    打开脚本执行策略设置如下:

    • 如果禁用打开脚本执行,脚本将不会运行。这相当于受限执行策略。

    • 如果启用打开脚本执行,则可以选择执行策略。组策略设置相当于以下执行策略设置:

      Allow all scripts

      无限制

      Allow local scripts and remote signed scripts

      RemoteSigned

      Allow only signed scripts

      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-Item cmdlet 的 Stream 参数来检测因从 Internet 下载而被阻止的文件。使用 Unblock-File cmdlet 取消阻止脚本,以便您可以在 PowerShell 中运行它们。

    有关详细信息,请参阅 about_Signing、Get-Item 和 Unblock-File。

    笔记

    其他下载文件的方法可能不会将文件标记为来自 Internet 区域。一些例子包括:

      curl.exe
      Invoke-RestMethod
      Invoke-WebRequest

      Windows Server Core 和 Window Nano Server 上的执行策略

      在某些条件下,当 PowerShell 6 在 Windows Server Core 或 Windows Nano Server 上运行时,执行策略可能会失败并出现以下错误:

      AuthorizationManager check failed.
      At line:1 char:1
      + C:\scriptpath\scriptname.ps1
      + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          + CategoryInfo          : SecurityError: (:) [], PSSecurityException
          + FullyQualifiedErrorId : UnauthorizedAccess
      

      PowerShell 使用 Windows 桌面外壳 (explorer.exe) 中的 API 来验证脚本文件的区域。 Windows Shell 在 Windows Server Core 和 Windows Nano Server 上不可用。

      如果 Windows 桌面 Shell 不可用或无响应,您也可能在任何 Windows 系统上收到此错误。例如,在登录期间,PowerShell 登录脚本可能会在 Windows 桌面准备就绪之前开始执行,从而导致失败。

      使用ByPassAllSigned执行策略不需要区域检查,从而避免了该问题。

      参见

      • about_Environment_Variables
      • about_Group_Policy_Settings
      • 关于_Pwsh
      • about_签名
      • Get-ExecutionPolicy
      • Set-ExecutionPolicy
      • Get-Item
      • Unblock-File

      您需要 登录账户 后才能发表评论

      取消回复欢迎 发表评论:

      关灯