2012-06-07 21 views
0

我有一個腳本可以連接到我們域中的所有服務器。然後,腳本遍歷每個服務器以獲取本地管理員和組的嵌套成員,並將它們放入PSObject中,以便稍後將PSObject導出爲CSV。使用powershell執行函數並在同一腳本中使用結果

現在我很困惑如何使用start-job傳遞一個參數來調用函數,並且能夠在我現有的腳本中利用該函數的輸出。

那麼假設我做到以下幾點:

function addnumbers{ 
param([int]$a, [int]$b) 
[int]$c = $a + $b 
$myobj = new-object PSObject 
$myobj += $c 
return $myobj 
} 

$exportdetail = @() 

[int[]]$numbers = @(1,2,3,4) 

foreach ($number in $numbers) 
{ 
    $newobj = new-object PSObject 
    $newobj = addnumbers $number 
    $exportdetail += $newobj   
} 

$exportdetail | export-csv -notype "c:\export.csv" 

我們線程環路我會做到以下幾點:

function addnumbers{ 
param([int]$a, [int]$b) 
[int]$c = $a + $b 
$myobj = new-object PSObject 
$myobj += $c 
return $myobj 
} 

$exportdetail = @() 

[int[]]$numbers = @(1,2,3,4) 

foreach ($number in $numbers) 
{ 
    $ScriptBlock { 
    param($num) 
    $newobj = new-object PSObject 
    $newobj = addnumbers $num 
    } 
    start-job -ScriptBlock $ScriptBlock -ArgumentList $number 
    $exportdetail += $newobj   
} 

$exportdetail | export-csv -notype "c:\export.csv" 

將這些對象被更新到exportdetail總體目標?

當我運行代碼時,各個線程啓動但他們不返回任何數據。

回答

0

來自幫助:Start-Job returns an object that represents the job that it started. 這意味着您不會從Start-Job獲得結果,只能得到包含結果的作業參考。

因此,要獲得的結果,你必須接受這樣的工作(其中的結果保存):

$job = start-job -ScriptBlock $ScriptBlock -ArgumentList $number 
    $exportdetail += $job 
} 
Wait-Job $exportdetail 
Receive-Job $exportdetail | export-csv -notype "c:\export.csv" 

基本上,你創建的每個號碼的後臺作業,然後添加引用將工作轉化爲一系列工作。最後,你等待所有的工作完成,然後收到結果。

相關問題