2014-04-08 87 views
0

所以我很好奇如何從數組中調用函數? 功能例如:powershell,調用函數調用數組

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

數組

$testArray = @{"test";"testA";"testB"} 

而且整個位我要工作是

$testArray[0] $testArray[1] $testArray[2] 

本質上模仿這種

test "testA" "testB" 

之所以這樣,是我h就像這樣的幾個數組,以及一個循環,每個循環都會使用每個數組中的數據的自定義函數調用。 基本上嘗試不同的編程風格。

回答

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會是一個有2個屬性命名爲Value1Value2一個PSCustomObject。值1將包含字符串「testA」,而值2將包含字符串「testB」。傳遞給該函數的任何字符串對都會輸出1個具有2個屬性的對象,即Value1和Value2。所以之後,你可以撥打$MyResults.Value1,它會返回testA

+0

在我使用哈希表的實際代碼中,所以我最終改變了一些東西。最終你的榜樣讓我走上了正確的道路,我得到了我想要工作的東西。 :)我在我的例子中使用數組保持簡單知道答案會給我我需要的信息。 – icomeinpieces

+0

只是好奇,我有麻煩分配輸出形式的功能變量。該函數正常返回,但我似乎無法捕捉它並將其分配給一個變量。 – icomeinpieces

+0

在給出的示例中沒有輸出。寫主機嚴格寫入主機。如果你想要的功能輸出的東西使用寫輸出 – TheMadTechnician