在多个循环中创建和管理 Powershell 实例



起初,我创建了一个Powershell-Instance,我可以在其中启动我的函数。该脚本:

$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

目前为止,一切都好。 但是现在我正在尝试进入下一个级别,并为数据表中的每个元素创建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]
}

但我无法索引一个电源外壳。我还尝试连接powershell变量而不是创建一个数组:

New-Variable -name "newPS$PSCount" -value '[PowerShell]::Create().AddScript($code).AddArgument($row)'

但是我不知道如何调用方法"beginInvoke(("或变量本身。

就像arco444 所说的那样,初始化$newPS$job并附加这些数组,就像$newPS += ...解决了问题一样。

最新更新