Variables nulas en PowerShell

  1. Introducción a la Variable Nula en PowerShell
  2. Impactos de la Variable Nula en PowerShell
  3. Comprobar Valores Nulos en PowerShell
  4. Conclusión
Variables nulas en PowerShell

PowerShell trata el objeto $Null con el valor nulo, y algunos comandos requieren alguna salida para generar. Generan el valor nulo si hay algún error y también pueden ser útiles en el propósito de solución de problemas en los scripts para comprobar si el comando genera algún valor.

Este artículo habla sobre la variable nula, los impactos de usar la variable nula en diferentes sintaxis en PowerShell y formas de comprobar los valores nulos.

Introducción a la Variable Nula en PowerShell

Podemos pensar en NULL como un valor desconocido o vacío. Por ejemplo, una variable es NULL hasta que se le asigna un valor u objeto.

Esta variable puede ser importante porque algunos comandos requieren un valor y fallarán si el valor es NULL.

La variable $null es una variable automática en PowerShell utilizada para representar NULL. Podemos asignarla a variables, usarla en comparaciones y usarla como un marcador de posición para NULL en una colección.

PowerShell trata $null como un objeto con el valor NULL. Por lo tanto, esta variable es diferente de lo que podrías esperar si vienes de otro lenguaje.

Impactos de la Variable Nula en PowerShell

El comportamiento de los valores $null puede variar dependiendo de dónde aparezcan dentro de tu código. Exploremos cómo las variables NULL afectan diferentes aspectos de la programación en PowerShell.

Impacto en Cadenas

Si usas $null en una cadena, esta será una cadena vacía (o un valor en blanco).

$value = $null
Write-Output "The value is $value."

Salida:

The value is .

Para mantener la claridad en tus scripts, es aconsejable encerrar las variables entre corchetes ([]) cuando las uses en mensajes de registro, especialmente cuando el valor de la variable está al final de la cadena.

$value = $null
Write-Output "The value is [$value]"

Salida:

The value is []

Esta práctica ayuda a distinguir entre cadenas vacías y valores $null.

Impacto en Ecuaciones Numéricas

Cuando se usa una variable $null en una ecuación numérica, nuestros resultados serán inválidos si no dan un error. A veces, la variable $null se evaluará como 0, o hará que todo el resultado sea $null.

Considera este ejemplo que involucra la multiplicación, que produce 0 o $null según el orden de los valores.

$null * 5
$null -eq ( $null * 5 )

Salida:

True

Impacto en Colecciones

Una colección nos permite usar un índice para acceder a los valores. Si intentamos indexar en una colección nula, obtendremos este error: "Cannot index into a null array".

$value = $null
$value[10]

Salida:

Cannot index into a null array.
At line:2 char:1
+ $value[10]
+ ~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

Sin embargo, si tienes una colección e intentas recuperar un elemento que no existe en la colección, recibirás un resultado $null.

$array = @( 'one', 'two', 'three' )
$null -eq $array[100]

Salida:

True

Impactos en Objetos

Si intentamos acceder a una propiedad o subpropiedad de un objeto sin propiedad especificada, podemos obtener una variable $null como lo harías con una variable indefinida. No importa si el valor es $null o un objeto real en este caso.

$null -eq $undefined.not.existing

Salida:

True

Impactos en Métodos

Llamar a un método en una variable $null lanzará una excepción RuntimeException.

$value = $null
$value.toString()

Salida:

You cannot call a method on a null valued expression.
At line:2 char:1
+ $value.toString()
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Siempre que encuentres la frase "You cannot call a method on a null valued expression", es una señal para inspeccionar tu código en busca de lugares donde se está llamando a un método en una variable sin verificar primero los valores $null.

Comprobar Valores Nulos en PowerShell

Usa Operadores de Comparación -eq y -ne para Comprobar Valores Nulos en PowerShell

Al comprobar valores $null en PowerShell, es una buena práctica colocar la variable $null en el lado izquierdo de las comparaciones. Este estilo de escritura no solo es intencional, sino que también es aceptado como una buena práctica en PowerShell.

Sin embargo, hay escenarios donde colocar $null en el lado derecho puede darte resultados inesperados. Veamos el siguiente código y tratemos de predecir los resultados:

if ( $value -eq $null ) {
    'The array is $null'
}

if ( $value -ne $null ) {
    'The array is not $null'
}

Si no definimos $value, el primero evaluará como $true, y nuestro mensaje será The array is $null. La advertencia aquí es que es posible crear un $value que permita que ambos resultados sean $false.

Salida:

The array is $null

En este caso, la variable $value es un array que contiene un $null.

El operador -eq verifica cada valor en el array y devuelve el $null coincidente, que se evalúa como $false. De manera similar, el operador -ne devuelve todo lo que no coincide con el valor $null, resultando en ningún resultado (también evaluando como $false).

Por lo tanto, ninguna condición es $true, aunque una de ellas podría esperarse que lo fuera.

Usa el Operador -not para Comprobar Valores Nulos en PowerShell

El operador -not es un operador lógico en PowerShell que niega una condición. Cuando se aplica a una variable, comprueba si la variable no es nula.

$myVariable = $null

if (-not $myVariable) {
    Write-Host "The variable is null."
}

En este fragmento de código, tenemos una variable $myVariable inicializada con un valor nulo. El operador -not se utiliza en la declaración if para verificar si $myVariable no es nula.

Si la condición es verdadera, el script ejecutará el bloque de código dentro de la declaración if.

Salida:

The variable is null.

Como se demostró en la salida, el script identifica que $myVariable es nula y muestra el mensaje "The variable is null".

Usa el Método IsNullOrEmpty() para Comprobar Valores Nulos en PowerShell

El método IsNullOrEmpty() es un método de la clase System.String, no un método nativo de PowerShell. Diferentes tipos de datos pueden tener diferentes formas de comprobar valores nulos o vacíos.

En este código, creamos una variable llamada $myString y le asignamos el valor $null, que representa una cadena nula o vacía.

Usamos el método [string]::IsNullOrEmpty($myString) para comprobar si $myString es nula o vacía. Este método es parte de la clase [string] en el .NET Framework y se utiliza para determinar si una cadena es nula o una cadena vacía.

Si $myString es de hecho nula o vacía, la condición es verdadera y el script imprime "The string is null or empty.".

$myString = $null

if ([string]::IsNullOrEmpty($myString)) {
    Write-Host 'The string is null or empty.'
}

Salida:

The string is null or empty.

Dado que $myString se le asigna el valor $null, la condición es verdadera y el mensaje se muestra en la salida.

Usa el Método IsNullOrWhiteSpace() para Comprobar Valores Nulos en PowerShell

El método IsNullOrWhiteSpace() es un método útil disponible en la clase System.String del .NET Framework, y puedes usarlo en PowerShell llamándolo en una variable de cadena.

Este método comprueba si una cadena es nula, vacía o consiste únicamente en caracteres de espacio en blanco. Es útil cuando deseas verificar si una variable de cadena está efectivamente vacía, incluso si contiene solo espacios o tabulaciones.

En el siguiente código, creamos una variable llamada $myString y le asignamos una cadena que contiene solo caracteres de espacio en blanco (espacios).

Luego, usamos el método [string]::IsNullOrWhiteSpace($myString) para comprobar si $myString es nula o solo contiene espacios en blanco.

$myString = $null

if ([string]::IsNullOrWhiteSpace($myString)) {
    Write-Host 'The string is null or contains only whitespace.'
}

Salida:

The string is null or contains only whitespace.

Dado que la condición es verdadera ($myString es nulo), el script imprime "The string is null or contains only whitespace.".

Este método es útil cuando deseas asegurarte de que una cadena esté verdaderamente vacía, incluso si parece estar "en blanco" debido a espacios o tabulaciones.

Conclusión

En la programación en PowerShell, entender cómo funcionan las variables $null es importante porque pueden afectar cómo se comportan tus scripts en diferentes situaciones. Para escribir scripts confiables, es una buena idea seguir las mejores prácticas, como asegurarte de comprobar los valores nulos correctamente colocando $null en el lado izquierdo.

Ya seas nuevo en la programación o tengas experiencia, conocer estos detalles te ayudará a mejorar en el uso de PowerShell.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artículo relacionado - PowerShell Variable