Arrays powershell,函数调用一个数组

Arrays powershell,函数调用一个数组,arrays,function,powershell,Arrays,Function,Powershell,所以我很好奇如何从数组中调用函数? 功能示例: function test($a, $b) { write-host $a write-host $b } 阵列 $testArray = @{"test";"testA";"testB"} 我想做的就是 $testArray[0] $testArray[1] $testArray[2] 基本上是模仿这个 test "testA" "testB" 原因是我有几个这样的数组和一个循环,使用对每个数组中的数据的自定义函数调用遍历每个数组。 基本

所以我很好奇如何从数组中调用函数? 功能示例:

function test($a, $b)
{
write-host $a
write-host $b
}
阵列

$testArray = @{"test";"testA";"testB"}
我想做的就是

$testArray[0] $testArray[1] $testArray[2]
基本上是模仿这个

test "testA" "testB"
原因是我有几个这样的数组和一个循环,使用对每个数组中的数据的自定义函数调用遍历每个数组。
基本上是在尝试一种不同的编程风格。

好吧,老实说,听起来你有一个数组,所以我们将继续。然后,让我们参考与您的问题非常相似的内容,并从中删除整个
[scriptblock]::create()
和splatting数组。由此我们可以得出以下脚本:

function test($a, $b)
{
Write-Host "Function 'test'"
write-host $a
write-host $b
}
function test2($a, $b)
{
Write-Host "Function 'test2'"
write-host $b
write-host $a
}
$TestArray = @() #the correct way to create an array, instead of a broken HashTable
$testArray = @("test","testA","testB"),@("test2","testC","testD")
ForEach($Test in $TestArray){
    $script = [scriptblock]::Create($test[0]+" @Args")
    $script.Invoke($test[1..$test.count])
}
如果你只有一个数组,而不是一组数组,那么我想这很简单。你可以做:

$testArray = @("test","testA","testB")
$script = [scriptblock]::Create($testArray[0]+" @Args")
$script.Invoke($testArray[1..$testArray.count])
编辑(捕获):好的,要捕获函数的结果,您应该能够在其前面加上
$Variable=
并可以继续,例如:

$MyResults = $script.Invoke($testArray[1..$testArray.count])
它将捕获函数给出的任何输出。现在,由于我们使用的函数只执行
Write Host
,它们实际上根本不输出任何内容,它们只是将文本打印到屏幕上。为此,我将稍微修改函数,以获得可用的实际输出。在本例中,函数将2个参数作为输入,并创建一个新对象,将这2个参数作为属性指定给它。该对象就是输出

function test($a, $b)
{
New-Object PSObject -Property @{Value1=$a;Value2=$b}
}
$testArray = @("test","testA","testB")
$script = [scriptblock]::Create($testArray[0]+" @Args")
$MyResults = $script.Invoke($testArray[1..$testArray.count])

现在,如果运行该命令,则变量
$MyResults
将成为PSCustomObject,它有两个属性,分别名为
Value1
Value2
。Value1将包含字符串“testA”,Value2将包含字符串“testB”。传递给该函数的任何一对字符串都将输出一个具有两个属性的对象,即Value1和Value2。在那之后,你可以调用
$MyResults.Value1
,它将返回
testA

,在我的实际代码中,我使用了哈希表,所以我最后稍微改变了一些。最终,你的例子引导我走上了正确的道路,我得到了我想要的工作在我的例子中,我使用数组来保持简单,因为知道答案会得到我需要的信息。只是好奇,我很难将函数的输出形式分配给变量。函数正在正确返回,但我似乎无法捕获它并将其分配给变量。您给出的示例中没有输出。写入主机严格地写入主机。如果您想让函数输出东西,请使用Write OutputIn在我的实际代码中,我试图使用return语句作为到目前为止所学内容的扩展。我的解决方案是$returnedData=([scriptblock]::Create($testArray[0]+“”“$testArray[1]+”+$testArray[2])。invokereturansis()。虽然对于我的实际代码来说,这是不同的,以反映哈希表而不是数组的使用,但原理相同。$returnedData变量捕获脚本块中使用Return时返回的内容。我可以更新我的示例,以更好地反映我的预期需求,以及如果这有助于解决问题,我是如何让它发挥作用的。