Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在多个循环中创建和管理Powershell实例_Arrays_Loops_Powershell_Concatenation_Begininvoke - Fatal编程技术网

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

Arrays 在多个循环中创建和管理Powershell实例,arrays,loops,powershell,concatenation,begininvoke,Arrays,Loops,Powershell,Concatenation,Begininvoke,首先,我创建了一个Powershell实例,可以在其中启动我的函数。这方面的脚本: $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]::Cre

首先,我创建了一个Powershell实例,可以在其中启动我的函数。这方面的脚本:

$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。我还尝试连接powershell变量,而不是创建数组:

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

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

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

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

您是否已将
$newPS
$job
初始化为包含2个或更多元素的数组?我建议您从
$PSCount=0
开始,然后用
$newPS+=…
附加到两个数组中,这里的最终目标是什么?在同一运行空间中异步调用N个powershell实例将比在N个循环中进行工作更占用内存和处理器iterations@arco444:令人惊讶的是,这解决了问题。非常感谢。@Matthias R.Jessen:我将在一些虚拟机上启动进程。因此,这些过程不会真正影响Powershell-Server。您是否已将
$newPs
$job
初始化为包含2个或更多元素的数组?我建议您从
$PSCount=0
开始,然后用
$newPS+=…
附加到两个数组中,这里的最终目标是什么?在同一运行空间中异步调用N个powershell实例将比在N个循环中进行工作更占用内存和处理器iterations@arco444:令人惊讶的是,这解决了问题。非常感谢。@Matthias R.Jessen:我将在一些虚拟机上启动进程。因此,这些进程不会真正影响Powershell服务器。