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

如何在Python中不指定执行器直接运行PowerShell(ps1)脚本?

在Python中直接用subprocess运行PowerShell脚本的解决方案

问题背景

在Python中使用subprocess可以直接运行.bat脚本:

import subprocess as sp
sp.run(["D:/Temp/hello.bat"])

但直接调用.ps1脚本时会抛出WinError 193: %1 is not a valid Win32 application错误:

import subprocess as sp
sp.run(["D:/Temp/hello.ps1"])

已尝试过添加.PS1到PATHEXT、修改PowerShell执行策略,均无效;也知道可以通过指定pwsh解释器或.bat中转解决,但因程序是从类Unix系统移植而来,仅支持调用单个可执行文件(类Unix依赖shebang机制,Windows无此特性),所以需要更贴合需求的方案。

解决步骤

核心是修改Windows的文件关联注册表,让系统自动用PowerShell解释器执行.ps1文件:

  1. 启动注册表编辑器(运行regedit)
  2. 定位到HKEY_CLASSES_ROOT\.ps1,将默认值设为Microsoft.PowerShellScript.1
  3. 定位到HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command,把默认值修改为:
    "C:\Program Files\PowerShell\7\pwsh.exe" "-File" "%1" %*
    
    (若使用系统自带的PowerShell,路径替换为C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe)

修改完成后,重启终端或刷新环境变量,再运行之前的Python代码即可正常执行.ps1脚本。

关键说明

  • PATHEXT仅控制系统查找可执行文件时的后缀优先级,无法解决“不知道用什么程序打开.ps1”的核心问题,所以单独修改它没用。
  • 执行策略是PowerShell的脚本运行权限控制,和subprocess能否调用脚本文件本身无关,因此修改执行策略无法解决该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:41:10