1
まず、PowerShellインスタンスを作成して、自分の機能を開始できるようにしました。そのスクリプト:Powershell-Instancesを複数のループ内で作成して管理する
$list = [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources()
$row = $list.Rows[1]
$code = {
param($var)
$var[0] +"\"+ $var[1]
#Stuff that has to be done
}
$newPS = [PowerShell]::Create().AddScript($code).AddArgument($row)
$job = $newPS.BeginInvoke()
while (-not $job.IsCompleted) {}
$result = $newPS.EndInvoke($job)
$newPS.Dispose()
$result
これまでのところとても良いです。 しかし、今私は次のレベルに到達し、私のDatatableのすべての要素のPowershellインスタンスを作成しようとしています。これは次のようなものです:
$list = [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources()
$code = {
param($var)
$var[0] +"\"+ $var[1]
#Stuff that has to be done
#Start-Sleep -s 1
}
$PSCount= 1
#start der Funktion
foreach($row in $list)
{
$newPS[$PSCount] = [PowerShell]::Create().AddScript($code).AddArgument($row)
$job[$PSCount] = $newPS[$PSCount].BeginInvoke()
$PSCount++
}
#warten bis alle Jobs kompletiert sind
#Ergebnisse verarbeiten und PS-Instanzen beenden
for($i=1; $i -eq $PSCount; $i++)
{
while (-not $job[$i].IsCompleted) {}
$result = $newPS[$i].EndInvoke($job[$i])
$newPS[$i].Dispose()
$result[0]
}
しかし、私はインデックスを作成できません。
New-Variable -name "newPS$PSCount" -value '[PowerShell]::Create().AddScript($code).AddArgument($row)'
しかし、私は、メソッド「BeginInvokeメソッド()」や変数自体を呼び出す方法を知らない:私はまた、代わりに配列を作るのPowerShellの変数を連結してみました。
2つ以上の要素を持つ配列として '$ newPs'と' $ job'を初期化しましたか? '$ PSCount = 0'で始まり、' $ newPS + = ... 'で2つの配列に追加することをお勧めします – arco444
ここで最終目標は何ですか?同じrunspaceでN個のpowershellインスタンスを非同期に呼び出すことは、N回の反復ループで作業を行うよりも、メモリとプロセッサの負荷が大きくなります。 –
@ arco444:驚くべきことに、問題を解決しました。どうもありがとうございました。 –