2010-04-09 10 views

Antwort

80

Verwenden

Set-Variable test -option Constant -value 100 

oder

Set-Variable test -option ReadOnly -value 100 

Der Unterschied zwischen "Konstante" und "Readonly" ist, dass ein Nur-Lese-Variable entfernt werden kann (und dann wieder erstellt) über

Remove-Variable test -Force 

während eine konstante Variable nicht entfernt werden kann (auch nicht mit -Force).

Weitere Informationen finden Sie unter this TechNet article.

+3

Hmm, aber ** wie erzwingen Sie den Datentyp ** bei der Verwendung von' Set-Variable'? Wenn man mit Variablen arbeitet, kann man '[string] $ name = value' verwenden, aber das scheint für Konstanten nicht möglich zu sein. – masi

+5

@masi erzwinge nur den Wert 'Set-Variable test -option Konstanter -Wert [string] 100' – Monso

+3

@Monso Bei der Angabe von type' '([string] 100)' brauchst du Klammern um den Wert. '. Siehe Antworten unten. – Polymorphix

8

Verwenden -option Constant mit dem Set-Variable Cmdlets:

Set-Variable myvar -option Constant -value 100 

Jetzt $myvar einen konstanten Wert von 100 und kann nicht geändert werden.

+1

Wow, das ist klobig. Sie müssen Set-Variable verwenden, um es zu tun, nicht wahr? –

+0

Ja, es gibt nicht unclunky Weg, es zu tun :) –

+1

Sie können auch ändern und bestehende Variable entweder mit Set-Variable (aliased zu SV) oder mit Get-Variable (gv) und basteln mit seiner Option -Eigenschaft. – x0n

12

Hier ist eine Lösung für die Definition einer Konstante ist wie folgt:

const myConst = 42 

Lösung von http://poshcode.org/4063 genommen

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

Um einen bestimmten Typ von Wert zu verwenden, sagen Int64, Sie explizit den Wert werfen können in Set-Variable verwendet.

Zum Beispiel:

set-variable -name test -value ([int64]100) -option Constant 

Um zu überprüfen,

Und Sie werden sehen, dass es ein Int64 ist (und nicht Int32, die für den Wert 100 normal wäre).

-3

Powershell v5.0 sollte

[statisch] [int] $ variable = 42

[statisch] [Datetime] $ ThisDay

und dergleichen ermöglichen.

+0

funktioniert nicht auf ps 5.1. Der Typ [statisch] konnte nicht gefunden werden. – ThomasMX

+0

Nicht zu vergessen, Statik ist nicht das Gleiche wie eine Konstante –