Powershell splatting插入额外的字符

时间:2015-04-21 14:56:46

标签: powershell

我试图使用splatting在命令中插入一些参数。我无法通过splatting格式化参数,使其在执行时被接受。

目前正在插入":" (冒号和空格)进入导致语法错误的参数。

这就是我所拥有的 -

$UserMem = @("148712","148684")
$params = @{}

$params["--field=USER: Members="] =$UserMem

write-host @params 

该输出是 -

---field=USER: Members=: 148712 148684 

注意它有"会员=:"它应该在哪里"会员="

应该是 -

---field=USER: Members=148712 148684 

关于如何防止外来结肠的任何想法出现的空间?

谢谢

4 个答案:

答案 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对你的帖子的评论是这是一个黑客的原因。如果您的参数需要比这更复杂,您应该选择不同的方法。