Análisis del punto de control y procesamiento paralelo
Los flujos de trabajo le permiten implementar una lógica compleja dentro del código. Dos características disponibles con los flujos de trabajo son los puntos de control y el procesamiento paralelo.
Puntos de control
Un punto de control es una instantánea del estado actual del flujo de trabajo.
Los puntos de control incluyen el valor actual de las variables y cualquier salida generada hasta ese momento. (Para más información sobre qué es un punto de control, lea la página web sobre los puntos de control).
Si un flujo de trabajo se suspende o termina en error, la próxima vez que se ejecute, se iniciará en el último punto de control en lugar de hacerlo al principio del flujo de trabajo.
Puede establecer un punto de control en un flujo de trabajo con la actividad Checkpoint-Workflow .
Por ejemplo, si se produce una excepción después de Activity2, el flujo de trabajo finalizará en el código de ejemplo siguiente.
Cuando se vuelva a ejecutar el flujo de trabajo, comenzará en Activity2, justo después del último punto de control establecido.
<Activity1>
Checkpoint-Workflow
<Activity2>
<Exception>
<Activity3>
Procesamiento paralelo
Un bloque de script tiene varios comandos que se ejecutan de manera simultánea (o en paralelo), en lugar de hacerlo en secuencia, como ocurriría con un script típico.
Esto se conoce como procesamiento paralelo. (Puede encontrar más información al respecto en la página web Procesamiento paralelo).
En el ejemplo siguiente, dos máquinas virtuales, vm0 y vm1, se iniciarán simultáneamente, y vm2 solo se iniciará una vez que se inicien vm0 y vm1.
Parallel
{
Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg
Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
}
Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg
Otro ejemplo de procesamiento paralelo serían las construcciones siguientes que presentan algunas opciones adicionales:
- ForEach -Parallel. Puede usar la construcción ForEach -Parallel para procesar simultáneamente comandos para cada elemento de una colección. Los elementos de la colección se procesan en paralelo mientras que los comandos del bloque de scripts se ejecutan secuencialmente.
En el ejemplo siguiente, Activity1 se inicia al mismo tiempo para todos los elementos de la colección.
Para cada elemento, Activity2 se inicia después de que Activity1 se completa. Activity3 solo se inicia después de que Activity1 y Activity2 se completan para todos los elementos.
- ThrottleLimit: el parámetro ThrottleLimit se utiliza para limitar el paralelismo. Un valor ThrottleLimit demasiado alto puede causar problemas. El valor ideal del parámetro ThrottleLimit depende de varios factores del entorno. Pruebe a empezar con un valor ThrottleLimit bajo y vaya aumentando el valor hasta que encuentre uno que funcione para sus circunstancias específicas:
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
<Activity1>
<Activity2>
}
<Activity3>
Un ejemplo real podría ser similar al código siguiente: se muestra un mensaje cada vez que se copia un archivo. Solo después de copiar todos los archivos se muestra el mensaje de finalización.
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."
}