我正在使用PowerShell会话来运行一些命令,并希望按原样传递参数,包括"
之类的引号。我传递的命令不包括引号,这里是代码:
$myarg= "run"
$CArg = "XXX" ## CArg should be passed as "XXX"
Invoke-Command -Session $session -Scriptblock { param($myarg,$CArg) &'C:\program.exe' $myarg -CArg $CArg -ArgumentList $myarg,$CArg
我也尝试了@ArgumentList
并遇到了同样的问题
答案 0 :(得分:1)
对于这样的问题,我通常会回到使用[scriptblock] :: create()和一个可扩展的here-string:
$myarg= "run"
$CArg = "XXX" ## CArg should be passed as "XXX"
$scriptblock = [scriptblock]::create(@"
&'C:\program.exe' $myarg -CArg "$CArg"
"@)
Invoke-Command -Session $session -Scriptblock $scriptblock
使用此字符串,您可以根据需要添加所需的任何引号。
答案 1 :(得分:1)
如果您希望接收EXE获取带有围绕它的引号的参数,您必须稍微努力以消除剥离引号的各个阶段。试试这个:
120> $carg = "`"`"`"foo`"`"`""
121> Invoke-Command { param($myarg,$CArg) echoargs $myarg -CArg $CArg } -ArgumentList myarg,$CArg
Arg 0 is <run>
Arg 1 is <-CArg>
Arg 2 is <"foo">
Command line:
"C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx\Apps\EchoArgs.exe" run -CArg """foo"""
请注意,echoargs是PSCX中的一个实用程序,它可以帮助调试参数传递给本地exes。
答案 2 :(得分:0)
我不确定你想要实现什么,但如果你将参数传递为“”“XXX”“”
PS C:\Users\demo.b> """XXXX"""
"XXXX"
答案 3 :(得分:0)
$CArg = "`"XXX`""
$string = "&'C:\program.exe' $myarg -CArg" + "$CArg"
$scriptblock = [scriptblock]::create($string)
Invoke-Command -Session $session -Scriptblock $scriptblock