Probar el tipo de datos de una variable usando PowerShell

Probar el tipo de datos de una variable usando PowerShell

Una técnica en PowerShell que solemos usar es tomar la entrada del usuario y almacenarla en una variable. Sin embargo, habrá situaciones en las que una entrada de usuario tomada del usuario sea diferente de nuestro tipo de datos esperado.

Un ejemplo sería un usuario que ha ingresado su nombre, un tipo de dato String, en lugar de su edad que es un tipo de dato Int o entero. En este artículo, discutiremos varias maneras de cómo podemos manejar las discrepancias de tipo de datos variables y cómo podemos corregirlas adecuadamente usando PowerShell.

Probar una variable usando PowerShell

Le mostraremos tres ejemplos de manejo de discrepancias de tipos de datos variables. Comencemos con el uso de parámetros.

Probar una variable usando parámetros

Una forma de solicitar la entrada del usuario es configurar previamente los parámetros obligatorios durante la ejecución del script. Al predeterminar parámetros, podemos agregar un tipo de datos para respaldar el parámetro.

De esta manera, la secuencia de comandos puede saber si el usuario está pasando variables válidas antes de que comience la secuencia de comandos. Veamos el ejemplo.

Digamos que necesitamos la edad del usuario que ejecuta el script. Podemos ejecutar el siguiente script a continuación para forzar el script solo para aceptar valores enteros.

Código de ejemplo (param.ps1):

param(
    [Parameter(Mandatory)]
    [Int]$age
)
Write-Output $age

Supongamos que el usuario lo ha ejecutado con .\param.ps1 -age 2, el script debería devolverlo con la salida del número.

Aporte:

Supply values for the following parameters:
age: 2

Producción :

2

Sin embargo, si el usuario intenta pasar un valor diferente con un tipo de datos que no sea un número entero, por ejemplo, .\param.ps1 -age "hello", el script arrojará un error.

Aporte:

Supply values for the following parameters:
age: hello

Producción :

"System.Int32". Error: "Input string was not in a correct format."

Quizás estemos procesando una entrada de usuario durante la ejecución del script. Los siguientes métodos verificarán el tipo de datos de la variable mientras la ejecución del script está en curso.

Probar una variable con operadores

Otro método para verificar el tipo de datos de una variable es el uso de operadores condicionales. Los operadores condicionales son funciones que combinan dos o más valores que producen una variable booleana.

Usaremos los operadores condicionales -is para este artículo. En esta situación, podemos usar el operador -is haciendo coincidir nuestra variable directamente con el tipo de datos.

Código de ejemplo:

$age -is [Int]

Producción :

True

Por ejemplo, con nuestro fragmento de código a continuación, el script generará el valor de True si la variable tiene un valor entero. En caso contrario, False. Dado que estas salidas exportan un valor booleano, podemos usar sentencias condicionales para realizar acciones específicas, como, quizás, convertir el tipo de datos de una variable con el operador -as.

Código de ejemplo:

if($age -is [Int]){
    Write-Output "Age $age is an integer"
}else{
    Write-Output "Age is not an integer... Converting"
    try{
        $age = $age -as [Int]
        Write-Output "Converted! Age $age is now an integer"
    }catch{
        Write-Output "Input is a string, could not be converted."
    }
}

Producción :

Age is not an integer... Converting
Converted! Age 2 is now an integer

Probar una variable con funciones

Nuestro último ejemplo es similar al anterior porque usaremos operadores para crear nuestra función personalizada. Podemos usar estos operadores para crear una función que verificará el tipo de datos de la variable y devolverá un valor booleano.

Lo bueno de la siguiente función es que, en comparación con nuestro ejemplo anterior, esta función también verificará los valores que también son negativos, brindándonos resultados más precisos.

Código de ejemplo:

function isNumeric($_){
    return $_ -is [int]  -or $_ -is [int16]  -or $_ -is [int32]  -or $_ -is [int64]
}
isNumeric(-1)

Producción :

True
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