ドメイン内のすべてのサーバーに接続するスクリプトがあります。次に、スクリプトは各サーバーをループして、ローカル管理者とグループのネストされたメンバーを取得し、それらをPSObjectに配置して、後でPSObjectをCSVにエクスポートできるようにします。
ここで、パラメーターを渡す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全体オブジェクトに更新されますか?
コードを実行すると、個々のスレッドが開始されますが、データは返されません。