2011-03-11 20 views
4

我想在內部ForEach循環中使用外部ForEach循環中創建的變量。該值不會像我預期的那樣通過,並且始終爲空。如何將值傳遞給嵌套的ForEach?

注意$ server的值始終爲空您可以告訴我爲什麼以及如何解決?

$Srvrs = "SVR1"; 
$Srvrs | ForEach-Object { 


    $server = $_; 
    Write-Host "Server value in outer Foreach:" $server; 

    $sourceFilesLoc = "D:\Test\SetupSoftwareAndFiles" 
    $sourceFiles = Get-ChildItem -LiteralPath $sourceFilesLoc; 

    $sourceFiles | ForEach-Object { 
     Start-Job -InputObject $server -ScriptBlock  { 
      Write-Host "Server value in inner Foreach:" $server; 
      } 
     } 
} 

回答

9

經由-ArgumentList參數例如通行證中的參數:

Start-Job -InputObject $server -ScriptBlock {param($svr) 
    Write-Host "Server value in inner Foreach:" $svr; 
} -ArgumentList $server 

下面是使用-ArgumentList的一個簡單的例子:

PS> $server = 'acme' 
PS> $job = Start-Job {param($svr) "server is $svr"} -ArgumentList $server 
PS> Receive-Job $job 
server is acme 
+0

與.GetNewClosure() – ChiliYago 2011-03-11 23:53:05

+0

同樣的結果您提供不工作的語法所以我把它改爲: 啓動工作-InputObject $服務器-ArgumentList $服務器-ScriptBlock \t {參數($ SVR) \t \t \t寫內部Foreach中的「主機」服務器值:「$ server; \t \t \t} \t \t} 結果還是空值內的值。 – ChiliYago 2011-03-11 23:58:35

+0

查看上面的示例'$ server ='acme'' - 工作得很好。順便說一句,你不需要使用'-InputObject',因爲該變量對於定義在其中的塊內的腳本的其餘部分是可見的。 – 2011-03-12 00:24:39

2

問題仍未訪問在嵌套foreaches可變..如果你在內部foreach中寫了一個變量的寫主機,那就沒問題了。它將變量傳遞給工作。作業是在後臺運行的不同進程。

相關問題