Control de flujo
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 True
False
. 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 esTrue
.$False
indica que una expresión esFalse
.
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
.