답변:
사용하다
Set-Variable test -option Constant -value 100
또는
Set-Variable test -option ReadOnly -value 100
"Constant"와 "ReadOnly"의 차이점은 읽기 전용 변수는 다음을 통해 제거 (다시 생성) 할 수 있다는 것입니다.
Remove-Variable test -Force
상수 변수는 제거 할 수 없습니다 (-Force를 사용하더라도).
자세한 내용은 이 TechNet 문서 를 참조하십시오.
Set-Variable test -option Constant -value [string]100
([string]100)
. 아래 답변을 참조하십시오.
다음은 다음과 같이 상수를 정의하는 솔루션입니다.
const myConst = 42
에서 가져온 솔루션 http://poshcode.org/4063
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
모듈에 포함 된 경우 작동하지 않습니다 . Set-Constant
포함 된 모듈 범위에 상수를 생성합니다 . 해결 방법으로 parameter를 전달할 수 -Surround Global
있지만 항상 원하는 것은 아닙니다. 다른 모듈이나 함수에서 로컬로 상수를 만들고 싶습니다.
cmdlet -option Constant
과 함께 사용 Set-Variable
:
Set-Variable myvar -option Constant -value 100
이제 $myvar
상수 값이 100이고 수정할 수 없습니다.
Set-Variable
합니까? 변수를 다룰 때 사용할 수 [string]$name = value
있지만 상수에는 불가능한 것 같습니다.
set-variable -name test -value ([int64]100) -option Constant
나는 rob의 대답이 제공 하는 구문 설탕을 정말 좋아 합니다.
const myConst = 42
불행히도 그의 솔루션은 모듈 에서 Set-Constant
함수 를 정의 할 때 예상대로 작동하지 않습니다 . 모듈 외부 에서 호출 되면 호출자의 범위 대신가 정의 된 모듈 범위에 상수가 생성 됩니다.Set-Constant
. 이것은 호출자에게 상수를 보이지 않게합니다.
다음 수정 된 기능이이 문제를 해결합니다. 솔루션은 "Powershell 모듈이 호출자의 범위에 도달 할 수있는 방법이 있습니까?"라는 질문 에 대한 이 답변 을 기반으로 합니다. .
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
노트:
Set-Variable -scope 1
방법을 알아 냈을 때 작동해야하는지) .-Mean
하는 방법에 대해 -Value
일관성을 위해, Set-Variable
.Private
, ReadOnly
및 AllScope
플래그 를 선택적으로 설정하도록 함수를 확장 할 수 있습니다 . 위의 스크립트에서 호출되는 PSVariable
생성자 의 세 번째 인수에 원하는 값을 추가하기 만하면 됩니다 New-Object
.
Set-Variable
합니까? 변수를 다룰 때 사용할 수[string]$name = value
있지만 상수에는 불가능한 것 같습니다.