1

我正在使用 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了,有同样的问题

4

4 回答 4

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

这里的字符串可以让你在任何你想要的地方放置你想要的任何类型的引号。

于 2013-10-28T21:29:51.417 回答
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的实用程序,可帮助调试传递给本机 exe 的参数。

于 2013-10-29T02:38:12.273 回答
0
$CArg = "`"XXX`""
$string = "&'C:\program.exe' $myarg -CArg" +  "$CArg"
$scriptblock = [scriptblock]::create($string)
Invoke-Command -Session $session -Scriptblock $scriptblock
于 2013-10-29T13:52:12.257 回答
0

我不确定你想要实现什么,但如果你将参数传递为 """XXX"""

PS C:\Users\demo.b> """XXXX"""
"XXXX"
于 2013-10-28T21:24:13.807 回答