Me gustaría declarar algunas constantes enteras en PowerShell.¿PowerShell admite constantes?
¿Hay alguna buena manera de hacerlo?
Me gustaría declarar algunas constantes enteras en PowerShell.¿PowerShell admite constantes?
¿Hay alguna buena manera de hacerlo?
Uso
Set-Variable test -option Constant -value 100
o
Set-Variable test -option ReadOnly -value 100
La diferencia entre "constante" y "ReadOnly" es que una variable de sólo lectura puede ser eliminado (y luego vuelve a crear) a través de
Remove-Variable test -Force
mientras que una variable constante no se puede eliminar (incluso con -Fuerza).
Ver this TechNet article para más detalles.
Uso -option Constant
Set-Variable
con el cmdlet:
Set-Variable myvar -option Constant -value 100
Ahora $myvar
tiene un valor constante de 100 y no puede ser modificado.
Guau, eso es torpe. Tienes que usar Set-Variable para hacerlo, ¿eh? –
Sí, no hay una manera sencilla de hacerlo :) –
también puede modificar variables existentes con variable-set (con alias a sv) o usando get-variable (gv) y modificando con su propiedad Opciones. – x0n
Aquí es una solución para la definición de una constante de esta manera:
const myConst = 42
solución tomada http://poshcode.org/4063
function Set-Constant {
<#
.SYNOPSIS
Creates constants.
.DESCRIPTION
This function can help you to create constants so easy as it possible.
It works as keyword 'const' as such as in C#.
.EXAMPLE
PS C:\> Set-Constant a = 10
PS C:\> $a += 13
There is a integer constant declaration, so the second line return
error.
.EXAMPLE
PS C:\> const str = "this is a constant string"
You also can use word 'const' for constant declaration. There is a
string constant named '$str' in this example.
.LINK
Set-Variable
About_Functions_Advanced_Parameters
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$true, Position=0)]
[string][ValidateNotNullOrEmpty()]$Name,
[Parameter(Mandatory=$true, Position=1)]
[char][ValidateSet("=")]$Link,
[Parameter(Mandatory=$true, Position=2)]
[object][ValidateNotNullOrEmpty()]$Mean,
[Parameter(Mandatory=$false)]
[string]$Surround = "script"
)
Set-Variable -n $name -val $mean -opt Constant -s $surround
}
Set-Alias const Set-Constant
Para utilizar un tipo específico de valor, dicen Int64, se puede convertir explícitamente el valor usado en set-variable.
Por ejemplo:
set-variable -name test -value ([int64]100) -option Constant
Para comprobarlo,
Y verá que es un Int64 (en lugar de Int32, lo que sería normal para el valor 100).
PowerShell v5.0 debe permitir
[estática] [int] $ variable = 42
[estática] [DateTime] $ THISDAY
y similares.
no funciona en ps 5.1. No se puede encontrar el tipo [estático]. – ThomasMX
Sin mencionar que la estática no es lo mismo que una constante –
Hmm, pero ** ¿cómo fuerza el tipo de datos ** cuando usa' Set-Variable'? Cuando se trata de variables, uno puede usar '[string] $ name = value' pero eso no parece ser posible para las constantes? – masi
@masi simplemente fuerce el valor 'Prueba de variable de conjunto -opción Constante -valor [cadena] 100' – Monso
@Monso Usted necesita paréntesis alrededor del valor al especificar tipo como' ([cadena] 100) '. Ver respuestas a continuación. – Polymorphix