¡Este artículo ha sido actualizado para 2023!
Los scripts pueden tomar decisiones. ¿Cómo? Usando un concepto llamado lógica condicional. La declaración if de PowerShell y las construcciones if/else son las formas comunes de definir condiciones.
Cuando escribes scripts de PowerShell, lo haces con una tarea específica en mente. Pero, una operación puede tener múltiples acciones posibles basadas en una o más condiciones. Esta situación es donde entra en juego la construcción if de PowerShell.
En este artículo, aprenderás la construcción If-Else de PowerShell y entenderás su sintaxis y cómo funciona. También aprenderás algunas formas en las que puedes usar la declaración If de PowerShell para agregar manejo de lógica condicional en tus scripts a partir de los ejemplos.
Entendiendo la Sintaxis de la Declaración If de PowerShell
La construcción if-else de PowerShell evalúa una o más expresiones condicionales. A continuación, verás la sintaxis de la declaración If. Este estilo a menudo se llama control de flujo.
Como puedes ver en la sintaxis anterior, cada prueba está encerrada entre paréntesis ()
. Las pruebas pueden hacer uso de diferentes operadores, como operadores de comparación y operadores lógicos,
Las listas de declaraciones contienen el código destinado a ejecutarse si el resultado de la prueba se evalúa como verdadero.
Hay tres declaraciones posibles en un grupo de declaración If. Estas son las declaraciones IF, ELSEIF y ELSE.
- La declaración
if
contiene la primera prueba que se evalúa, seguida de la primera lista de declaraciones encerrada entre los corchetes{}
. La declaración if de PowerShell es la única declaración que se requiere estar presente. - La declaración
elseif
es donde añades condiciones. Puedes agregar múltiples ElseIf cuando tienes múltiples condiciones. PowerShell evaluará cada una de estas condiciones secuencialmente. - La declaración
else
no acepta ninguna condición. La lista de declaraciones en esta declaración contiene el código que se ejecuta si todas las condiciones probadas anteriores son falsas.
Comprensión de la Logica del If de PowerShell
Para entender cómo funciona el If-Else de PowerShell, familiariza con su flujo de lógica. El diagrama de abajo ilustra el flujo básico del If-Else de PowerShell.

Cuando se ejecuta la declaración if, PowerShell revisa cada condición, evaluando si el código devuelve verdadero o falso. Un resumen del comportamiento se muestra a continuación:
- PowerShell evalúa la condición en Prueba 1.
- Si el resultado de Prueba 1 devuelve verdadero, se ejecutará el código dentro de la lista de la declaración If, y entonces PowerShell salirá del If.
- Si el resultado de Prueba 1 devuelve falso, PowerShell continúa evaluando la condición (Prueba n) en la siguiente declaración ElseIf.
- Si el resultado de Test n devuelve false, PowerShell continúa evaluando la condición (Test n) en la siguiente declaración ElseIf, si otra declaración ElseIf existe -O-
- Si el resultado de Test n devuelve false, se ejecuta el código en la declaración Else, y PowerShell saldrá de la declaración If -O-
- Si el resultado de Test n devuelve true, se ejecuta el código en la declaración ElseIf, y PowerShell saldrá de la declaración If.
Usando la Declaración If-Else de PowerShell
Las siguientes secciones son varios ejemplos de cómo se utiliza la declaración If de PowerShell al escribir scripts. Las técnicas que aprenderás pueden guiarte en el uso de la declaración If si te encuentras con una situación de la vida real que requiera su uso.
Condición If-Else Única
Comenzando con lo más básico está la única declaración If de PowerShell. Deberías usar una única declaración if cuando solo hay una condición para probar.
El ejemplo a continuación prueba si el valor de la variable $num
es mayor que 10. Si el resultado es true, se mostrará en pantalla el resultado diciendo "$num es mayor que 10"
. Si el resultado es false, PowerShell no hace nada porque solo hay una condición para probar.
Si compruebas solo un valor específico, como
if ($Value) { }
, entonces PowerShell probará si el$Value
no es$Null
,0
,$False
, una cadena vacía o un arreglo vacío.
Pegar el código anterior en PowerShell te dará el resultado mostrado a continuación.

Ahora, puedes agregar la instrucción Else si deseas añadir una acción predeterminada de “fallback” en lugar de simplemente dejar que PowerShell no haga nada cuando el resultado de la prueba sea falso.
En el ejemplo siguiente, el código en la instrucción Else se ejecutará si el valor de la variable $num
NO es mayor que 10.
Ejecutar el código modificado en PowerShell te dará la salida mostrada a continuación.

Empezando con PowerShell 7.0, se ha introducido una nueva sintaxis para la instrucción If usando un operador ternario. Las instrucciones If simples pueden hacer buen uso de esta nueva sintaxis.
Usando el mismo ejemplo anterior, así es como se vería el código con el operador ternario.

Pruebas para $Null en una Instrucción If de PowerShell
Puede que pienses que probar una condición de $Null
es directa. Pero, el lado en el que coloques el valor $Null
es importante ya que puede no dar el mismo resultado en todas las condiciones. Es una buena práctica colocar siempre la condición $Null
en el lado izquierdo de esta manera.
Si colocas la prueba de $Null
en el lado derecho, y el valor del lado izquierdo es una lista, como un array, entonces $Null
actuará como un filtro. Como puedes ver en el siguiente ejemplo, si colocas $Null
en el lado izquierdo, obtendrás resultados booleanos consistentes.
$List = @(1,2,2,3,4)
$List -NE $Null
$List -EQ $Null
$Null -NE $Null
$Null -EQ $Null

Múltiples Condiciones If-Else con ElseIf
Al evaluar múltiples condiciones, es necesario agregar una o más instrucciones ElseIf. Cada instrucción ElseIf contiene la expresión de prueba y su código a ejecutar.
El script a continuación, al ejecutarse, seguirá solicitando un nombre de fruta hasta que se emita la tecla CTRL+C
, o el usuario ingrese la letra “X”.
Luego, la instrucción If recorrerá cada condición en secuencia hasta que encuentre una coincidencia. Si la entrada no coincide con ninguna de las condiciones, se ejecutará el código dentro de la instrucción Else.
A continuación se muestra una demostración de cómo se comporta el script anterior al ejecutarse en PowerShell.

Informe del estado del espacio libre en disco
Reportar el espacio libre en disco es una tarea común para los administradores del sistema. La forma habitual de informar sobre la información del espacio de los discos fijos en una máquina Windows gira en torno al código siguiente.
La información que devolverá el código anterior se verá como se muestra en la siguiente captura de pantalla.

Como puede ver, la salida anterior muestra la letra de la unidad, los valores de espacio libre y otras propiedades. Si bien la salida anterior está bien, no es intuitiva. La forma en que se presenta la información no indica si el espacio en disco está en un estado crítico, de advertencia o normal.
Uso de una instrucción If de PowerShell para mejorar el código
A more intuitive output can be achieved using the PowerShell If-Else statement by adding conditions to check if the free space is over or below certain thresholds. And these thresholds will define the status of the free disk space.
El script de ejemplo a continuación realiza lo siguiente:
- Usando el valor de la variable
$Critical
, define el umbral para el cual el porcentaje de espacio libre será etiquetado como crítico. - Usando el valor de la variable
$Warning
, define el umbral al cual el porcentaje de espacio libre se etiquetará como advertencia. - Obtener toda la información del disco fijo de la máquina local
- Recorrer toda la información del disco para determinar el espacio libre y etiquetar su estado.
- Si el porcentaje de espacio libre es mayor que el valor de la variable
$Warning
, el estado del espacio en disco se etiqueta como normal. - Si el porcentaje de espacio libre es mayor que el valor de la variable
$Critical
, el estado del espacio en disco se etiqueta como advertencia. - Si el porcentaje de espacio libre es menor o igual que el valor de la variable
$Critical
, el estado del espacio en disco se etiqueta como crítico.
- Si el porcentaje de espacio libre es mayor que el valor de la variable
- Componer las propiedades del objeto
'Letra de unidad'
,'Nombre de la unidad'
,'Espacio total (GB)'
,'Espacio libre (GB)'
,'Espacio libre (%)'
y'Estado'
. - Devuelva el informe final.
Copie el código a continuación y guarde el script con el nombre de archivo Get-DiskSpace.ps1
. No olvide cambiar los valores de las variables $Critical
y $Warning
para probar con diferentes umbrales.
También puede asignar el resultado de la condición if/else a una variable, por ejemplo,
$Status = if ($percentFree -gt $Warning) { 'Normal' }
para potencialmente hacer una condición más corta.
Una vez que el script esté guardado, pruébelo llamando a su nombre en PowerShell. A continuación, se muestra una demostración de muestra de cómo funciona este script.

Como se puede ver en la salida, el estado de cada disco se determina por el porcentaje de espacio libre en disco, que fue el resultado de usar múltiples condiciones con If-Else de PowerShell.
Multiple y Anidado If-Else
Digamos que tienes una declaración if-else con una condición definida en el bloque else
. Cuando se ejecuta la declaración if-else, el bloque else
se invoca si el código dentro del bloque if
devuelve falso.
Dentro del bloque else
, necesitas realizar otra prueba condicional. Como resultado, necesitas otra declaración If-Else. Este escenario se llama un If-Else anidado. La declaración If-Else anidada se utiliza comúnmente si el If-Else interno depende del resultado de la operación en el If-Else externo.
Usar múltiples y anidadas declaraciones If-Else puede ser bastante confuso. El punto clave es recordar la ubicación del andamio y asegurarse de sangrar su código. Sangrar su código te ayudará a reconocer y separar fácilmente tus declaraciones If-Else.
Ejemplo de Declaraciones If-Else Múltiples/Anidadas
El script de ejemplo a continuación muestra cómo las declaraciones If-Else múltiples y anidadas pueden depender del resultado de cada una. La lógica del código a continuación es la siguiente.
- Si
$SendEmail
es$false
, el script no hará nada y saldrá. - Si
$SendEmail
es$true
, entonces las variables$From
y$To
no deben estar vacías o nulas. De lo contrario, se establecerá$abortFlag
en 1. - Si
$SendEmail
es$true
y$CCEnabled
es$true
, entonces la variable$CC
no debe estar vacía o nula. De lo contrario, se establecerá$abortFlag
en 1. - Si la variable
$SendEmail
es$true
y la variable$BCCEnabled
es$true
, entonces la variable$BCC
no debe estar vacía o nula. De lo contrario, la variable$abortFlag
se establecerá en 1. - Si el valor de la variable
$abortFlag
es 1, el script se detendrá en este punto y no continuará. - Si el valor de la variable
$abortFlag
es 0, el script continuará hasta el final.
Copia el código siguiente y guárdalo como Send-MyMail.ps1
. No cambies ningún valor aún.
Una vez que hayas guardado el archivo, ejecútalo en PowerShell, como se muestra a continuación. La demostración a continuación muestra el resultado del script cuando los valores de las variables no cambian.

A continuación, edita el script y actualiza todas las variables correctamente, como se muestra en este fragmento a continuación.
Después de editar las variables, guarda el script y ejecútalo nuevamente. Debería mostrarte el mismo resultado, como se ve a continuación.

Ahora, modifica las variables y prueba combinaciones para ver cómo afectará al If-Else anidado. Modificar y probar por ti mismo te ayudará a entender mejor la lógica.
Resumen
En este artículo, aprendiste sobre la estructura de lógica condicional – la construcción del If Statement en PowerShell. La declaración If-Else permite a los scripters formular lógica condicional y dirigir las acciones de sus scripts basadas en los resultados de las pruebas.
Con los ejemplos en este artículo, deberías haber aprendido formas y técnicas para usar la declaración If-Else al crear un código impulsado por decisiones. If-Else puede ser simple usando una sola condición y se vuelve más complejo mientras profundizas en las declaraciones If-Else anidadas.
¿Qué piensas de la declaración If-Else? ¿Es algo que crees que usarías más después de leer este artículo? ¿Qué otros propósitos puedes considerar donde puedes aplicar el conocimiento que has adquirido aquí?