Чтобы собрать полезный ответ Адама Луневского и Полезная рекомендация Йероена Мостерта :
Поэтому, чтобы получить то, что вы хотите:
Используйте New-Variable
(или Set-Variable
) с -Option Constant
, что предотвращает его дальнейшее удаление.
Обратите внимание, что ваша переменная может по умолчанию все еще будет затенен переменной с тем же именем, созданной в области видимости Потомок ; Например: Set-Variable -Option Constant var 1; & { $var = 2; $var }
- внутри блока скрипта был создан новый локальный $var
, который затенял внешний, постоянный.
Чтобы предотвратить это, используйте -Option Constant, AllScope
, который гарантирует, что весь код в сеансе видит одно и то же значение для переменной с заданным именем, но учтите, что код, который пытается создать свою собственную копию, может затем потерпеть неудачу, поэтому вы должны делать это только с именами переменных, которые можно считать не используется для других целей в другом коде.
Чтобы присвоить специально набранное значение , передайте его -Value
через выражение (заключено в (...)
, оператор группировки ) - при необходимости:
# Create a constant, [int]-typed variable.
# Note that just `-Value 42` would be sufficient here.
New-Variable -Option Constant -Name myVar1 -Value ([int] 42)
В этом случае будет достаточно -Value 42
потому что PowerShell по умолчанию анализирует аргументы без кавычек, которые могут быть проанализированы как числа как таковые, с [int]
в качестве наименьшего выбранного типа; Вы даже можете использовать суффиксы числового типа, такие как L
для [long]
. Однако отрицательные"числовые строки" (например, -42
) не распознаются как числа и требуют (...)
.
Аналогично, цитируется Маркер (например, '42'
) неявно создаст [string]
, литерал хеш-таблицы (@{ key = 'value' }
) создаст хеш-таблицу и т. Д .; простая ссылка на переменную (например, $HOME
) или доступ к члену (например, $HOME.ToUpper()
) сохранит тип значения переменной / члена.
См. также:
Этот ответ предоставляет подробный обзор того, как анализируется токен без кавычек в режиме аргумента (режим разбора для команд, в которые передаются аргументы).
Этот ответ объясняет, как PowerShell анализирует числовые литералы (что также применяется при передаче без кавычек токенов в качестве аргументов команды).