Windows下Python调用PowerShell脚本弹出SD卡失败求助
解决Windows下Python调用PowerShell弹出SD卡的问题
问题1:subprocess调用.ps1脚本报错WinError193
直接调用.ps1文件会报错,因为系统不知道要用PowerShell来执行它。正确写法是让subprocess调用powershell.exe去运行脚本:
import subprocess # 调用PowerShell执行脚本,-ExecutionPolicy Bypass用来绕过脚本执行限制 subprocess.run(["powershell.exe", "-ExecutionPolicy", "Bypass", "-File", "ejectusb.ps1"], check=True)
关键说明:
- 必须指定
powershell.exe作为运行程序,不能直接传.ps1文件路径 -ExecutionPolicy Bypass:临时绕过PowerShell的脚本签名限制,避免脚本被阻止运行
问题2:os.system执行命令无效果
你的命令存在换行解析和引号冲突问题,加上执行策略参数就能正常运行:
import os # 把命令写成一行,转义内部单引号,加上执行策略参数 os.system('powershell -ExecutionPolicy Bypass -Command "$driveEject = New-Object -comObject Shell.Application; $driveEject.Namespace(17).ParseName(\'J:\').InvokeVerb(\'Eject\')"')
注意事项:
- 命令要写成一行,避免换行导致PowerShell解析失败
- 内部的单引号用
\'转义,防止和外层单引号冲突 -ExecutionPolicy Bypass确保脚本能顺利执行
额外排查点
如果调用InvokeVerb("Eject")还是没反应,可能是系统里弹出功能的动词名称是中文的,改成以下命令试试:
$driveEject.Namespace(17).ParseName("J:").InvokeVerb("弹出(&E)")
内容的提问来源于stack exchange,提问作者Davy
相关产品推荐
相关产品推荐

