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

如何为PowerShell的Start-Process传递含空格的CLI参数?

PowerShell传递带空格参数给外部进程的转义解决方案

你的问题核心是:通过-file调用脚本时,$args接收的参数会丢失原有的引号转义,导致传递给wsl.exe的参数格式不正确,进而无输出。以下是几种可行的解决方法:

方法1:直接调用外部命令(推荐)

放弃使用Start-Process,改用PowerShell的直接调用运算符&传递参数,这种方式能自动处理参数的转义和拆分,更可靠:

& wsl.exe @args

执行原调用命令时就能正常输出Hello World:

powershell -noprofile -executionpolicy bypass -file sh.ps1 bash -c "`"echo Hello World`""

方法2:修复Start-Process的参数处理

如果必须使用Start-Process,需要对$args中的参数做预处理,给带空格或特殊字符的参数重新添加引号并转义内部符号:

# 处理参数:为含空格/特殊字符的参数添加引号,转义内部双引号
$processedArgs = $args | ForEach-Object {
    if ($_ -match '\s|["''\\]') {
        "`"$($_ -replace '"', '\"')`""
    }
    else {
        $_
    }
}

$proc = Start-Process -FilePath "wsl.exe" -ArgumentList $processedArgs -NoNewWindow -PassThru
$proc | Wait-Process

方法3:调整脚本调用方式

改用-Command参数调用脚本,能更精准地控制参数的传递格式,避免-file模式下的参数解析问题:

powershell -noprofile -executionpolicy bypass -Command "& '.\sh.ps1' bash -c '`"echo Hello World`"'"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:15:37