Câu trả lời:
Sử dụng
Set-Variable test -option Constant -value 100
hoặc là
Set-Variable test -option ReadOnly -value 100
Sự khác biệt giữa "Constant" và "ReadOnly" là một biến chỉ đọc có thể được loại bỏ (và sau đó được tạo lại) thông qua
Remove-Variable test -Force
trong khi đó một biến không đổi không thể được loại bỏ (ngay cả với -Force).
Xem bài viết này của TechNet để biết thêm chi tiết.
Set-Variable test -option Constant -value [string]100
([string]100)
. Xem câu trả lời dưới đây.
Đây là một giải pháp để xác định một hằng số như thế này:
const myConst = 42
Giải pháp được lấy từ http://posehcode.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
được chứa trong một mô-đun. Nó sẽ tạo ra một hằng số trong phạm vi mô-đun, nơi Set-Constant
chứa. Như một cách giải quyết, người ta có thể vượt qua tham số -Surround Global
, nhưng điều đó không phải lúc nào cũng muốn. Tôi muốn tạo một hằng trong một mô-đun khác hoặc cục bộ trong một hàm.
Sử dụng -option Constant
với Set-Variable
lệnh ghép ngắn:
Set-Variable myvar -option Constant -value 100
Bây giờ $myvar
có giá trị không đổi là 100 và không thể sửa đổi.
Set-Variable
? Khi xử lý các biến người ta có thể sử dụng [string]$name = value
nhưng dường như điều đó là không thể đối với các hằng số?
set-variable -name test -value ([int64]100) -option Constant
Để sử dụng một loại giá trị cụ thể, giả sử Int64, bạn có thể truyền rõ ràng giá trị được sử dụng trong biến set.
Ví dụ:
set-variable -name test -value ([int64]100) -option Constant
Để kiểm tra,
$test | gm
Và bạn sẽ thấy rằng đó là một Int64 (chứ không phải Int32, sẽ là bình thường đối với giá trị 100).
Tôi thực sự thích đường cú pháp mà câu trả lời của rob cung cấp:
const myConst = 42
Thật không may, giải pháp của anh ta không hoạt động như mong đợi khi bạn xác định Set-Constant
chức năng trong một mô-đun . Khi được gọi từ bên ngoài mô-đun, nó sẽ tạo ra một hằng số trong phạm vi mô-đun, nơi Set-Constant
được xác định, thay vì phạm vi của người gọi . Điều này làm cho hằng số vô hình cho người gọi.
Các chức năng sửa đổi sau đây khắc phục vấn đề này. Giải pháp dựa trên câu trả lời này cho câu hỏi "Có cách nào để mô-đun powershell có được trong phạm vi của người gọi không?" .
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
Ghi chú:
Set-Variable -scope 1
sẽ hoạt động), khi tôi đã tìm ra cách thực hiện.-Mean
thành -Value
, để thống nhất với Set-Variable
.Private
, ReadOnly
và AllScope
cờ. Chỉ cần thêm các giá trị mong muốn vào đối số thứ 3 của hàm PSVariable
tạo , được gọi trong tập lệnh trên thông qua New-Object
.PowerShell v5.0 nên cho phép
[tĩnh] [int] $ biến = 42
[tĩnh] [DateTime] $ ngày nay
và như thế.
Set-Variable
? Khi xử lý các biến người ta có thể sử dụng[string]$name = value
nhưng dường như điều đó là không thể đối với các hằng số?