Set-ExecutionPolicy

更改 Windows PowerShell 执行策略的用户首选项。

语法

Set-ExecutionPolicy [-ExecutionPolicy] {<Unrestricted> | <RemoteSigned> | <AllSigned> | <Restricted> | <Default> | <Bypass> | <Undefined>} [[-Scope] {<Process> | <CurrentUser> | <LocalMachine> | <UserPolicy> | <MachinePolicy>}] [-Force] [-Confirm] [-WhatIf] [<CommonParameters>]

说明

Set-ExecutionPolicy 可更改 Windows PowerShell 执行策略的用户首选项。

要在 Windows Vista、Windows Server 2008 和 Windows 的更高版本上运行此命令,必须使用“以管理员身份运行”选项启动 Windows PowerShell,即使您是计算机上 Administrators 组的成员。

执行策略是 Windows PowerShell 安全策略的一部分。它确定是否可以加载配置文件(包括 Windows PowerShell 配置文件)和运行脚本,并且确定哪些脚本(如果有)在运行之前必须进行数字签名。

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

参数

-ExecutionPolicy <ExecutionPolicy>

为 shell 指定新的执行策略。参数名(“Name”)为可选项。

有效值包括:

-- Restricted:不加载配置文件或运行脚本。默认值为“Restricted”。

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

-- RemoteSigned:要求从 Internet 下载的所有脚本和配置文件均由可信发布者签名。

-- Unrestricted:加载所有配置文件并运行所有脚本。如果运行从 Internet 下载的未签名脚本,则系统将提示您需要相关权限才能运行该脚本。

-- Bypass:不阻止任何执行项,不显示警告和提示。

-- Undefined:从当前作用域删除当前分配的执行策略。此参数将不会删除在组策略作用域中设置的执行策略。

是否为必需?

true

位置?

1

默认值

是否接受管道输入?

true (ByValue)

是否接受通配符?

false

-Force

禁止显示所有提示。默认情况下,Set-ExecutionPolicy 会在您每次更改执行策略时显示警告。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Scope <ExecutionPolicyScope>

指定执行策略的作用域。默认值为 LocalMachine。

有效值包括:

-- Process:执行策略仅对当前的 Windows PowerShell 进程起作用。

-- CurrentUser:执行策略仅对当前用户起作用。

-- LocalMachine:执行策略对计算机上的所有用户均起作用。

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

是否为必需?

false

位置?

2

默认值

LocalMachine

是否接受管道输入?

true (ByPropertyName)

是否接受通配符?

false

-Confirm

在执行命令之前提示您进行确认。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-WhatIf

描述如果执行该命令会发生什么情况(无需实际执行该命令)。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

<CommonParameters>

此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

Microsoft.PowerShell.ExecutionPolicy, System.String

可以将执行策略对象或包含执行策略的名称的字符串通过管道传递到 Set-ExecutionPolicy。

输出

此 cmdlet 不返回任何输出。

说明

在使用 Set-ExecutionPolicy 时,将向注册表中写入新的用户首选项,并在更改之前保持用户首选项不变。

不过,如果对计算机或用户启用了“启动脚本执行”组策略,将向注册表中写入用户首选项,但该首选项是无效的,并且 Windows PowerShell 将显示一条消息解释冲突。无法使用 Set-ExecutionPolicy 覆盖组策略,即使用户首选项比组策略的限制更严格也不例外。

示例 1

C:\PS>set-executionpolicy remotesigned

说明
-----------
此命令将 shell 执行策略的用户首选项设置为 RemoteSigned。





示例 2

C:\PS>Set-ExecutionPolicy Restricted

Set-ExecutionPolicy : Windows PowerShell updated your local preference successfully, but the setting is overridden by the group policy applied to your system. Due to the override, your shell will retain its current effective execution policy of "AllSigned". Contact your group policy administrator for more information.
At line:1 char:20
+ set-executionpolicy  <<<< restricted

说明
-----------
此命令尝试将 shell 的执行策略设置为“Restricted”。向注册表中写入了“Restricted”设置,但是,由于它与组策略冲突,因此该设置无效,即使该设置比组策略的限制更严格也是如此。





示例 3

C:\PS>invoke-command -computername Server01 -scriptblock {get-executionpolicy} | set-executionpolicy -force

说明
-----------
此命令从远程计算机获取执行策略并将该策略应用于本地计算机。

此命令使用 Invoke-Command cmdlet 向远程计算机发送命令。由于可以通过管道将 ExecutionPolicy (Microsoft.PowerShell.ExecutionPolicy) 对象传递到 Set-ExecutionPolicy,因此此命令不需要 ExecutionPolicy 参数。

该命令具有 Force 参数,该参数可禁止显示用户提示。





示例 4

C:\PS>set-executionpolicy -scope CurrentUser -executionPolicy AllSigned -force

C:\PS> get-executionpolicy -list

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

C:\PS> get-executionpolicy
AllSigned

说明
-----------
此示例演示如何设置特定作用域的执行策略。

第一个命令使用 Set-ExecutionPolicy cmdlet 设置当前用户的 AllSigned 的执行策略。它使用 Force 参数禁止显示用户提示。

第二个命令使用 Get-ExecutionPolicy 的 List 参数获取每个作用域中设置的执行策略。结果显示,为当前用户设置的执行策略不同于为计算机的所有用户设置的执行策略。

第三个命令使用不带参数的 Get-ExecutionPolicy cmdlet 获取本地计算机上的当前用户的有效执行策略。结果证明,为当前用户设置的执行策略优先于为所有用户设置的执行策略。





示例 5

C:\PS>set-executionpolicy -scope CurrentUser -executionPolicy Undefined

说明
-----------
此命令使用执行策略值 Undefined 有效删除为当前用户作用域设置的执行策略。结果,在组策略或 LocalMachine(所有用户)作用域中设置的执行策略是有效的。

如果将所有作用域中的执行策略设置为 Undefined 并且未设置组策略,则默认的执行策略 Restricted 对计算机的所有用户都是有效的。





另请参阅

概念

Get-ExecutionPolicy
Set-AuthenticodeSignature
Get-AuthenticodeSignature
about_Execution_Policies
about_Signing