Mid*_*idi 5 powershell powershell-remoting
我正在编写通用的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
}
Run Code Online (Sandbox Code Playgroud)
我在$ deploymentPackages中添加了双引号.而且我仍然像我一样快速执行我的命令(当然失败了):
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
Run Code Online (Sandbox Code Playgroud)
适当的执行路径应该是:
D:\some path\Command.exe -package:"package - three - external" -action:doit
Run Code Online (Sandbox Code Playgroud)
包裹周围没有引号 - 一个 - 外部的东西搞乱了每一个
如何超越这个问题,因为我已经测试了多个解决方案,而且没有测试过.
提前感谢您的帮助!
您可以使用单引号来包装字符串来解决此问题.使用单引号时,引号之间的内容将保持不变(变量不会扩展,并且将保留引号之类的符号).例如
PS > '"this is a test"'
"this is a test"
Run Code Online (Sandbox Code Playgroud)
所以要修复你的脚本,尝试用deploymentpackages这个替换你的数组:
$deploymentPackages = @('"package - one - external"', '"package - two - external"', '"package - three - internal"')
Run Code Online (Sandbox Code Playgroud)
你可以这样做
$remoteAddress = "some-pc"
$deploymentCommand = "D:\some path\Command.exe"
$deploymentPackages = @('package - one - external', 'package - two - external', 'package - three - internal')
$remoteScript = {
param( $deployCmd, $deployPackage )
& $deployCmd "-package:$deployPackage" -action:doit
}
foreach ($deploymentPackage in $deploymentPackages)
{
invoke-command -ComputerName $remoteAddress -ScriptBlock $remoteScript -ArgumentList $deploymentCommand,$deploymentPackage
}
Run Code Online (Sandbox Code Playgroud)
-package:<some string here>当传递给您的可执行文件时,它会捆绑成一个参数,这与执行-package:"aaa bbb ccc"cmd.exe中的操作相同.
我假设您不希望将文字引号传递给exe,只是为了-package:<some string here>成为单个参数而不管其中的空格<some string here>
如果您希望将文字引号传递给exe,请使用上面的代码
& $deployCmd "-package:`"$deployPackage`"" -action:doit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19912 次 |
| 最近记录: |