PowerShell은 상수를 지원합니까?
PowerShell에 정수 상수를 선언합니다.
그것을 할 수 있는 좋은 방법이 있을까요?
사용하다
Set-Variable test -Option Constant -Value 100
또는
Set-Variable test -Option ReadOnly -Value 100
"Constant"와 "ReadOnly"의 차이점은 읽기 전용 변수를 삭제(그 후 다시 생성)할 수 있다는 것입니다.
Remove-Variable test -Force
반면 상수 변수는 제거할 수 없습니다(-Force 사용 시에도).
자세한 내용은 이 TechNet 기사를 참조하십시오.
다음은 상수를 정의하는 솔루션입니다.
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
사용하다-option Constant
와 함께Set-Variable
cmdlet:
Set-Variable myvar -option Constant -value 100
지금이다$myvar
의 상수 값은 100이며 변경할 수 없습니다.
Int64와 같은 특정 유형의 값을 사용하려면 set-variable에서 사용되는 값을 명시적으로 캐스팅할 수 있습니다.
예:
set-variable -name test -value ([int64]100) -option Constant
체크하기 위해서
$test | gm
(Int32가 아닌) Int64임을 알 수 있습니다(값 100은 정상입니다).
롭의 답변이 주는 통사설탕은 정말 마음에 들어요.
const myConst = 42
유감스럽게도 그의 솔루션은 당신이 정의했을 때 예상대로 작동하지 않는다.Set-Constant
모듈 내에서 기능합니다.모듈 외부에서 호출하면 모듈 스코프에 상수가 생성됩니다.Set-Constant
는, 발신자의 범위가 아니고 정의됩니다.이것에 의해, 발신자에게는 상수가 표시되지 않게 됩니다.
다음 수정된 함수로 이 문제를 해결합니다.이 솔루션은 "powershell 모듈이 발신자의 범위에 도달할 수 있는 방법은 없습니까?"라는 질문에 대한 이 답변에 기초하고 있습니다.
$null = New-Module {
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] $Name,
[Parameter(Mandatory=$true, Position=1)] [char] [ValidateSet("=")] $Link,
[Parameter(Mandatory=$true, Position=2)] [object] $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
주의:
- 그
New-Module
다른 스코프 도메인(일명 세션스테이트)에서 호출된 경우만 이 함수가 기능하기 때문에 line이 존재합니다.실제 모듈 파일(.psm1)에 함수를 넣을 수는 있지만, 같은 모듈 내에서 사용할 수는 없습니다.인메모리 모듈을 사용하면 PowerShell 스크립트(.ps1)와 모듈 파일 모두에서 그대로 사용할 수 있습니다. - 파라미터의 이름을 변경했습니다.
-Mean
로.-Value
, 와의 정합성을 위해Set-Variable
. - 이 함수는 확장되어 옵션으로 설정될 수 있습니다.
Private
,ReadOnly
그리고.AllScope
원하는 값을 생성자의 세 번째 인수에 추가합니다. 이 인수는 위의 스크립트에서 호출됩니다.New-Object
.
PowerShell v5.0에서는
[ static ] [int ]$140 = 42
[static] [Date Time]$ thisday
뭐 이런 거.
언급URL : https://stackoverflow.com/questions/2608215/does-powershell-support-constants
'programing' 카테고리의 다른 글
Scope_Identity(), Identity(), @@Identity 및 Ident_Current()의 차이점은 무엇입니까? (0) | 2023.04.08 |
---|---|
SQL Server에 데이터베이스가 있는지 확인하는 방법 (0) | 2023.04.08 |
Get-Child Item을 사용하여 디렉토리만 가져오려면 어떻게 해야 합니까? (0) | 2023.04.08 |
개체 'DF__*'이(가) '*' 열에 종속됨 - int를 이중으로 변경 (0) | 2023.04.08 |
현재 PowerShell 스크립트의 위치를 확인하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.08 |