Control de flujo

Completado

El control de flujo hace referencia a la manera en que se ejecuta el código en la consola o el script. Describe qué flujo sigue el código y cómo se controla. Hay varias construcciones disponibles que le ayudan a controlar el flujo. El código puede ejecutar todas las instrucciones o solo algunas de ellas. Además, puede repetir determinadas instrucciones hasta que cumpla una condición determinada.

Vamos a examinar estas construcciones de control de flujo para ver lo que pueden hacer:

  • Saneamiento de la entrada. Si usa parámetros en un script, debe asegurarse de que tengan valores razonables para que el script funcione según lo previsto. La acción consistente en escribir código para administrar este proceso se denomina saneamiento de la entrada.

  • Control del flujo de ejecución. La técnica anterior garantiza la obtención de datos de entrada razonables y correctos. Esta técnica se centra en decidir cómo se ejecuta el código. El conjunto de valores puede determinar qué grupo de instrucciones se ejecuta.

  • Iteración por los datos. A veces, los datos adoptan la forma de una matriz, que es una estructura de datos que contiene muchos elementos. Para este tipo de datos, es posible que tenga que examinar cada elemento y realizar una operación para cada uno. Muchas construcciones de PowerShell pueden ayudarle con este proceso.

    Nota

    La iteración por matrices está fuera del ámbito de este módulo. Hay muchas construcciones para llevar a cabo el control del flujo en PowerShell. No podemos mencionarlos todos, pero hablaremos sobre los más importantes que probablemente se encontrará en los scripts que lea o escriba.

Administración del flujo de entrada y ejecución mediante If, ElseIf y Else

Puede usar una construcción If para determinar si una expresión es o TrueFalse. En función del resultado, podría ejecutar la instrucción definida por la construcción If. La sintaxis de If tiene un aspecto similar al siguiente:

If (<expression that evaluates to True or False>) 
{
  # Statement that runs only if the preceding expression is $True.
}

Operadores

PowerShell tiene dos parámetros integrados para determinar si una expresión es True o False:

  • $True indica que una expresión es True.
  • $False indica que una expresión es False.

Para determinar si una expresión es True o False, puede usar operadores. Existen diversos operadores. Básicamente, se determina si algo situado a la izquierda del operador coincide con algo situado a la derecha, según la condición del operador. Un operador puede expresar condiciones que indican, por ejemplo, si algo es igual a otro elemento, es mayor que otro elemento o coincide con una expresión regular.

Este es un ejemplo del uso de un operador. El operador -le determina si el valor del lado izquierdo del operador es menor o igual que el valor del lado derecho:

$Value = 3
If ($Value -le 0) 
{
  Write-Host "Is negative"
}

Este código no mostrará nada porque la expresión se evalúa como False. El valor 3 es claramente positivo.

Else

La construcción If ejecuta instrucciones solo si se evalúan como True. ¿Qué ocurre si quiere controlar los casos en los que se evalúan como False? Es aquí donde usará la construcción Else. If expresa "si este caso concreto es true, ejecute esta instrucción". Else no adopta una expresión. Captura todos los casos en los que la cláusula If se evalúa como False. Cuando se combinan If y Else, el código ejecuta las instrucciones en una de las dos construcciones. Vamos a modificar el código anterior para incluir una construcción Else:

$Value = 3
If ($Value -le 0) 
{
  Write-Host "Is negative"
} Else {
  Write-Host "Is Positive"
}

Como se ha colocado Else junto a la llave de finalización de If, se ha creado una construcción combinada que funciona como una sola. Si ejecuta este código en la consola, verá que se imprime Is Positive. Esto se debe a que If se evalúa como False, pero Else se evalúa como True. Por lo tanto, Else imprime su instrucción.

Nota

Solo se puede usar Else si hay una construcción If definida inmediatamente encima.

ElseIf

If y Else funcionan muy bien para cubrir todas las rutas de acceso que puede tomar el código. ElseIf es otra construcción que puede ser útil. ElseIf está diseñado para usarse con If. Indica que "la expresión de esta construcción se evaluará si la instrucción If anterior se evalúa como False". Al igual que If, ElseIf puede adoptar una expresión, por lo que ayuda a considerar ElseIf como un If secundario.

Este es un ejemplo donde se usa ElseIf :

# _FullyTax.ps1_
# Possible values: 'Minor', 'Adult', 'Senior Citizen'
$Status = 'Minor'
If ($Status -eq 'Minor') 
{
  Write-Host $False
} ElseIf ($Status -eq 'Adult') {
  Write-Host $True
} Else {
  Write-Host $False
}

Es posible escribir este código de una manera más compacta, pero de este modo se muestra el uso de ElseIf. Muestra que If se evalúa primero, después ElseIf y, a continuación, Else.

Nota

Al igual que sucede con Else, no se puede usar ElseIf si no se define encima una construcción If.