2017-06-16 47 views
0

使用Start-Job和ArgumentList,您如何將數組和另一個變量傳遞給接收腳本?使用Start-Job和ArgumentList如何傳遞數組和字符串值

這工作,如果我只需要通過一個單個陣列

Start-Job -FilePath "c:\thescript.ps1" -ArgumentList (,$newArray) 

試過,但第二值未在接收腳本被使用。

Start-Job -FilePath "c:\thescript.ps1" -ArgumentList (,$newArray,"x") 

thescript.ps1例如:

param (
    [string[]]$aMyArray, 
    [string]$sMyString 
) 

function DoWork ([string]$aItem,[string]$sMyString) 
{ 
    #worker 
} 

foreach($aItem in $aMyArray) 
{ 
    DoWork $aItem $sMyString 
} 

我目前使用PowerShell 2.0

+3

將括號中的x取出。您不使用逗號來分隔參數。否則,它們被視爲單個對象。 – Matt

+0

@Matt這是你的建議? -ArgumentList(,$ newArray)「x」 – eHaze

+0

是的。這一切都取決於你的用例以及script.ps1是如何配置的。 – Matt

回答

0

工作只是用Google搜索了同樣的問題,但最後我想通了。這是相當str8fwd。儘管在所有文章中,將數組傳遞給作業的解決方案是(,$ ArrayArg),並且它的工作原理(對我來說,它仍然很奇怪),如果這是唯一的參數。 儘管有多個參數,其中一個是數組,但這對我來說很有用:

$foo1 = @("1","2","3") 
$foo2 = "foo" 

Start-Job -Name Test ` 
-ScriptBlock { 
    param([string[]]$arg1,[string]$arg2) 
    Write-Output $arg1 
    Write-Output $arg1.GetType() 
    Write-Output "----" 
    Write-Output $arg2 
    Write-Output $arg2.GetType() 
} ` 
-ArgumentList @($foo1),$foo2 
+0

是的,它很簡單,但提供的示例不起作用。在我的情況下$ aMyArray是一堆網址。結束了不同的路線。 – eHaze

相關問題