Chciałbym zadeklarować pewne stałe całkowite w PowerShell.
Czy jest na to dobry sposób?
powershell
constants
Tom Hazel
źródło
źródło
Set-Variable
? Kiedy mamy do czynienia ze zmiennymi, można użyć,[string]$name = value
ale wydaje się, że nie jest to możliwe w przypadku stałych?Set-Variable test -option Constant -value [string]100
([string]100)
. Zobacz odpowiedzi poniżej.Oto rozwiązanie umożliwiające zdefiniowanie stałej w następujący sposób:
Rozwiązanie pobrane z http://poshcode.org/4063
źródło
Set-Constant
jest zawarty w module. Utworzy stałą w zakresie modułu, w którymSet-Constant
jest zawarta. Aby obejść ten problem, można przekazać parametr-Surround Global
, ale nie zawsze jest to pożądane. Chciałbym utworzyć stałą w innym module lub lokalnie w funkcji.Użyj
-option Constant
zSet-Variable
cmdletem:Teraz
$myvar
ma stałą wartość 100 i nie można jej modyfikować.źródło
Set-Variable
? Kiedy mamy do czynienia ze zmiennymi, można użyć,[string]$name = value
ale wydaje się, że nie jest to możliwe w przypadku stałych?set-variable -name test -value ([int64]100) -option Constant
Aby użyć określonego typu wartości, na przykład Int64, możesz jawnie rzutować wartość używaną w ustawionej-zmiennej.
Na przykład:
Sprawdzić,
Zobaczysz, że jest to Int64 (zamiast Int32, co byłoby normalne dla wartości 100).
źródło
Bardzo podoba mi się cukier składniowy, który zapewnia odpowiedź Roba:
Niestety jego rozwiązanie nie działa zgodnie z oczekiwaniami, gdy definiujesz
Set-Constant
funkcję w module . W przypadku wywołania spoza modułu, utworzy stałą w zakresie modułu, gdzieSet-Constant
jest zdefiniowana, zamiast zakresu wywołującego . To sprawia, że stała jest niewidoczna dla dzwoniącego.Następująca zmodyfikowana funkcja rozwiązuje ten problem. Rozwiązanie opiera się na tej odpowiedzi na pytanie „Czy istnieje sposób, aby moduł PowerShell znalazł się w zasięgu osoby dzwoniącej?” .
Uwagi:
Set-Variable -scope 1
powinien działać), gdy dowiem się, jak to zrobić.-Mean
na-Value
, aby zachować spójność zSet-Variable
.Private
,ReadOnly
iAllScope
niepokój. Po prostu dodaj żądane wartości do trzeciego argumentuPSVariable
konstruktora , który jest wywoływany w powyższym skrypcie throughNew-Object
.źródło
Program PowerShell w wersji 5.0 powinien umożliwiać
[statyczny] [int] $ zmienna = 42
[statyczny] [DateTime] $ thisday
i tym podobne.
źródło