Yanıtlar:
kullanım
Set-Variable test -option Constant -value 100
veya
Set-Variable test -option ReadOnly -value 100
"Sabit" ve "Salt Okunur" arasındaki fark, salt okunur bir değişkenin şu yolla kaldırılabilmesidir (ve sonra yeniden oluşturulabilir)
Remove-Variable test -Force
oysa sabit bir değişken kaldırılamaz (-Force ile bile).
Daha fazla ayrıntı için bu TechNet makalesine bakın.
Set-Variable test -option Constant -value [string]100
([string]100)
. Aşağıdaki cevaplara bakın.
İşte böyle bir sabiti tanımlamak için bir çözüm:
const myConst = 42
Http://poshcode.org/4063 adresinden alınan çözüm
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
Set-Constant
bir modülün içindeyken çalışmaz . Modül kapsamında bulunduğu yerde bir sabit oluşturacaktır Set-Constant
. Geçici bir çözüm olarak parametre geçilebilir -Surround Global
, ancak bu her zaman istenmez. Başka bir modülde veya bir fonksiyonda yerel olarak bir sabit oluşturmak istiyorum.
Cmdlet -option Constant
ile kullanın Set-Variable
:
Set-Variable myvar -option Constant -value 100
Artık $myvar
100 sabit değerine sahip ve değiştirilemez.
Set-Variable
? Değişkenlerle uğraşırken kullanılabilir, [string]$name = value
ancak bu sabitler için mümkün görünmüyor mu?
set-variable -name test -value ([int64]100) -option Constant
Belirli bir değer türü kullanmak için, örneğin Int64, set değişkeninde kullanılan değeri açıkça çevirebilirsiniz.
Örneğin:
set-variable -name test -value ([int64]100) -option Constant
Kontrol etmek,
$test | gm
Ve bunun bir Int64 olduğunu göreceksiniz (100 değeri için normal olan Int32 yerine).
Soygunun cevabının sağladığı sözdizimsel şekeri gerçekten seviyorum :
const myConst = 42
Ne yazık ki, Set-Constant
bir modülde işlevi tanımladığınızda çözümü beklendiği gibi çalışmıyor . Modül dışından çağrıldığında, modül kapsamında arayanın kapsamıSet-Constant
yerine tanımlandığı yerde bir sabit oluşturacaktır. . Bu, sabit olanı arayan için görünmez hale getirir.
Aşağıdaki değiştirilmiş işlev, bu sorunu giderir. Çözüm, "Bir powershell modülünün arayanın kapsamına girmesinin herhangi bir yolu var mı?" Sorusuna verilen bu cevaba dayanmaktadır. .
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()] $Value
)
$var = New-Object System.Management.Automation.PSVariable -ArgumentList @(
$Name, $Value, [System.Management.Automation.ScopedItemOptions]::Constant
)
$PSCmdlet.SessionState.PSVariable.Set( $var )
}
Set-Alias const Set-Constant
Notlar:
Set-Variable -scope 1
nasıl yapılacağını öğrendiğimde işe yaramalı).-Mean
olarak yeniden adlandırdım .-Value
Set-Variable
Private
, ReadOnly
ve AllScope
bayrakları. Basitçe 3. argüman istenen değerleri ekleyin PSVariable
yapıcı yoluyla yukarıdaki komut denir New-Object
.PowerShell v5.0 izin vermelidir
[statik] [int] $ değişken = 42
[statik] [DateTime] $ bugün
ve benzerleri.
Set-Variable
? Değişkenlerle uğraşırken kullanılabilir,[string]$name = value
ancak bu sabitler için mümkün görünmüyor mu?