powershell,来自数组的函数调用

时间:2014-04-08 16:48:54

标签: 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"

原因是我有一些像这样的数组和一个循环,它将通过对每个数组中的数据使用自定义函数调用来遍历每个数组。 基本上尝试不同的编程风格。

1 个答案:

答案 0 :(得分:1)

好吧,听起来你说有一系列阵列是诚实的,所以我们会坚持下去。然后让我们引用this SO question,它非常类似于你的问题,并从中拿走整个[scriptblock]::create()的东西,然后展开数组。从那以后我们可以拿出这个脚本:

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,它有2个名为Value1Value2的属性。 Value1将包含字符串“testA”,Value2将包含字符串“testB”。传递给该函数的任何一对字符串都将输出1个具有2个属性Value1和Value2的对象。因此,之后您可以致电$MyResults.Value1并返回testA