Me gustaría declarar algunas constantes enteras en PowerShell.
¿Hay alguna buena forma de hacerlo?
powershell
constants
Tom Hazel
fuente
fuente
Set-Variable
? Cuando se trata de variables, se puede usar,[string]$name = value
pero eso parece no ser posible para las constantes.Set-Variable test -option Constant -value [string]100
([string]100)
. Vea las respuestas a continuación.Aquí hay una solución para definir una constante como esta:
Solución tomada de http://poshcode.org/4063
fuente
Set-Constant
está contenido en un módulo. Creará una constante en el alcance del módulo, dondeSet-Constant
está contenido. Como solución alternativa, se podría pasar un parámetro-Surround Global
, pero eso no siempre se desea. Me gustaría crear una constante en otro módulo o localmente en una función.Usar
-option Constant
con elSet-Variable
cmdlet:Ahora
$myvar
tiene un valor constante de 100 y no se puede modificar.fuente
Set-Variable
? Cuando se trata de variables, se puede usar,[string]$name = value
pero eso parece no ser posible para las constantes.set-variable -name test -value ([int64]100) -option Constant
Para usar un tipo de valor específico, digamos Int64, puede convertir explícitamente el valor usado en set-variable.
Por ejemplo:
Verificar,
Y verá que es un Int64 (en lugar de Int32, que sería normal para el valor 100).
fuente
Realmente me gusta el azúcar sintáctico que proporciona la respuesta de Rob:
Desafortunadamente, su solución no funciona como se esperaba cuando define la
Set-Constant
función en un módulo . Cuando se llama desde fuera del módulo, creará una constante en el alcance del módulo, dondeSet-Constant
se define, en lugar del alcance del llamador . Esto hace que la constante sea invisible para la persona que llama.La siguiente función modificada soluciona este problema. La solución se basa en esta respuesta a la pregunta "¿Hay alguna forma de que un módulo de PowerShell llegue al alcance de su llamador?" .
Notas:
Set-Variable -scope 1
debería funcionar), cuando descubra cómo hacerlo.-Mean
a-Value
, por coherencia conSet-Variable
.Private
,ReadOnly
yAllScope
. Simplemente agregue los valores deseados al tercer argumento delPSVariable
constructor , al que se llama en el script anteriorNew-Object
.fuente
PowerShell v5.0 debería permitir
[estática] [int] $ variable = 42
[estática] [DateTime] $ este día
y similares.
fuente