Как протестировать на существование ограниченной по объему сценарием переменной в PowerShell?

Действительно ли возможно протестировать на существование ограниченной по объему сценарием переменной в PowerShell?

Я использовал Расширения Сообщества PowerShell (PSCX), но я заметил это, если Вы импортируете модуль в то время как Set-PSDebug -Strict установлен, ошибка производится:

The variable '$SCRIPT:helpCache' cannot be retrieved because it has not been set.
At C:\Users\...\Modules\Pscx\Modules\GetHelp\Pscx.GetHelp.psm1:5 char:24

При исследовании, как я мог бы зафиксировать это, я нашел эту часть кода в Pscx. GetHelp.psm1:

#requires -version 2.0

param([string[]]$PreCacheList)

if ((!$SCRIPT:helpCache) -or $RefreshCache) {
    $SCRIPT:helpCache = @{}
}

Это - довольно прямой код; если кэш не существует или должен быть обновлен, создать новый, пустой кэш. Проблемой является тот вызов $SCRIPT:helpCache в то время как Set-PSDebug -Strict находится в силе casues ошибка, потому что переменная еще не была определена.

Идеально, мы могли использовать a Test-Variable cmdlet, но такая вещь не существует! Я думал о заглядывании variable: поставщик, но я не знаю, как определить объем переменной.

Таким образом, мой вопрос: как я могу протестировать на существование переменной в то время как Set-PSDebug -Strict находится в силе, не вызывая ошибку?

7
задан Damian Powell 4 May 2010 в 08:45
поделиться

3 ответа

Используйте переменную тестового пути: SCRIPT: helpCache

if (!(test-path variable:script:helpCache)) {
  $script:helpCache = @{}
}

У меня это работает без проблем. Проверено с помощью этого кода:

@'
Set-PsDebug -strict
write-host (test-path variable:script:helpCache)
$script:helpCache = "this is test"
write-host (test-path variable:script:helpCache) and value is $script:helpCache
'@ | set-content stricttest.ps1

.\stricttest.ps1
5
ответ дан 7 December 2019 в 01:18
поделиться

Вы можете использовать Get-Variable с параметром -Scope . Этот командлет (по крайней мере по умолчанию) возвращает не только значение переменной, но и объект PSVariable , и генерирует исключение, если переменная не найдена:

Get-Variable foo -Scope script
1
ответ дан 7 December 2019 в 01:18
поделиться

Попробуйте этот трюк:

Get-Variable [h]elpCache -Scope Script

Он не должен выдавать или выдавать какие-либо ошибки, потому что мы используем подстановочный знак [h] elpCache . С другой стороны, этот вид подстановочного знака - это буквальное имя де-факто.

4
ответ дан 7 December 2019 в 01:18
поделиться
Другие вопросы по тегам:

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