You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何删除powershell.exe -executionpolicy unrestricted后脚本突然正常运行

故障成因说明

首先你的原run.bat存在逻辑设计缺陷:
第一行powershell.exe -executionpolicy unrestricted没有指定待执行的命令参数,运行时会直接启动一个独立的交互式PowerShell会话,批处理后续的命令会被阻塞,直到手动退出该会话才会继续执行。

为什么此前能正常运行

大概率是故障发生前的Windows系统更新、PowerShell版本迭代改变了powershell.exe的默认行为:旧版本下不带命令参数调用powershell.exe时,完成执行策略设置后会自动退出会话,不会阻塞后续命令;新版本下会停留在交互式会话状态,导致第二行的python调用命令永远不会被执行。
删除第一行后恢复正常,是因为剩余的powershell python .\aTest.py本身是完整的PowerShell调用命令,没有阻塞逻辑,会直接在当前会话执行python脚本。

为什么之前加-executionpolicy才能运行

该参数的作用是临时调整当前PowerShell会话的执行策略,早期你需要调用ps1脚本时,系统默认的PowerShell执行策略为Restricted,禁止运行本地未签名脚本,因此需要加该参数才能正常启动ps1脚本。
现在无需该参数也能运行的可能原因:

  • 你后续手动修改了PowerShell全局执行策略,允许运行本地脚本
  • 当前你调用的是python外部命令,而非ps1脚本,执行策略限制不会作用于外部命令调用
排查方法
  • 执行Get-ExecutionPolicy -List查看所有作用域的PowerShell执行策略,确认故障前后是否有配置变更
  • 保留原始bat的第一行运行,观察命令窗口是否停留在PS 开头的PowerShell提示符状态,验证是否为第一行会话阻塞导致的问题
  • 执行$PSVersionTable查看当前PowerShell版本,确认故障前后是否有版本更新,不同版本的powershell.exe默认行为存在差异
本地管理员用户加该参数的区别
  • PowerShell执行策略是独立于系统用户权限的安全限制,即便是本地管理员组用户,默认配置下也会被禁止运行未签名的ps1脚本
  • -executionpolicy unrestricted只会修改当前这次启动的PowerShell会话的执行策略,不会修改全局配置
  • 若调用对象是ps1脚本,且全局执行策略未放开脚本运行限制,即便是管理员也需要加该参数才能正常执行脚本;若调用对象是python等外部命令,执行策略不会产生限制,加不加该参数没有区别

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:06:04