Au début, j'ai créé une instance Powershell unique dans laquelle je peux démarrer mes fonctions. Le script pour cela:Créer et gérer des instances Powershell dans plusieurs boucles
$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
Jusqu'ici tout va bien. Mais maintenant j'essaie d'arriver au niveau suivant et de créer cette Powershell-Instances pour chaque élément de mon Datatable. Il devrait chercher quelque chose comme ceci:
$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]
}
Mais je ne peux pas indexer un Powershell. J'ai essayé aussi concaténer la powershell variable au lieu de faire un tableau:
New-Variable -name "newPS$PSCount" -value '[PowerShell]::Create().AddScript($code).AddArgument($row)'
Mais alors je ne sais pas comment appeler la méthode « BeginInvoke() » ou variable elle-même.
Avez-vous initialisé '$ newPs' et' $ job' en tant que tableaux avec 2 éléments ou plus? Je vous suggère de commencer avec '$ PSCount = 0', et d'ajouter aux deux tableaux avec' $ newPS + = ... ' – arco444
Quel est l'objectif final ici? Invoquer N instances powershell de manière asynchrone dans le même espace d'exécution va nécessiter plus de mémoire et de processeur que de simplement faire le travail dans une boucle de N itérations –
@ arco444: étonnamment, cela a résolu le problème. Merci beaucoup. –