Я использую сценарии PowerShell для некоторой автоматизации UI приложения WPF. Обычно, скрипты запущены как группа, на основе значения глобальной переменной. Это немного неудобно для установки этой переменной вручную в течение времен, когда я хочу запустить всего один скрипт, таким образом, я ищу способ изменить их, чтобы проверить на эту переменную и установить ее если не найденный.
тестовый тракт variable:\foo, кажется, не работает, так как я все еще получаю следующую ошибку:
Переменный '$global:foo' не может быть получен, потому что он не был установлен.
РЕДАКТИРОВАТЬ: Используйте ответ stej ниже. Мой собственный (частично неверный) все еще воспроизводится здесь для справки:
Вы можете использовать
Get-Variable foo -Scope Global
и перехватить ошибку, которая возникает, когда переменная не существует.
Пока что, похоже, работает этот .
Чтобы продолжить, у меня сработало следующее:
Get-Variable -Name foo -Scope Global -ea SilentlyContinue | out-null
$? возвращает либо истину, либо ложь.
Вы можете присвоить переменную возвращаемому значению 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
Test-Path
можно использовать со специальным синтаксисом:
Test-Path variable:global:foo