Arrays 在多个循环中创建和管理Powershell实例
首先,我创建了一个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
$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服务器。