好吧,這聽起來像你有一個數組的數組是誠實的,所以我們會去。那麼讓我們引用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個屬性命名爲Value1
和Value2
一個PSCustomObject。值1將包含字符串「testA」,而值2將包含字符串「testB」。傳遞給該函數的任何字符串對都會輸出1個具有2個屬性的對象,即Value1和Value2。所以之後,你可以撥打$MyResults.Value1
,它會返回testA
。
在我使用哈希表的實際代碼中,所以我最終改變了一些東西。最終你的榜樣讓我走上了正確的道路,我得到了我想要工作的東西。 :)我在我的例子中使用數組保持簡單知道答案會給我我需要的信息。 – icomeinpieces
只是好奇,我有麻煩分配輸出形式的功能變量。該函數正常返回,但我似乎無法捕捉它並將其分配給一個變量。 – icomeinpieces
在給出的示例中沒有輸出。寫主機嚴格寫入主機。如果你想要的功能輸出的東西使用寫輸出 – TheMadTechnician