Je voudrais déclarer des constantes entières dans PowerShell.
Y a-t-il un bon moyen de faire cela?
powershell
constants
Tom Hazel
la source
la source
Set-Variable
? Quand on traite des variables, on peut utiliser[string]$name = value
mais cela ne semble pas possible pour les constantes?Set-Variable test -option Constant -value [string]100
([string]100)
. Voir les réponses ci-dessous.Voici une solution pour définir une constante comme celle-ci:
Solution tirée de http://poshcode.org/4063
la source
Set-Constant
est contenu dans un module. Cela créera une constante dans la portée du module, oùSet-Constant
est contenue. Comme solution de contournement, on peut passer un paramètre-Surround Global
, mais ce n'est pas toujours souhaité. Je souhaite créer une constante dans un autre module ou localement dans une fonction.Utiliser
-option Constant
avec l'Set-Variable
applet de commande:A maintenant
$myvar
une valeur constante de 100 et ne peut pas être modifiée.la source
Set-Variable
? Quand on traite des variables, on peut utiliser[string]$name = value
mais cela ne semble pas possible pour les constantes?set-variable -name test -value ([int64]100) -option Constant
Pour utiliser un type spécifique de valeur, par exemple Int64, vous pouvez convertir explicitement la valeur utilisée dans set-variable.
Par exemple:
Vérifier,
Et vous verrez qu'il s'agit d'un Int64 (plutôt que d'un Int32, ce qui serait normal pour la valeur 100).
la source
J'aime vraiment le sucre syntaxique fourni par la réponse de rob :
Malheureusement, sa solution ne fonctionne pas comme prévu lorsque vous définissez la
Set-Constant
fonction dans un module . Lorsqu'il est appelé depuis l'extérieur du module, il crée une constante dans la portée du module, oùSet-Constant
est définie, au lieu de la portée de l' appelant . Cela rend la constante invisible pour l'appelant.La fonction modifiée suivante résout ce problème. La solution est basée sur cette réponse à la question "Y a-t-il un moyen pour un module PowerShell d'atteindre la portée de son appelant?" .
Remarques:
Set-Variable -scope 1
devrait fonctionner), lorsque j'ai trouvé comment faire.-Mean
en-Value
, par souci de cohérence avecSet-Variable
.Private
,ReadOnly
etAllScope
. Ajoutez simplement les valeurs souhaitées au 3ème argument duPSVariable
constructeur , qui est appelé dans le script ci-dessus viaNew-Object
.la source
PowerShell v5.0 devrait permettre
[statique] [int] $ variable = 42
[statique] [DateTime] $ thisday
etc.
la source