带双引号的参数未通过 ArgumentList 正确传递到 Scriptblock

2024-03-31

我正在编写通用 powershell 脚本来在远程计算机上执行部署。我遇到了一个无法超限的问题,这个问题是由 ArgumentList 传递的 Scriptblock 中带有双引号的参数引起的

我有这样的事情:

$remoteAddress = "some-pc"
$deploymentCommand = "D:\some path\Command.exe"
$deploymentPackages = @(`"“package - one - external"`", `"“package - two - external"`", `"“package - three - internal"`")

foreach ($deploymentPackage in $deploymentPackages)
{
invoke-command -ComputerName $remoteAddress -ScriptBlock { param ($deployCmd, $deployPackage) &  $deployCmd -package:$deployPackage -action:doit } -ArgumentList   $deploymentCommand,$deploymentPackage
}

我在 $deployment Packages 中添加了双引号。而且我仍然像这样远程执行命令(这当然失败了):

D:\some path\Command.exe -package:package - one - external -action:doit
D:\some path\Command.exe -package:package - two - external -action:doit
D:\some path\Command.exe -package:package - three - external -action:doit

而正确的执行路径应该是:

D:\some path\Command.exe -package:"package - three - external" -action:doit

没有引号包围包 - 一 - 外部,这会搞乱一切

如何解决这个问题,因为我已经测试了许多解决方案,但没有一个有效。

提前感谢您的帮助!


您可以通过使用单引号将字符串括起来来解决此问题。使用单引号时,引号之间的内容将保持不变(变量不会扩展,并且将保留引号等符号)。例如。

PS > '"this is a test"'
"this is a test"

因此,要修复您的脚本,请尝试替换您的deploymentpackages数组与此:

$deploymentPackages = @('"package - one - external"', '"package - two - external"', '"package - three - internal"')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带双引号的参数未通过 ArgumentList 正确传递到 Scriptblock 的相关文章

随机推荐