我试图使用splatting在命令中插入一些参数。我无法通过splatting格式化参数,使其在执行时被接受。
目前正在插入":" (冒号和空格)进入导致语法错误的参数。
这就是我所拥有的 -
$UserMem = @("148712","148684")
$params = @{}
$params["--field=USER: Members="] =$UserMem
write-host @params
该输出是 -
---field=USER: Members=: 148712 148684
注意它有"会员=:"它应该在哪里"会员="
应该是 -
---field=USER: Members=148712 148684
关于如何防止外来结肠的任何想法出现的空间?
谢谢
答案 0 :(得分:1)
只需将第4行更改为以下格式:
$params = "---field=USER: Members=$UserMem"
这将为您提供所需的输出。
> write-host @params
---field=USER: Members=: 148712 148684
我不确定你为什么使用之前的格式。从这个角度来看,设置变量要简单得多。
答案 1 :(得分:1)
@mjolinor有一个关于使用write-host的观点,所以让我们使用自定义函数:
$arr = @(10,20)
$params = @{}
$params["par"] = $arr
function splattest {
"args0: [$($args[0])]"
"args1: [$($args[1])]"
}
splattest @params
结果是:
args0: [-par:]
args1: [10 20]
这里没有空间,所以这不是因为喷溅。现在执行:
@(1,2)
write-host @(3,4)
结果:
1
2
3 4
这就是写主机打印数组的方式:一行中所有元素用空格分隔。
从-par:
开始,就像@Matt所说的那样:splatting的工作原理:)。
通常:
用于以编程方式操作switch参数,如:Get-ChildItem -File:$True
,但它也适用于选项(即命名参数):Get-Process -Name:explorer
。
我想splatter会增加冒号以保持一致。
答案 2 :(得分:0)
这为您提供了所需的输出
$UserMem = @("148712","148684")
$params = @{}
$params["--field=USER: Members="] =$UserMem
foreach ($key in $params.Keys)
{
Write-Host -Verbose $key $params[$key]
}
答案 3 :(得分:-1)
有点黑客,但是
$UserMem = @("148712","148684")
$params = @{}
$params["--field=USER"] ="Members=$UserMem"
write-host @params
给你
---field=USER: Members=148712 148684
mjolinor对你的帖子的评论是这是一个黑客的原因。如果您的参数需要比这更复杂,您应该选择不同的方法。