news 2026/5/10 16:17:26

Windows-Execution-Policies

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows-Execution-Policies
  • 导航 (返回顶部)
    • 1. about_Execution_Policies
      • 1.1 POWERSHELL 执行策略
      • 1.2 执行策略作用域
    • 2. 使用 PowerShell 管理执行策略
      • 2.1 查看当前的有效执行策略
      • 2.2 更改执行策略
      • 2.3 删除执行策略
      • 2.4 为某个会话设置一个不同的执行策略
      • 2.5 使用组策略管理执行策略
    • 3. 未签名的脚本
      • 3.1 未签名的脚本包含:
      • 3.2 本地脚本与网络下载脚本的区别
      • 3.3 一秒解锁网络下载脚本
      • 3.4 临时绕过策略执行特定脚本
      • 3.5 直接运行网络未签名脚本
      • 3.6 小结
    • 4. 执行策略可能会失败的原因
1. about_Execution_Policies 1.1 POWERSHELL 执行策略 1.2 执行策略作用域 2. 使用 PowerShell 管理执行策略 2.1 查看当前的有效执行策略 2.2 更改执行策略 2.3 删除执行策略 2.4 为某个会话设置一个不同的执行策略 2.5 使用组策略管理执行策略 3. 未签名的脚本 3.1 未签名的脚本包含: 3.2 本地脚本与网络下载脚本的区别 3.3 一秒解锁网络下载脚本 3.4 临时绕过策略执行特定脚本 3.5 直接运行网络未签名脚本 3.6 小结 4. 执行策略可能会失败的原因

1. about_Execution_Policies

https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_execution_policies
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies
PowerShell 执行策略是一项安全功能,用于控制 PowerShell 加载配置文件和运行脚本的条件。 此功能有助于防止恶意脚本的执行。
本地计算机和当前用户的执行策略存储在注册表中。
无需在 Windows PowerShell 配置文件中设置执行策略。
某个特定会话的执行策略仅存储在内存中,当关闭会话时,该执行策略会丢失。
执行策略不是限制用户操作的安全系统。
例如,当用户无法运行脚本时,可以通过在命令行键入脚本内容轻松绕过策略。
相反,执行策略帮助用户设置基本规则并阻止他们无意中违反规则。

1.1 POWERSHELL 执行策略

ExecutionPolicy
执行策略
已签名未签名行为描述概述组策略
选项
本地远程(网络)
RestrictedNoNoNo默认策略,禁止所有. 包括: (.ps1xml)格式, (.psm1)模块, (.ps1)PS配置受限n
AllSignedYesNoNo要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。仅签名Y
RemoteSignedYesYesNo本地脚本可运行,下载的脚本需签名 (Windows Server 2012 R2 默认执行策略)普通Y
UnRestrictedYesYesYes (提示)允许运行所有脚本,但下载的未签名脚本会提示确认 (非 Windows 的默认执行策略)非受限Y
BypassYesYesYes无任何限制,无警告或提示!(高风险)无限制n
Undefined---当前作用域中未设置执行策略。未定义n
Undefined 表示当前作用域中未设置执行策略。
若所有作用域都没有设置,则默认为: Restricted, 禁止所有脚本。

1.2 执行策略作用域

优先级Scope 作用域执行策略影响范围存储在:
最高MachinePolicy当前计算机上的所有用户通过组策略为计算机的所有用户设置
^UserPolicy当前计算机上的当前用户通过组策略为计算机的当前用户设置
^PROCESS当前的 PowerShell 会话环境变量 $env:PSExecutionPolicyPreference.
关闭 PowerShell 会话时,将删除变量和值。
^CURRENTUSER当前计算机上的当前用户存储在 HKCU 注册表子项
最低LOCALMACHINE当前计算机上的所有用户HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
作用域优先级:如上表从上往下依次降低。也是命令 (Get-ExecutionPolicy -list) 列出的顺序。
  • 若所有作用域都没有设置执行策略,即同为 [Undefined], 则默认为: Restricted, 禁止所有脚本。
  • 若多个作用域设置了执行策略,则优先级高的生效,优先级低的会被忽略。

2. 使用 PowerShell 管理执行策略

2.1 查看当前的有效执行策略

https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.5#managing-the-execution-policy-with-powershell
获取当前 PowerShell 会话的有效执行策略
Get-ExecutionPolicy
Restricted
若要获取影响当前会话的所有执行策略,并按优先顺序显示它们,请键入:
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
以下命令获取 CurrentUser 作用域的执行策略。
Get-ExecutionPolicy -Scope CurrentUser
Undefined

2.2 更改执行策略

若要更改你计算机上的 Windows PowerShell 执行策略,请使用 Set-ExecutionPolicy cmdlet。
更改会立即生效,你无需重新启动 Windows PowerShell。
  • 如果为 Scopes LocalMachine 或 CurrentUser 设置执行策略,更改将保存在配置文件中,并在再次更改之前保持有效。
  • 如果为 Process 范围设置执行策略,则不会将其保存在配置文件中。 执行策略将一直保留,直到当前进程和任何子进程关闭。
若要更改你的执行策略,请键入:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
不指定作用域,则默认为本机
若要设置某个特定作用域中的执行策略,请键入
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
更改执行策略的命令会成功,但不一定会成为有效的执行策略。
例如,用于设置本地计算机的执行策略的命令可能成功,但会被当前用户的执行策略覆盖。 优先级更高的生效。

2.3 删除执行策略

若要删除某个特定作用域的执行策略,则将执行策略的值设置为 Undefined。
例如,若要删除本地计算机的所有用户的执行策略,请键入:
Set-ExecutionPolicy Undefined
或者键入:
Set-ExecutionPolicy Undefined -scope LocalMachine
如果未在任何作用域中设置执行策略,则有效的执行策略是 Restricted,它是默认执行策略。

2.4 为某个会话设置一个不同的执行策略

可以使用 PowerShell.exe 的 ExecutionPolicy 参数为新的 Windows PowerShell 会话设置执行策略。 策略仅影响当前会话和子会话。
例如:
PowerShell.exe -ExecutionPolicy AllSigned
设置的执行策略不是存储在注册表中,而是存储在 $env:PSExecutionPolicyPreference 环境变量中。 当关闭在其中设置了策略的会话时,会删除变量。不能通过编辑变量值来更改策略。
在会话期间,为会话设置的执行策略优先于在注册表中为本地计算机或当前用户设置的执行策略。 但是,它并不优先于通过使用组策略设置的执行策略。优先级见前面的表格。

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

可以使用“启用脚本执行”组策略设置来管理计算机的执行策略。 组策略设置覆盖所有作用域中设置的执行策略。
“启用脚本执行”策略设置如下所示:
  • -- 如果禁用“启用脚本执行”,则脚本不会运行。这等效于“Restricted”执行策略。
  • -- 如果启用“启用脚本执行”,则可以选择一个执行策略。组策略设置等效于以下执行策略设置。
    • Group Policy Execution Policy
    • 允许所有脚本 Unrestricted
    • 允许本地脚本和远程签名脚本 RemoteSigned
    • 只允许签名脚本 AllSigned
  • '-- 如果未配置“启用脚本执行”,则它将不起作用。 在 Windows PowerShell 中设置的执行策略是有效的。
PowerShellExecutionPolicy.adm 和 PowerShellExecutionPolicy.admx 文件将“启用脚本执行”策略添加到组策略编辑器中的计算机配置节点和用户配置节点中。路径如下:
  • Administrative Templates\Windows Components\Windows PowerShell
  • [计算机配置] 或 [用户配置] → 管理模板 → Windows 组件 → Windows PowerShell → 启用脚本执行
设置后,让策略立即生效命令:
gpupdate /force
[计算机配置] 节点中设置的策略 优先于 [用户配置] 节点中设置的策略。
Microsoft 下载中心提供 PowerShellExecutionPolicy.adm 文件。有关详细信息,请访问 PowerShell 的管理模版
https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_group_policy_settings
about_Group_Policy_Settings

3. 未签名的脚本

3.1 未签名的脚本包含:

  • 网络地址未签名脚本,比如: http://127.0.0.1:9000/Microsoft.PowerShell_profile.ps1
  • 本地未签名脚本,本机生成的脚本,比如: Microsoft.PowerShell_profile.ps1
  • 网络下载的未签名脚本。~\download\Microsoft.PowerShell_profile.ps1

3.2 本地脚本与网络下载脚本的区别

在 Windows 中,Internet Explorer 和 Microsoft Edge 等程序会向下载的文件添加备用数据流。 这会将文件标记为“来自 Internet”。
如果 PowerShell 执行策略是 RemoteSigned,PowerShell 将不会运行从 Internet 下载的未签名脚本,其中包括电子邮件和即时消息程序。
可以对脚本进行签名,或选择在不更改执行策略的情况下运行未签名的脚本。
从 PowerShell 3.0 开始,可以使用 cmdlet 的 Get-Item 的 Stream 参数来检测因从 Internet 下载而被阻止的文件。 使用 Unblock-File cmdlet 解除阻止脚本,以便可以在 PowerShell 中运行这些脚本。
下载文件的其他方法可能不会将文件标记为来自 Internet 区域。 一些示例包括:
curl.exe; Invoke-RestMethod; Invoke-WebRequest.
查看当前目录下来自网络的未签名文件
  • 在脚本文件上,右键 → [属性] 下方有 [解除锁定]的待选框,该文件即为网络下载的带有Internet标记的网络脚本。
  • 使用命令行查看 带有Internet标记的网络脚本
    • [0.02 sec] >Get-Item * -Stream "Zone.Identifier" -ErrorAction SilentlyContinue
    • PSPath : Microsoft.PowerShell.Core\FileSystem::D:\Tom\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1:Zone.Identifier
    • PSParentPath : Microsoft.PowerShell.Core\FileSystem::D:\Tom\Documents\WindowsPowerShell
    • PSChildName : Microsoft.PowerShell_profile.ps1:Zone.Identifier
    • PSDrive : D
    • PSProvider : Microsoft.PowerShell.Core\FileSystem
    • PSIsContainer : False
    • FileName : D:\Tom\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    • Stream : Zone.Identifier
    • Length : 125

3.3 一秒解锁网络下载脚本

如果 PowerShell 执行策略是 RemoteSigned,则会阻挡网络下载的脚本。但只需解锁,将网络下载脚本变成本地脚本即可。
有很多方法实现这个过程:
  • [下载的脚本文件] 上右键 → 点击 [属性] → 勾选下方的 [解除锁定]
  • 使用文本编辑器 打开 [下载的脚本文件] → [另存为],新保存的文件就是本地脚本了…
  • 使用命令解锁,下面是解锁的不同写法:
    • dir D:\Downloads\*PowerShell* | Unblock-File
    • Unblock-File -Path D:\Downloads\PowerShell.ps1
    • Get-Item D:\Downloads\PowerShell.ps1 | Unblock-File
获取Unblock-File命令帮助
  • get-help Unblock-File
  • get-help Unblock-File -examples
  • get-help Unblock-File -detailed

3.4 临时绕过策略执行特定脚本

PowerShell.exe -ExecutionPolicy Bypass -File "D:\Downloads\PowerShell.ps1"
仅对当前会话有效,退出当前PowerShell后策略自动恢复

3.5 直接运行网络未签名脚本

在本地包含脚本的目录下执行如下命令,启动简单web服务
python -m http.server 9000
通过本机IP即可访问该文件夹的脚本文件
http://127.0.0.1:9000/Microsoft.PowerShell_profile.ps1
通过 Invoke-Expression 命令从网络加载 PowerShell 脚本. 效果同本地文件...
IEX (New-Object Net.WebClient).DownloadString('http://127.0.0.1:9000/Microsoft.PowerShell_profile.ps1')
这个脚本文件本身,即使有来自Internet的标记,不需要解锁,就能加载执行。
查看相关帮助
  • Iex -?
  • get-help Invoke-Expression -examples
  • get-help Invoke-Expression -detailed
加载 PowerShell 脚本
https://exp10it.io/posts/load-powershell-script/

3.6 小结

网络下载的未签名脚本,如上所述,很多方法,非常容易就能解锁变为本地脚本。
再回看前面的 [执行策略表格] 对于网络下载的未签名脚本的态度:
  • RemoteSigned,No,但是可以轻松1秒解锁…
  • UnRestricted,Yes (提示)
  • Bypass,Yes
这样看来这3个策略其实差别不大...

4. 执行策略可能会失败的原因

出现以下错误:
AuthorizationManager check failed.
PowerShell 使用 Windows 桌面 Shell 中的 API (explorer.exe) 来验证脚本文件的区域。
Windows Shell 在 Windows Server Core 和 Windows Nano Server 上不可用。
如果 Windows 桌面 Shell 不可用或无响应,也可能在任何 Windows 系统上收到此错误。
例如,在登录期间,PowerShell 登录脚本可能会在 Windows 桌面准备就绪之前开始执行,从而导致失败。
使用 ByPass 或 AllSigned 的执行策略不需要区域检查,以避免问题。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 0:19:55

EmotiVoice支持语音情感历史记录回溯功能

EmotiVoice 实现语音情感记忆:让AI“记得”它的情绪 在虚拟助手轻声安慰你之前,它是否还记得上一次对话中你语气里的疲惫?当游戏角色因剧情转折而愤怒咆哮时,它的声音变化是突兀的切换,还是情绪层层累积的结果&#x…

作者头像 李华
网站建设 2026/5/4 5:49:21

EmotiVoice语音合成中的多音字准确识别率提升

EmotiVoice语音合成中的多音字准确识别率提升 在智能语音助手动辄“把‘银行’读成‘yn xng’”的年代,用户早已对TTS系统的“读错字”习以为常。然而,当AI开始朗读《红楼梦》或医学文献时,一个“重”字念错声调,就可能让听众瞬间…

作者头像 李华
网站建设 2026/4/30 9:29:37

Python 实战:手把手教你开发百度网盘全功能开发者工具

在数字化时代,自动化管理云盘文件是许多开发者的共同需求。百度网盘开放平台(XPAN)提供了强大的 API,但对于初学者来说,身份认证(OAuth 2.0)和权限校验(尤其是令人头疼的 31064 错误…

作者头像 李华
网站建设 2026/5/10 1:16:13

Kotaemon前端交互界面开源项目推荐

Kotaemon:构建生产级智能对话系统的开源利器 在大模型能力日益普及的今天,越来越多企业开始尝试将 LLM 应用于客服、知识问答、技术支持等实际场景。但很快就会遇到一个共性问题:模型“说得漂亮”,却常常“答非所问”——给出的回…

作者头像 李华