about_Execution_Policies

主题
    about_Execution_Policies

简短说明
    说明 Windows PowerShell 执行策略,并介绍如何对它们进行管理。

详细说明
    使用 Windows PowerShell 执行策略,可以确定 Windows PowerShell 
    加载配置文件和运行脚本的条件。

    可以为本地计算机、当前用户或特定会话设置执行策略。也可使用组策略设置
    为计算机和用户设置执行策略。

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

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


 WINDOWS POWERSHELL 执行策略
 -------------------------------------

    Windows PowerShell 执行策略如下:

    "Restricted"是默认策略。

        Restricted
            - 默认执行策略。

            - 允许单个命令运行,但不能运行脚本。

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

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

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

            - 运行来自 Internet 以外的源的未签名脚本及已签名但有恶意的脚本存在风险。
      
        RemoteSigned
            - 可以运行脚本。

            - 要求可信发布者对从 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 进程)起作用。执行策略存储在 
             $PSExecutionPolicyPreference 环境变量中。当设置了策略的会话关闭时,将删除
             此值。

        - CurrentUser
             执行策略仅对当前用户起作用。该策略存储在 HKEY_CURRENT_USER 注册表子项中。

        - LocalMachine
             执行策略对当前计算机上的所有用户起作用。该策略存储在 HKEY_LOCAL_MACHINE 注册
             表子项中。

    优先策略将在当前会话中有效,即使在较低优先级上设置了限制更加严格的策略也如此。

    有关详细信息,请参阅 Set-ExecutionPolicy。



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

    以下命令获取当前执行策略:

    get-executionpolicy  


    若要获取对当前会话起作用的所有执行策略并按优先级顺序显示它们,请键入:

        get-executionpolicy -list

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

                  Scope    ExecutionPolicy
                  -----    ---------------
          MachinePolicy          Undefined
             UserPolicy          Undefined
                Process          Undefined
            CurrentUser       RemoteSigned
           LocalMachine          AllSigned
     
    在此例中,有效执行策略为 RemoteSigned,因为用于当前用户的执行策略优先于为
    本地计算机设置的执行策略。

    若要获取为特定作用域设置的执行策略,请使用 Get-ExecutionPolicy 的 Scope 参数。

    例如,以下命令可获取用于当前用户作用域的执行策略。

        get-executionpolicy -scope CurrentUser   




 更改执行策略
 ------------------------------
    若要在计算机上更改 Windows PowerShell 执行策略,请使用 Set-ExecutionPolicy 
    cmdlet。

    所做的更改会立即生效;无需重新启动 Windows PowerShell。

    如果为本地计算机(默认)或当前用户设置执行策略,则所做更改保存在注册表中,并在再次更改该策略之前保持有效。

    如果为当前进程设置执行策略,则该策略不会保存在注册表中。执行策略一直保留到当前进程和其所有子进程关闭为止。

    
    注意:在 Windows Vista 以及更高版本的 Windows 上,若要运行更改用于本地计算机(默认)的执行策略的命令,
    则应使用"以管理员身份运行"选项启动 Windows PowerShell。
    

    若要更改执行策略,请键入:
 
        Set-ExecutionPolicy <policy-name>

    例如:

        Set-ExecutionPolicy RemoteSigned



    若要在特定作用域中设置执行策略,请键入:

        Set-ExecutionPolicy <policy-name> -scope <scope>

    例如:

        Set-ExecutionPolicy RemoteSigned -scope CurrentUser


    用于更改执行策略的命令能够成功执行,但仍无法更改有效执行策略。

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


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

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

        set-executionpolicy Undefined

    或键入:

        set-executionpolicy Undefined -scope LocalMachine

    如果没有在任何作用域中设置执行策略,则有效执行策略为 Restricted,该策略是默认执行策略。



 在 POWERSHELL.EXE 中设置执行策略
 -----------------------------------------
    可以使用 PowerShell.exe 的 ExecutionPolicy 参数为新的 Windows PowerShell 会话设
    置执行策略。
    该执行策略仅对当前会话和子会话起作用。

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

    例如:

    powershell.exe -executionpolicy -allsigned
    
    
    设置的执行策略不存储在注册表中,而是存储在 $PSExecutionPolicyPreference 
    环境变量中。当设置了策略的会话关闭时,将删除该变量。
     
    在会话过程中,为该会话设置的执行策略优先于在注册表中为本地计算机或当前用户设置的
    执行策略。但是,它不会优先于使用组策略设置设置的执行策略(组策略设置在下面讨论)。
    
           

 使用组策略管理执行策略
 -------------------------------------------
    可以使用"启动脚本执行"组策略设置来管理企业中的计算机的执行策略。组策略设置将覆盖在 
    Windows PowerShell 中设置的所有作用域中的执行策略。

    "启动脚本执行"策略设置如下:
    
    -- 如果禁用了"启动脚本执行",则脚本无法运行。这等效于"Restricted"执行策略。

    -- 如果启用了"启动脚本执行",则可选择一个执行策略。组策略设置等效于以下执行策略设置。

        组策略             执行策略
        ------------                ----------------
        允许所有脚本运行。       Unrestricted

        允许本地脚本和远程       RemoteSigned
    签名脚本运行。

        仅允许签名脚本运行。      AllSigned

    -- 如果没有配置"启动脚本执行",则它将不起作用。在 Windows PowerShell 中设置
       的执行策略有效。


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

        对于 Windows XP 和 Windows Server 2003:
        管理模板\Windows 组件\Windows PowerShell

        对于 Windows Vista 及更高版本的 Windows:
        管理模板\经典管理模板\Windows 组件\Windows PowerShell

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

    PowerShellExecutionPolicy.adm 文件在 Microsoft 下载中心提供。有关详细信息,请参阅以
    下位置的"Windows PowerShell 的管理模板":https://go.microsoft.com/fwlink/?LinkId=131786。
    

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

        - 组策略:计算机配置
        - 组策略:用户配置
        - 执行策略:Process(或 PowerShell.exe -ExecutionPolicy)
        - 执行策略:CurrentUser
        - 执行策略:LocalMachine


 管理签名和未签名脚本
 ----------------------------------
    如果 Windows PowerShell 执行策略为 RemoteSigned,则 Windows PowerShell 将不会运
    行从 Internet(包括电子邮件和即时消息程序)下载的未签名脚本。
 
    可对脚本进行签名,或选择在不更改执行策略的情况下运行未签名脚本。

    有关详细信息,请参阅 about_Signing。


另请参阅
    Get-ExecutionPolicy
    Set-ExecutionPolicy
    about_Signing
    "Windows PowerShell 的管理模板"
       (https://go.microsoft.com/fwlink/?LinkId=131786)