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 = valuepero 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-Constantestá contenido en un módulo. Creará una constante en el alcance del módulo, dondeSet-Constantestá 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 Constantcon elSet-Variablecmdlet:Ahora
$myvartiene un valor constante de 100 y no se puede modificar.fuente
Set-Variable? Cuando se trata de variables, se puede usar,[string]$name = valuepero eso parece no ser posible para las constantes.set-variable -name test -value ([int64]100) -option ConstantPara 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-Constantfunción en un módulo . Cuando se llama desde fuera del módulo, creará una constante en el alcance del módulo, dondeSet-Constantse 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 1debería funcionar), cuando descubra cómo hacerlo.-Meana-Value, por coherencia conSet-Variable.Private,ReadOnlyyAllScope. Simplemente agregue los valores deseados al tercer argumento delPSVariableconstructor , 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