使用Start-Process传递带字符串的PowerShell命令参数报错求助
解决Start-Process启动PowerShell传递含字符串命令的引号问题
问题原因
你之前的命令因双引号转义错误,导致新启动的PowerShell进程将test识别为命令而非字符串值,从而抛出未找到命令的错误。
正确写法示例
方法1:用单引号嵌套避免转义
利用PowerShell单引号的原样解析特性,在内部字符串使用单引号,外层用双引号包裹,同时通过两个单引号转义内部的单引号:
Start-Process Powershell -ArgumentList '-command "$var = ''test''"'
新进程会收到命令:$var = 'test',可正确将test赋值给变量。
方法2:正确转义双引号
如果需要使用双引号包裹字符串,需对双引号进行双重转义(当前PowerShell解析一次,新进程再解析一次):
Start-Process Powershell -ArgumentList '-command $var = `"test`"'
或者将整个命令用单引号包裹,内部双引号直接保留:
Start-Process Powershell -ArgumentList '-command ''$var = "test"'''
方法3:使用Base64编码命令(最可靠)
对于复杂命令,推荐将命令编码为Base64,彻底规避转义问题:
- 先编码目标命令:
$command = '$var = "test"' $encodedCommand = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($command))
- 用编码后的字符串启动进程:
Start-Process Powershell -ArgumentList "-EncodedCommand $encodedCommand"
内容的提问来源于stack exchange,提问作者miket2000
相关产品推荐
相关产品推荐

