Windows下PowerShell调用pnpm via Start-Process报错:%1不是有效Win32应用
解决Windows PowerShell中Start-Process调用pnpm报错的问题
问题原因
Windows下pnpm默认以.cmd脚本形式存在,而非原生EXE程序。Start-Process的-FilePath参数直接传入pnpm时,无法正确识别该脚本类型,因此抛出"%1 is not a valid Win32 application"错误。而npm在Windows下有对应的可执行文件,系统能正确解析;Mac的Shell直接支持脚本文件的调用,所以不会出现问题。
解决方案
方法1:指定pnpm的.cmd后缀
修改脚本中的$Tool变量为pnpm.cmd,让Start-Process能正确识别可执行脚本:
$Tool="pnpm.cmd" $ArgumentList="run", "build" $processResult = Start-Process ` -FilePath $Tool ` -ArgumentList $ArgumentList ` -NoNewWindow ` -PassThru ` -Wait
方法2:直接通过PowerShell调用pnpm(推荐)
跳过Start-Process,直接用PowerShell的调用操作符&执行pnpm,这种方式更简洁,还能直接获取退出码:
& pnpm run build $exitCode = $LASTEXITCODE # 捕获命令退出码
如果需要获取进程信息,可以在执行后用Get-Process查找相关进程。
方法3:通过cmd.exe间接调用
利用cmd /c来执行pnpm命令,让cmd解析pnpm的别名:
$processResult = Start-Process ` -FilePath "cmd.exe" ` -ArgumentList "/c", "pnpm run build" ` -NoNewWindow ` -PassThru ` -Wait
内容的提问来源于stack exchange,提问作者rasilvap
相关产品推荐
相关产品推荐

