В PowerShell, как я тестирую, существует ли определенная переменная в глобальной области видимости?

Я использую сценарии PowerShell для некоторой автоматизации UI приложения WPF. Обычно, скрипты запущены как группа, на основе значения глобальной переменной. Это немного неудобно для установки этой переменной вручную в течение времен, когда я хочу запустить всего один скрипт, таким образом, я ищу способ изменить их, чтобы проверить на эту переменную и установить ее если не найденный.

тестовый тракт variable:\foo, кажется, не работает, так как я все еще получаю следующую ошибку:

Переменный '$global:foo' не может быть получен, потому что он не был установлен.

51
задан Scott Lawrence 1 July 2010 в 05:56
поделиться

4 ответа

РЕДАКТИРОВАТЬ: Используйте ответ stej ниже. Мой собственный (частично неверный) все еще воспроизводится здесь для справки:


Вы можете использовать

Get-Variable foo -Scope Global

и перехватить ошибку, которая возникает, когда переменная не существует.

22
ответ дан 7 November 2019 в 09:41
поделиться

Пока что, похоже, работает этот .

Чтобы продолжить, у меня сработало следующее:

Get-Variable -Name foo -Scope Global -ea SilentlyContinue | out-null

$? возвращает либо истину, либо ложь.

2
ответ дан 7 November 2019 в 09:41
поделиться

Вы можете присвоить переменную возвращаемому значению Get-Variable, а затем проверить, является ли оно нулевым:

$variable = Get-Variable -Name foo -Scope Global -ErrorAction SilentlyContinue

if ($variable -eq $null)
{
    Write-Host "foo does not exist"
}

# else...

Просто имейте в виду что переменная должна быть присвоена чему-то, чтобы она "существовала". Например:

$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"
}

Вывод:

foo exists
bar does not exist
1
ответ дан 7 November 2019 в 09:41
поделиться

Test-Path можно использовать со специальным синтаксисом:

Test-Path variable:global:foo
189
ответ дан 7 November 2019 в 09:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: