Saya ingin mendeklarasikan beberapa konstanta integer di PowerShell.
Apakah ada cara yang baik untuk melakukan itu?
powershell
constants
Tom Hazel
sumber
sumber
Set-Variable
? Ketika berurusan dengan variabel, seseorang dapat menggunakan[string]$name = value
tetapi tampaknya tidak mungkin untuk konstanta?Set-Variable test -option Constant -value [string]100
([string]100)
. Lihat jawaban di bawah.Berikut adalah solusi untuk mendefinisikan konstanta seperti ini:
Solusi diambil dari http://poshcode.org/4063
sumber
Set-Constant
ada di dalam modul. Ini akan membuat konstanta dalam ruang lingkup modul, di manaSet-Constant
terkandung. Sebagai solusinya, seseorang dapat mengirimkan parameter-Surround Global
, tetapi itu tidak selalu diinginkan. Saya ingin membuat konstanta di modul lain atau secara lokal dalam suatu fungsi.Gunakan
-option Constant
denganSet-Variable
cmdlet:Sekarang
$myvar
memiliki nilai konstan 100 dan tidak dapat dimodifikasi.sumber
Set-Variable
? Ketika berurusan dengan variabel, seseorang dapat menggunakan[string]$name = value
tetapi tampaknya tidak mungkin untuk konstanta?set-variable -name test -value ([int64]100) -option Constant
Untuk menggunakan jenis nilai tertentu, katakanlah Int64, Anda dapat secara eksplisit mentransmisikan nilai yang digunakan dalam variabel set.
Misalnya:
Untuk memeriksa,
Dan Anda akan melihat bahwa itu adalah Int64 (bukan Int32, yang akan menjadi normal untuk nilai 100).
sumber
Saya sangat suka gula sintaksis yang diberikan oleh jawaban rob :
Sayangnya solusinya tidak berfungsi seperti yang diharapkan saat Anda mendefinisikan
Set-Constant
fungsi dalam modul . Ketika dipanggil dari luar modul, itu akan membuat konstanta dalam lingkup modul, di manaSet-Constant
ditentukan, bukan lingkup pemanggil . Ini membuat konstanta tidak terlihat oleh pemanggil.Fungsi modifikasi berikut memperbaiki masalah ini. Solusinya didasarkan pada jawaban atas pertanyaan "Apakah ada cara bagi modul PowerShell untuk menjangkau cakupan pemanggilnya?" .
Catatan:
Set-Variable -scope 1
seharusnya berfungsi), ketika saya telah menemukan cara melakukannya.-Mean
menjadi-Value
, untuk konsistensi denganSet-Variable
.Private
,ReadOnly
dan secara opsionalAllScope
. Cukup tambahkan nilai yang diinginkan ke argumen ke-3 dariPSVariable
konstruktor , yang dipanggil dalam skrip di atas melaluiNew-Object
.sumber
PowerShell v5.0 seharusnya mengizinkan
[statis] [int] $ variabel = 42
[Statis] [DateTime] $ thisday
dan sejenisnya.
sumber