Ich möchte einige ganzzahlige Konstanten in PowerShell deklarieren.
Gibt es eine gute Möglichkeit, das zu tun?
powershell
constants
Tom Hazel
quelle
quelle
Set-Variable
? Im Umgang mit Variablen kann man verwenden,[string]$name = value
aber das scheint für Konstanten nicht möglich zu sein?Set-Variable test -option Constant -value [string]100
([string]100)
. Siehe Antworten unten.Hier ist eine Lösung zum Definieren einer Konstanten wie dieser:
Lösung von http://poshcode.org/4063
quelle
Set-Constant
es in einem Modul enthalten ist. Es wird eine Konstante im Modulbereich erstellt, in der sieSet-Constant
enthalten ist. Als Workaround könnte man Parameter übergeben-Surround Global
, aber das ist nicht immer erwünscht. Ich möchte eine Konstante in einem anderen Modul oder lokal in einer Funktion erstellen.Verwendung
-option Constant
mit demSet-Variable
Cmdlet:Hat jetzt
$myvar
einen konstanten Wert von 100 und kann nicht geändert werden.quelle
Set-Variable
? Im Umgang mit Variablen kann man verwenden,[string]$name = value
aber das scheint für Konstanten nicht möglich zu sein?set-variable -name test -value ([int64]100) -option Constant
Um einen bestimmten Werttyp, z. B. Int64, zu verwenden, können Sie den in set-variable verwendeten Wert explizit umwandeln.
Zum Beispiel:
Überprüfen,
Und Sie werden sehen, dass es sich um ein Int64 handelt (und nicht um Int32, was für den Wert 100 normal wäre).
quelle
Ich mag den syntaktischen Zucker, den Robs Antwort liefert:
Leider funktioniert seine Lösung nicht wie erwartet, wenn Sie die
Set-Constant
Funktion in einem Modul definieren . Wenn es von außerhalb des Moduls aufgerufenSet-Constant
wird, wird anstelle des Bereichs des Aufrufers eine Konstante im Modulbereich erstellt, in der es definiert ist . Dies macht die Konstante für den Anrufer unsichtbar.Die folgende geänderte Funktion behebt dieses Problem. Die Lösung basiert auf dieser Antwort auf die Frage "Gibt es eine Möglichkeit für ein Powershell-Modul, in den Bereich seines Anrufers zu gelangen?" .
Anmerkungen:
Set-Variable -scope 1
sollte es funktionieren), wenn ich herausgefunden habe, wie das geht.-Mean
zu-Value
, für Konsistenz mitSet-Variable
.Private
,ReadOnly
undAllScope
Fahnen. Fügen Sie einfach die gewünschten Werte zum 3. Argument desPSVariable
Konstruktors hinzu , das im obigen Skript durch aufgerufen wirdNew-Object
.quelle
PowerShell v5.0 sollte dies zulassen
[statisch] [int] $ variable = 42
[statisch] [DateTime] $ heute
und dergleichen.
quelle