获取所有进程PID并传入program.exe的PowerShell脚本报错求助
解决PowerShell启动进程时的参数匹配错误问题
你的脚本出错的核心原因是把powershell.exe的参数和Start-Process的参数搞混了:-Command是powershell.exe自身的启动参数,并不是Start-Process的参数,所以PowerShell会提示找不到这个参数。另外,你调用myprogram.exe的语法也不符合Start-Process的要求,下面给你两种正确的实现方案:
方案1:直接启动myprogram.exe并传入PID
如果不需要通过嵌套的PowerShell进程来运行myprogram.exe,直接用下面的脚本即可:
Get-Process | ForEach-Object { Start-Process -FilePath "./myprogram.exe" -ArgumentList $_.ID }
关键说明:
-FilePath:指定要启动的可执行文件路径(如果myprogram.exe不在当前工作目录,建议使用绝对路径,比如C:\tools\myprogram.exe)-ArgumentList:用来传递给myprogram.exe的参数,这里直接把每个进程的PID传进去
方案2:通过嵌套PowerShell进程启动(如果有特殊需求)
如果你的场景必须在新的PowerShell进程中执行myprogram.exe,需要把powershell.exe的参数(包括-Command)放到Start-Process的-ArgumentList里:
Get-Process | ForEach-Object { Start-Process -FilePath "powershell.exe" -ArgumentList "-Command", "./myprogram.exe $($_.ID)" }
关键说明:
- 把
-Command作为powershell.exe的参数传入,告诉它要执行后面的命令字符串 - 使用
$($_.ID)来正确展开当前进程的PID变量,确保它能被解析到命令字符串中
额外建议
如果不想把当前运行脚本的PowerShell进程也包含进去,可以添加过滤条件排除自身:
Get-Process | Where-Object {$_.Id -ne $PID} | ForEach-Object { Start-Process -FilePath "./myprogram.exe" -ArgumentList $_.ID }
内容的提问来源于stack exchange,提问作者the_endian
相关产品推荐
相关产品推荐

