Las ventajas de usar parámetros y variables tipados en PowerShell

PowerShell, DevOps


Cuanto más uso PowerShell más convencido estoy de lo importante que es tipar las variables y los parámetros de las funciones. Debido a la forma en que trabaja PowerShell, especificar los tipos me ayuda a evitar comportamientos indeseados.

Por ejemplo, dado este script:

Set-StrictMode -Version 2

$items = Get-ChildItem
if ($items) {
   $items.Count
}

Si lo ejecuto estando en un directorio con varios archivos o carpetas, mostrará en pantalla el número de items. Pero si lo ejecuto en un directorio que tenga únicamente un ítem, el resultado será un error estrepitoso porque dice que no tiene ni idea de qué es eso de la propiedad Count. Simplemente con tipar la variable $items este ejemplo funcionaría perfectamente:

Set-StrictMode -Version 2

[array]$items = Get-ChildItem
if ($items) {
   $items.Count
}

Otro ejemplo habitual me lo encuentro cuando tengo una función en la que recibo la ruta de un directorio. Es muy habitual recibir un string con la ruta. El problema es que si trabajamos con rutas de red, esto no funciona muy bien y hay que añadirle por delante de la ruta la cadena “filesystem::”. A no ser que estemos interactuando con código .Net, en cuyo caso la ruta con el “filesystem::” por delante no le gusta ni un pelo. Al final es mucho más sencillo si hago el parámetro tipado con el tipo System.IO.DirectoryInfo, FileInfo o el que sea pertinente.

Publicado originalmente en el blog de Modesto San Juan.