You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

RemoteSigned执行政策下未签名互联网脚本可运行的原因咨询

为什么带Zone.Identifier的未签名脚本在不同PowerShell 5.1版本中执行结果不同?

这本质上是Windows 10版本更新带来的PowerShell安全策略逻辑调整,具体对应两个版本所处的系统迭代:

版本差异背后的系统背景

  • 你使用的5.1.14409.1012对应Windows 10 1607(Anniversary Update)
  • 5.1.16299.98对应Windows 10 1709(Fall Creators Update)

微软在1709版本中收紧了PowerShell对"互联网来源脚本"的判定规则:

核心行为差异原因

在Windows 10 1607及更早版本中,PowerShell的RemoteSigned执行策略仅对通过PowerShell直接从网络获取的脚本(比如用Invoke-WebRequest下载的)强制要求签名;对于本地保存的、仅带有Zone.Identifier ADS(ZoneId=3)的脚本,PowerShell不会将其判定为"远程来源",因此允许未签名运行。

而从Windows 10 1709开始,PowerShell更新了逻辑:只要脚本带有ZoneId=3的ADS标识(无论通过哪种方式下载到本地),就会被视为"来自互联网的远程脚本",此时RemoteSigned策略会强制要求脚本必须经过数字签名才能运行,这就是你在16299版本中看到报错的原因。

验证与解决方案

验证规则

你可以通过移除脚本的Zone.Identifier ADS来测试:

Remove-Item .\Get-Type.ps1 -Stream Zone.Identifier

之后再运行脚本,两个版本都会允许执行(因为脚本不再带有互联网来源标识)。

合法的解决方式

  • 移除Zone标识:对于信任的脚本,使用上述命令或者右键文件→属性→勾选"解除锁定"来移除ADS。
  • 签名脚本:如果你需要长期使用这个脚本,可以给自己的脚本添加数字签名,符合RemoteSigned策略要求。
  • 临时调整执行策略(不推荐):仅在测试环境中,可临时将当前用户的执行策略改为Unrestricted,但会降低系统安全性。

内容的提问来源于stack exchange,提问作者lit

火山引擎 最新活动