2010-04-09 17 views

Respuesta

80

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.

+3

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

+5

@masi simplemente fuerce el valor 'Prueba de variable de conjunto -opción Constante -valor [cadena] 100' – Monso

+3

@Monso Usted necesita paréntesis alrededor del valor al especificar tipo como' ([cadena] 100) '. Ver respuestas a continuación. – Polymorphix

8

Uso -option ConstantSet-Variable con el cmdlet:

Set-Variable myvar -option Constant -value 100 

Ahora $myvar tiene un valor constante de 100 y no puede ser modificado.

+1

Guau, eso es torpe. Tienes que usar Set-Variable para hacerlo, ¿eh? –

+0

Sí, no hay una manera sencilla de hacerlo :) –

+1

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

12

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 
9

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).

-3

PowerShell v5.0 debe permitir

[estática] [int] $ variable = 42

[estática] [DateTime] $ THISDAY

y similares.

+0

no funciona en ps 5.1. No se puede encontrar el tipo [estático]. – ThomasMX

+0

Sin mencionar que la estática no es lo mismo que una constante –