[玩转系统] 用于管理 PowerShell 执行策略的 Set-ExecutionPolicy
作者:精品下载站 日期:2024-12-14 13:06:43 浏览:14 分类:玩电脑
用于管理 PowerShell 执行策略的 Set-ExecutionPolicy
您是否曾经下载过 PowerShell 脚本并运行它,然后遇到下面臭名昭著的错误消息?如果是这样,您需要 Set-ExecutionPolicy cmdlet 和本教程!
在本文中,您将了解 PowerShell 执行策略以及如何使用 Set-ExecutionPolicy
cmdlet 管理它们。在本文结束时,您不仅会知道如何运行脚本,还会了解如何使用执行策略!
本教程是根据 Windows PowerShell 编写的,并且所有演示都是使用 Windows PowerShell 执行的。执行策略并不是 Windows PowerShell 独有的,它们在 PowerShell 6+ 中的操作非常相似。但是,如果您使用 PowerShell 6+,您可能会发现行为上存在细微差别。
什么是执行政策?
如果您遇到过上述错误,那么您就遇到了执行策略。 PowerShell 执行策略是一种安全机制,可保护您的系统免遭恶意脚本的运行。执行策略不会阻止您在控制台中将 PowerShell 代码作为 shell 运行,而是阻止脚本执行。
微软表示,从技术上讲,执行策略并不是一种“安全”措施,而更像是一扇可以打开和关闭的大门。毕竟,您可以轻松绕过定义的执行策略,稍后您将了解到。
执行策略基于信任。如果您信任某个脚本,那么它很可能不是恶意的。执行策略通常不会阻止所有脚本的执行。它们的主要目的(尤其是在配置更严格时)是确保您信任正在运行的脚本是使用证书进行加密签名的。
执行政策范围
正如您所知,执行策略限制脚本执行,但 PowerShell 可以在许多不同的上下文中执行脚本。 PowerShell 通过作为 SYSTEM 运行的计划任务或在单个打开的 PowerShell 控制台范围内运行,在用户的登录上下文或全局计算机上下文下执行脚本。
为了适应所有这些上下文,PowerShell 有五个不同的上下文或范围,您可以定义执行策略。
- MachinePolicy - 此范围仅限于一台计算机。它会影响登录到该计算机的所有用户,并且由 Active Directory 组策略对象设置它。定义后,它优先于所有其他范围。
- 本地机器。这是影响所有计算机用户的默认范围,并存储在 HKEY_LOCAL_MACHINE 注册表子项中。当您使用
Set-ExecutionPolicy
设置执行策略时,此范围是默认范围。
LocalMachine 的执行策略存储在注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\ShellIds\Microsoft.PowerShell 中。
- UserPolicy - UserPolicy 范围仅影响计算机上的单个用户,由 Active Directory 组策略对象设置它。您无法使用
Set-ExecutionPolicy
更改此策略。 - 当前用户。 CurrentUser 策略范围仅为当前用户设置执行策略,并存储在 HKEY_CURRENT_USER 注册表配置单元下。您无法使用
Set-ExecutionPolicy
更改此策略。
CurrentUser 的执行策略存储在注册表项 HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\ShellIds\Microsoft.PowerShell 中。
- 进程 - 此范围定义单个用户的单个 PowerShell 会话的执行策略。 流程执行策略范围是您可以定义的最细粒度的执行策略。与其他执行策略不同,此策略保存在名为
PSExecutionPolicyPreference
的环境变量中,而不是注册表中。
执行策略类型
执行策略有不同的“安全级别”。这些级别决定了执行政策的严格程度。例如,您可以制定一个基本上不执行任何操作的执行策略;它被禁用,但另一方面,执行策略可以完全禁用脚本执行。
让我们从最严格到最严格的顺序介绍配置执行策略安全级别的每种方法。
无限制
限制最少的政策是完全不产生影响的政策; 不受限制。 无限制执行策略基本上被禁用。当执行策略为“无限制”时,无论信任如何,用户都可以运行所有脚本。
旁路
与无限制类型一样,设置为绕过的执行策略不会阻止任何内容。
虽然“绕过”和“无限制”具有类似的效果,但“绕过”执行策略类型在技术上根本不是一种类型。它完全跳过定义的执行策略。
不明确的
虽然不常用,但您实际上可以通过将执行策略设置为未定义来删除它。当您将执行策略设置为未定义时,PowerShell 将从分配的范围中完全删除任何分配的执行策略。
在非 Windows 计算机上,执行策略始终设置为无限制且无法更改。
当所有范围都设置为“未定义”时,PowerShell 本质上会将所有范围视为“受限制”。
远程签名
正如您之前所读到的,执行策略都是通过脚本的数字签名获得的信任。 PowerShell 还会考虑该脚本的来源。它是在您的本地计算机上创建的还是由互联网上的某个随机人员创建的?
在本地计算机以外的地方构建的脚本本质上不应该被信任。这就是 PowerShell 提供 RemoteSigned 执行策略的原因。 RemoteSigned 执行策略强制要求所有脚本都在本地计算机以外的地方编写,并进行加密签名。
对于使用
Unblock-File
cmdlet 从 Internet 下载的文件,您可以在一定程度上覆盖此执行策略。了解有关的更多信息稍后将在“RemoteSigned 策略的工作原理”部分中介绍此行为。
对于 Windows Server,RemoteSigned 被指定为默认策略。
全部签名
如果您想确保所有 PowerShell 脚本都经过加密签名,请将执行策略设置为AllSigned。与RemoteSigned 一样,此执行策略将签名要求更进一步,并强制所有脚本在执行前都经过签名。
即使您设置了 AllSigned 执行策略,您仍然可以通过绕过它来绕过执行策略,稍后您将了解到。
受限制的
最严格的执行策略是“Restricted”。当执行策略为“Restricted”时,绝对没有脚本可以执行;无论他们是否值得信任。此策略本质上完全禁用脚本执行。
此外,与限制较少的类型不同,“受限”类型可确保 PowerShell 格式和配置文件 (PS1XML)、模块脚本文件 (PSM1) 和 PowerShell 配置文件无法执行。
默认情况下,所有 Windows 客户端都设置为“受限”执行策略。
从技术上讲,Microsoft 定义了第七种执行策略,称为“默认”,但该类型本质上是 RemoteSigned(Windows 服务器)和 Restricted(Windows 客户端)的另一个标签。
RemoteSigned 策略的工作原理
需要指出的一个特定场景是 RemoteSigned 执行策略的工作原理。此执行策略(如您所知)可防止运行在本地计算机以外的其他位置创建的脚本。
但是 PowerShell 如何知道脚本是在其他地方创建的呢?数据流。
了解和查询 NTFS 数据流
每当您在 NTFS 文件系统上创建文件时,NTFS 都会向该文件应用备用数据流 (ADS) 属性。 ADS 有两个文件属性:$Data 和zone.Identifier。 PowerShell 使用 zone.Identifier 属性来标识 PowerShell 脚本文件是否在其他位置创建。
与压缩或只读等其他属性不同,ADS 属性隐藏在文件资源管理器中。但是,通过使用 PowerShell,您可以检查这些数据流。
使用脚本路径和 Stream
参数运行 Get-Item
cmdlet,如下所示。在此示例中,Hello World.ps1 是在本地计算机上编写的。请注意,分配给 Stream
属性的唯一属性是 $DATA
。没有 ADS 属性。
Get-Item '.\Hello World.ps1' -Stream *
现在,对从 Internet 下载的脚本运行相同的命令。请注意,现在 Get-Item
返回另一个完全带有 Zone.Identifier
的 Stream
的对象。
一旦您知道某个文件具有 ADS,您就可以使用 Get-Content
命令来发现该区域。该区域定义了文件的来源。
Get-Content .\Get-CertDetails.ps1 -Stream zone.identifier
Get-Content
将返回一个 ZoneId
值,该值表示文件来自的区域。
可能的区域值为:
Zone ID Zone
------- ---------------------
0 My Computer
1 Local Intranet Zone
2 Trusted sites Zone
3 Internet Zone
4 Restricted Sites Zone
执行策略优先级
如上所述,许多不同的执行策略同时存在。所有这些执行策略结合起来就决定了当前会话的设置。当您有多个有效的执行策略时,您必须具有优先权。
策略优先级是 PowerShell 应用在不同范围设置的不同策略的顺序。某些执行策略的优先级高于其他策略。
当您运行Get-ExecutionPolicy -List
时,您将发现当前有效的所有执行策略从最低优先级到最高优先级排序。例如,由于 MachinePolicy 的优先级较低,LocalMachine 和 CurrentUser 策略将覆盖它。
使用执行策略
了解了执行策略的背景之后,现在让我们深入了解如何使用它们!要使用 PowerShell 的执行策略,您可以使用两个命令:Get-ExecutionPolicy
来发现当前定义的策略,以及 Set-ExecutionPolicy
来设置新策略。
获取当前分配的策略
在开始更改执行策略之前,您需要了解正在处理的内容。为此,您需要使用 Get-ExecutionPolicy
命令。此命令枚举计算机上当前分配的所有策略。
当您在不带参数的 PowerShell 控制台上直接运行 Get-ExecutionPolicy
命令时,它将显示为当前 PowerShell 会话设置的执行策略。
要查看设置到范围的执行策略,请使用您想要查看结果的范围名称指定 Scope
参数。
Get-ExecutionPolicy -Scope Process
Get-ExecutionPolicy -Scope LocalMachine
要查看所有作用域及其执行策略,请使用 List
参数,如下所示。
Get-ExecutionPolicy -list
更改执行策略
一旦您知道当前分配了哪些执行策略,您也可以更改它们。要更改单台计算机上的策略,您可以使用 Set-ExecutionPolicy
命令。但是,如果您在一个组织中,您会希望批量更改策略。如果是这种情况,并且位于 Active Directory 域中,则始终拥有组策略。
使用 Set-ExecutionPolicy
我们首先介绍如何使用 Set-ExecutionPolicy 命令更改策略。为此,请以管理员身份打开 PowerShell。
现在,使用提供执行策略名称的单个参数 (ExecutionPolicy
) 运行 Set-ExecutionPolicy
命令。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
然后,PowerShell 会询问您是否要更改执行策略。如果这样做,请输入 Y 或 A 并按 Enter。
某些 PowerShell 命令需要运行多个其他任务才能运行。如果在上面的示例中输入 Y
,PowerShell 可能会提示您继续执行每个步骤。如果您按A
,它将继续执行所有后续步骤。
在没有提示的情况下运行 Set-ExecutionPolicy
默认情况下,当您运行Set-ExecutionPolicy
时,它会提示您是否要更改执行策略。您可以通过将 Force
参数添加到命令中来跳过此提示。使用 Force
参数将禁止所有确认提示。
Set-ExecutionPolicy RemoteSigned -Force
通过注册表设置 PowerShell 执行策略
由于大多数执行策略都存储在注册表中(不包括进程),因此您也可以直接通过注册表更改策略。
要通过注册表更改执行策略:
- 打开 Windows 注册表编辑器 (regedit) 或您选择的注册表编辑工具。
2. 导航到您想要更改的执行策略范围的注册表项。
LocalMachine - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\ShellIds\Microsoft.PowerShell
CurrentUser - HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\ShellIds\Microsoft.PowerShell
3. 右键单击注册表项并创建一个名为ExecutionPolicy的新字符串值。
4. 双击新创建的 ExecutionPolicy 字符串值,然后输入所需的执行策略名称(Restricted、RemoteSigned、AllSigned、无限制或未定义)。
5. 在同一键中创建另一个名为 Path 的字符串值。 Path 字符串值表示 PowerShell 引擎的路径。确保路径值为 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe,它指向 Windows PowerShell 引擎。
CurrentUser 执行策略会覆盖 LocalMachine 策略。如果您在注册表中设置了 CurrentUser 策略,并尝试通过 Set-ExecutionPolicy 更改执行策略,默认情况下,该策略会在 LocalMachine 上设置策略 范围内,PowerShell 将返回如下所示的错误。
通过组策略设置 PowerShell 执行策略
如果您所在的组织拥有 Active Directory,您不会希望在所有 Windows 计算机上运行 Set-ExecutionPolicy
cmdlet。相反,您可以使用组策略批量管理策略。
通过 GPO 管理执行策略:
创建组策略对象
- 在域控制器或加入域的工作站上打开组策略管理应用程序。
2. 展开域 —> —> 组策略对象。
3. 右键单击组策略对象,然后单击新建。
4. 为您的 GPO 命名。在本教程中,GPO 称为 PowerShell 执行策略。
5. 右键单击新创建的 GPO,然后单击编辑。
6. 导航到“计算机配置\策略\管理模板\Windows 组件\Windows PowerShell”。
7. 打开右侧窗格中的设置,打开打开脚本执行设置。
8. 在打开脚本执行框中,选择启用选项。您现在可以选择如下所示的任一选项:
9. 现在将执行策略更改为您所需的策略。
- 仅允许签名脚本 - 当受信任的发布者签名时允许所有脚本执行。
- 允许本地脚本和远程签名脚本 - 允许本地脚本运行,但从 Internet 下载的脚本应由受信任的发布者签名。
- 允许所有脚本 - 允许运行所有脚本。
分配组策略对象
创建 GPO 后,就可以将其分配给目标计算机了。为此,您必须将 GPO 分配给 Active Directory 组织单位 (OU)。
如果您编辑了现有 GPO,而不是创建新 GPO,则该 GPO 可能已分配给 OU。
- 在组策略管理中,通过域导航至您选择的 OU —> —> 。
2. 右键单击 OU,然后选择链接现有 GPO...
3. 选择刚刚创建的 GPO(PowerShell 执行策略),然后单击确定。
您现在应该看到分配给 OU 的 GPO,如下所示。
此时,您可以等待定义的组策略刷新间隔,也可以在目标计算机上运行gpupdate命令来强制刷新。
锁定当地政策变化
一旦更改执行策略的 GPO 生效,本地用户将无法再通过本地 PowerShell 控制台更改策略。如果他们尝试,他们将收到错误,如下所示。
完全绕过执行策略
如前所述,执行策略不一定是一种安全措施。为什么?因为如果您愿意,可以通过几种不同的方式完全绕过它。
使用-ExecutionPolicy绕过
参数
与其他执行策略不同,Bypass 策略通常不在 PowerShell 控制台中设置,而是传递到以管理员身份运行的 powershell.exe 引擎。
例如,要完全跳过任何执行策略来运行名为 Hello World.ps1 的脚本,请调用 powershell.exe,使用 Bypass
参数并提供文件路径如下图所示。
powershell.exe -executionpolicy bypass -file '.\Hello World.ps1'
读取脚本并执行原始代码
您还可以通过首先读取脚本的内容,然后将该内容直接传递到 PowerShell 引擎来绕过任何执行策略。这样做会单独运行每个命令,而不是一次作为整个脚本运行。
如下所示,执行策略设置为“受限”,但通过读取脚本并将其传递给“powershell.exe”,它仍然有效。
这种方法类似于在 PowerShell 编辑器(例如 PowerShell ISE 或 Visual Studio Code)中打开脚本,选择一行并按 F8。
Get-Content '.\Hello World.ps1' | powershell.exe -noprofile
结论
现在您应该了解有关 PowerShell 执行策略的所有信息。尽管它们在技术上不是一种安全措施,但您仍然应该根据组织策略在组织中管理它们。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag