Examiner le point de contrôle et le traitement parallèle
Les workflows vous permettent d’implémenter une logique complexe dans votre code. Deux fonctionnalités disponibles pour les workflows sont les points de contrôle et le traitement parallèle.
Points de contrôle
Un point de contrôle est un instantané de l’état actuel du workflow.
Les points de contrôle incluent la valeur actuelle des variables et toute sortie générée jusqu’à ce point. (Pour plus d’informations sur ce qu’est un point de contrôle, consultez la page Web Point de contrôle.)
Si un workflow se termine par une erreur ou est suspendu, la prochaine fois qu’il s’exécute, il démarrera à partir de son dernier point de contrôle au lieu du début du workflow.
Vous pouvez définir un point de contrôle dans un workflow avec l'activité Checkpoint-Workflow .
Par exemple, si une exception se produit après Activity2, le workflow se termine dans l’exemple de code suivant.
Lorsque le workflow est réexécuté, il commence par Activity2, suivi juste après le dernier point de contrôle défini.
<Activity1>
Checkpoint-Workflow
<Activity2>
<Exception>
<Activity3>
Traitement parallèle
Un bloc de script a plusieurs commandes qui s’exécutent simultanément (ou en parallèle) au lieu de séquentiellement, comme pour un script standard.
Il est appelé traitement parallèle. (Plus d’informations sur le traitement en parallèle sont disponibles sur la page Web Traitement parallèle .)
Dans l’exemple suivant, deux machines virtuelles vm0 et vm1 sont démarrées simultanément, et vm2 démarre uniquement après le démarrage de vm0 et vm1.
Parallel
{
Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
}
Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg
Un autre exemple de traitement parallèle serait les constructions suivantes qui introduisent des options supplémentaires :
- ForEach -Parallel. Vous pouvez utiliser la construction ForEach -Parallel pour traiter simultanément des commandes pour chaque élément d’une collection. Les éléments de la collection sont traités en parallèle, tandis que les commandes du bloc de script sont exécutées séquentiellement.
Dans l’exemple suivant, Activity1 démarre en même temps pour tous les éléments de la collection.
Pour chaque élément, Activity2 démarre une fois Activity1 terminé. Activity3 démarre uniquement après que Activity1 et Activity2 ont été terminés pour tous les éléments.
- ThrottleLimit Nous utilisons le paramètre ThrottleLimit pour limiter le parallélisme. Un ThrottleLimit trop élevé peut entraîner des problèmes. La valeur idéale pour le paramètre ThrottleLimit dépend de plusieurs facteurs environnementaux. Essayez de démarrer avec une valeur ThrottleLimit basse, puis augmentez la valeur jusqu’à ce que vous en trouviez une qui fonctionne pour vos circonstances spécifiques :
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
<Activity1>
<Activity2>
}
<Activity3>
Un exemple réel de cet exemple peut être similaire au code suivant : un message s’affiche pour chaque fichier après sa copie. Le message d’achèvement s’affiche uniquement une fois que tous les fichiers ont été copiés.
Workflow Copy-Files
{
$files = @("C:\LocalPath\File1.txt","C:\LocalPath\File2.txt","C:\LocalPath\File3.txt")
ForEach -Parallel -ThrottleLimit 10 ($File in $Files)
{
Copy-Item -Path $File -Destination \\NetworkPath
Write-Output "$File copied."
}
Write-Output "All files copied."
}