[PowerShell] Saber si una variable ya ha sido definida

En ocasiones tengo la necesidad de saber si una variable ha sido previamente definida. Esto es especialmente importante porque utilizo siempre el “Set-StrictMode -Version 2” y, si necesito recurrir a variables de otros scopes, cuando intento acceder a una variable no definida obtengo un error. Aunque generalmente intento no recurrir a otros scopes, especialmente el $global, en ocasiones los necesito, especialmente el $script.

Un ejemplo podría ser querer verificar si una variable que contiene un array ha sido inicializada o no, para poder añadirle ítems. El código quedaría de la siguiente forma:

Function Add-ItemToScriptVariable($item) {
	if (-not (Test-Path variable:script:anyVariable)) {
		[System.Collections.ArrayList]$script:anyVariable = @()
	}
    $script:anyVariable += $item
}

Add-ItemToScriptVariable "item 1"
Add-ItemToScriptVariable "item 2"
Add-ItemToScriptVariable "item 3"

Write-Host $script:anyVariable

Como es costumbre en PowerShell, un mismo comando vale aparentemente para múltiples propósitos. En este caso, Test-Path nos permite verificar si una variable existe en un ámbito determinado. Aunque choque, es importante fijarse en que el habitual símbolo del dolar no aparece por ningún lado en este caso.

Por si alguien se lo pregunta, al igual que el Test-Path funciona, también es posible utilizar el comando “Get-ChildItem variable:”. No obstante, si el objetivo es enumerar las variables, es mucho más apropiado utilizar el comando Get-Variable.

Modesto San Juan

Desarrollo software e intento hacerlo bien