如何让PowerShell运行无扩展名的<something>_test格式可执行文件?
解决无扩展名/特定格式可执行文件的PowerShell执行问题
问题描述
需要运行一批无扩展名、命名格式为<something>_test的可执行文件,使用以下PowerShell命令时报错:
& $test_bin | Tee-Object -FilePath $log_output_file
错误信息:
Cannot run a document in the middle of a pipeline
尝试添加_test到PATHEXT环境变量($env:PATHEXT="$env:PATHEXT;_test")无效,推测该变量仅支持标准扩展名。
可行解决方案
1. 通过cmd /c执行文件
利用cmd对可执行文件的判断逻辑,直接调用cmd来运行目标文件,输出可正常通过管道传递:
cmd /c "$test_bin" | Tee-Object -FilePath $log_output_file
2. 使用Start-Process捕获输出
如果需要更精细控制执行过程,可借助Start-Process的重定向参数处理输出:
# 用临时文件暂存执行输出 $tmpLog = "$log_output_file.tmp" Start-Process -FilePath $test_bin -NoNewWindow -Wait -RedirectStandardOutput $tmpLog # 读取临时文件内容,同时输出到控制台和目标日志文件 Get-Content $tmpLog | Tee-Object -FilePath $log_output_file # 清理临时文件 Remove-Item $tmpLog
3. 修改注册表将_test标记为可执行扩展名
通过注册表配置让Windows识别_test结尾的文件为可执行类型(需管理员权限):
# 创建扩展名关联,绑定到exe文件类型 New-Item -Path "HKLM:\SOFTWARE\Classes\.test" -Force | Out-Null New-ItemProperty -Path "HKLM:\SOFTWARE\Classes\.test" -Name "(Default)" -Value "exefile" -Force | Out-Null # 更新PATHEXT环境变量 $env:PATHEXT = "$env:PATHEXT;.TEST"
配置完成后,即可直接用& $test_bin命令运行目标文件,无需额外处理。
内容的提问来源于stack exchange,提问作者Yair Halberstadt
相关产品推荐
相关产品推荐

