Личное предпочтение - использовать Ignore
над SilentlyContinue
, потому что это вовсе не ошибка.Поскольку мы ожидаем, что он потенциально будет $false
, давайте предотвратим его (с Ignore
) помещение (хотя и без вывода сообщений) в стек $Error
.
Вы можете использовать:
if (Get-Variable 'foo' -Scope Global -ErrorAction 'Ignore') {
$true
} else {
$false
}
Более кратко:
[bool](Get-Variable 'foo' -Scope 'Global' -EA 'Ig')
Вывод:
False
В качестве альтернативы
Вы можете перехватить возникшую ошибкукогда переменная не существует.
try {
Get-Variable foo -Scope Global -ErrorAction 'Stop'
} catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning $_
}
Выходы:
WARNING: Cannot find a variable with the name 'foo'.