说我具有以下Powershell功能:
function AddGos
{
[CmdletBinding()]
param
(
[Parameter(ValueFromPipeline=$True)]
[string[]] $dbScript
)
process
{
$dbScript + "GO"
}
}
如果我这样称呼:
("one", "two", "three") | AddGos
我得到:
一个
开始
两个
开始
三个
转到
但是,如果我这样称呼它:
AddGos("one", "two", "three")
然后我得到了:
一个
两个
三个
转到
这是因为当您作为管道运行时,它会破坏我的数组并为数组中的每个条目调用process
部分。但是当您正常调用它时,它只是作为单个对象传入数组。
我可以看到一种使该简单方案同时支持这两种方案的方法,但是当您开始使用复杂的功能时,它可能很快变得太复杂而无法管理两种方案的工作。
在Powershell世界中通常如何处理?
意味着功能仅支持一种方式还是另一种方式?还是有一些简单的方法可以解决我所缺少的问题?还是函数作者真的很难使它以任何一种方式起作用?
答案 0 :(得分:2)
在流程块中添加一个foreach
循环来处理两种情况:
function AddGos {
[CmdletBinding()]
param (
[Parameter(ValueFromPipeline=$True)]
[string[]] $dbScript
)
process {
foreach ($item in $dbScript) {
$item + "`r`nGO"
}
}
}
"one", "two", "three" | AddGos
AddGos "one", "two", "three"
这两个电话都将为您带来相同的结果:
one GO two GO three GO
P.S。您不需要在数组元素周围放括号