Я хотел бы объявить некоторые целочисленные константы в PowerShell.
Есть ли хороший способ сделать это?
powershell
constants
Том Хейзел
источник
источник
Set-Variable
? При работе с переменными можно использовать,[string]$name = value
но, похоже, это невозможно для констант?Set-Variable test -option Constant -value [string]100
([string]100)
. См. Ответы ниже.Вот решение для определения такой константы:
Решение взято из http://poshcode.org/4063
источник
Set-Constant
он содержится в модуле. Он создаст константу в области видимости модуля, гдеSet-Constant
содержится. В качестве обходного пути можно передать параметр-Surround Global
, но это не всегда нужно. Я хочу создать константу в другом модуле или локально в функции.Используйте
-option Constant
сSet-Variable
командлетом:Теперь
$myvar
имеет постоянное значение 100 и не может быть изменено.источник
Set-Variable
? При работе с переменными можно использовать,[string]$name = value
но, похоже, это невозможно для констант?set-variable -name test -value ([int64]100) -option Constant
Чтобы использовать определенный тип значения, скажем Int64, вы можете явно привести значение, используемое в set-variable.
Например:
Проверять,
И вы увидите, что это Int64 (а не Int32, что было бы нормально для значения 100).
источник
Мне очень нравится синтаксический сахар, который дает ответ Роба:
К сожалению, его решение работает не так, как ожидалось, когда вы определяете
Set-Constant
функцию в модуле . При вызове извне модуля он создает константу в области видимости модуля, гдеSet-Constant
определено, вместо области действия вызывающего . Это делает константу невидимой для вызывающей стороны.Следующая модифицированная функция устраняет эту проблему. Решение основано на этом ответе на вопрос «Есть ли способ для модуля PowerShell попасть в область действия вызывающего объекта?» ,
Ноты:
Set-Variable -scope 1
должен работать), когда я узнаю, как это сделать.-Mean
в-Value
, для согласования сSet-Variable
.Private
,ReadOnly
иAllScope
. Просто добавьте желаемые значения к третьему аргументуPSVariable
конструктора , который вызывается в приведенном выше скрипте черезNew-Object
.источник
PowerShell v5.0 должен позволять
[static] [int] $ variable = 42
[статические] [DateTime] $ thisday
и тому подобное.
источник