回答:
使用する
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
、それは常に望まれるわけではありません。別のモジュールまたは関数のローカルで定数を作成したいと思います。
コマンドレットで使用-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
ロブの答えが提供する構文糖が本当に好きです:
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
コンストラクタの 3番目の引数に必要な値を追加するだけNew-Object
です。
Set-Variable
ますか?変数を扱うときに使用すること[string]$name = value
ができますが、それは定数では可能ではないようです?