Examiner le point de contrôle et le traitement parallèle
Les flux de travail vous permettent d’implémenter une logique complexe dans votre code. Deux fonctionnalités disponibles avec les flux de travail sont des points de contrôle et untraitement parallèle.
Points de contrôle
Un point de contrôle est un instantané de l’état actuel du flux de travail. 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, lisez la page web du point de contrôle .
Si un flux de travail se termine par une erreur ou est suspendu, la prochaine fois qu’il s’exécute, il commence à partir de son dernier point de contrôle au lieu du début du flux de travail. Vous pouvez définir un point de contrôle dans un flux de travail avec l'activité Checkpoint-Workflow.
Exemple de point de contrôle
Par exemple, si une exception se produit après l’activité2, le flux de travail se termine par l’exemple de code suivant. Lorsque le flux de travail est réexécuté, il commence par Activity2, immédiatement après le dernier point de contrôle défini :
<Activity1>
Checkpoint-Workflow
<Activity2>
<Exception>
<Activity3>
Traitement parallèle
Un bloc de script comporte plusieurs commandes qui s'exécutent simultanément (ou en parallèle) plutôt que de manière séquentielle, comme dans un script typique. Il s’agit d’un traitement parallèle. Vous trouverez plus d’informations sur le traitement parallèle sur la page web de traitement parallèle .
Exemple parallèle de base
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
Traitement parallèle avancé
Des constructions de traitement parallèle supplémentaires présentent des options supplémentaires :
ForEach -Parallel
Vous pouvez utiliser la construction ForEach -Parallel pour traiter simultanément les commandes de 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 s’exécutent séquentiellement.
Dans l’exemple suivant, Activity1 commence simultanément pour tous les éléments de la collection. Pour chaque élément, Activity2 démarre une fois Activity1 terminée. Activity3 démarre uniquement après que Activity1 et Activity2 ont été terminés pour tous les éléments.
Paramètre ThrottleLimit
Le paramètre ThrottleLimit limite 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 commencer par une valeur basse pour ThrottleLimit, puis augmentez la valeur jusqu’à ce que vous trouviez celle qui fonctionne pour vos circonstances spécifiques :
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
<Activity1>
<Activity2>
}
<Activity3>
Exemple de traitement parallèle réel
Un exemple pratique de traitement parallèle peut être similaire au code suivant : un message s’affiche pour chaque fichier après sa copie. Une fois tous les fichiers copiés, le message d’achèvement s’affiche :
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."
}