usar tutorial script como commands comandos powershell

tutorial - En PowerShell, ¿cómo puedo probar si existe o no una variable específica en el alcance global?



powershell tutorial (7)

Hasta el momento, parece que la respuesta que funciona es esta .

Para profundizar más, lo que funcionó para mí fue esto:

Get-Variable -Name foo -Scope Global -ea SilentlyContinue | fuera-nulo

ps devuelve verdadero o falso.

Estoy usando scripts de PowerShell para la automatización de UI de una aplicación WPF. Normalmente, los scripts se ejecutan como un grupo, en función del valor de una variable global. Es un poco incómodo establecer esta variable manualmente para los momentos en los que quiero ejecutar solo un script, por lo que estoy buscando una forma de modificarlos para verificar esta variable y establecerla si no se encuentra.

Variable test-path: / foo parece no funcionar, ya que sigo recibiendo el siguiente error:

La variable ''$ global: foo'' no se puede recuperar porque no se ha establecido.


Hay una manera aún más fácil:

if ($variable) { Write-Host "bar exist" } else { Write-Host "bar does not exists" }


La preferencia personal es usar Ignore sobre SilentlyContinue aquí porque no es un error en absoluto. Dado que esperamos que sea potencialmente $false , evitemos que (con Ignore ) se ponga (aunque silenciosamente) en la pila de $Error .

Puedes usar:

if (Get-Variable ''foo'' -Scope Global -ErrorAction ''Ignore'') { $true } else { $false }

Más concisamente:

[bool](Get-Variable ''foo'' -Scope ''Global'' -EA ''Ig'')

Salida de cualquiera:

False

Alternativamente

Puede atrapar el error que se produce cuando la variable no existe.

try { Get-Variable foo -Scope Global -ErrorAction ''Stop'' } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $_ }

Productos:

WARNING: Cannot find a variable with the name ''foo''.


Puede asignar una variable al valor de retorno de Get-Variable y luego verificar para ver si es nulo:

$variable = Get-Variable -Name foo -Scope Global -ErrorAction SilentlyContinue if ($variable -eq $null) { Write-Host "foo does not exist" } # else...

Solo tenga en cuenta que la variable debe asignarse a algo para que "exista". Por ejemplo:

$global:foo = $null $variable = Get-Variable -Name foo -Scope Global -ErrorAction SilentlyContinue if ($variable -eq $null) { Write-Host "foo does not exist" } else { Write-Host "foo exists" } $global:bar $variable = Get-Variable -Name bar -Scope Global -ErrorAction SilentlyContinue if ($variable -eq $null) { Write-Host "bar does not exist" } else { Write-Host "bar exists" }

Salida:

foo exists bar does not exist


Simple: [boolean] (get-variable "Varname" -ErrorAction SilentlyContinue)


Test-Path se puede usar con una sintaxis especial:

Test-Path variable:global:foo


EDITAR: Usa la respuesta de stej a continuación. Mi propia (parcialmente incorrecta) sigue reproduciéndose aquí para referencia:

Puedes usar

Get-Variable foo -Scope Global

y atrapa el error que se genera cuando la variable no existe.