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.