ฉันต้องการประกาศค่าคงที่จำนวนเต็มใน PowerShell
มีวิธีใดที่ดีในการทำเช่นนั้น?
ฉันต้องการประกาศค่าคงที่จำนวนเต็มใน PowerShell
มีวิธีใดที่ดีในการทำเช่นนั้น?
คำตอบ:
ใช้
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
มีอยู่ ในฐานะที่เป็นวิธีแก้ปัญหาเราสามารถส่งผ่านพารามิเตอร์-Surround Global
ได้ แต่ก็ไม่ต้องการเสมอไป ฉันต้องการสร้างค่าคงที่ในโมดูลอื่นหรือในฟังก์ชัน
ใช้-option Constant
กับSet-Variable
cmdlet:
Set-Variable myvar -option Constant -value 100
ตอนนี้$myvar
มีค่าคงที่ 100 และไม่สามารถแก้ไขได้
Set-Variable
อย่างไรเมื่อใช้? เมื่อจัดการกับตัวแปรอาจใช้[string]$name = value
แต่ดูเหมือนว่าจะไม่เป็นไปได้สำหรับค่าคงที่?
set-variable -name test -value ([int64]100) -option Constant
หากต้องการใช้ค่าประเภทใดประเภทหนึ่งให้พูดว่า Int64 คุณสามารถแคสต์ค่าที่ใช้ในตัวแปรชุดได้อย่างชัดเจน
ตัวอย่างเช่น:
set-variable -name test -value ([int64]100) -option Constant
เพื่อตรวจสอบ,
$test | gm
และคุณจะเห็นว่าเป็น Int64 (แทนที่จะเป็น Int32 ซึ่งจะเป็นปกติสำหรับค่า 100)
ฉันชอบน้ำตาลวากยสัมพันธ์ที่คำตอบของ 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
ธง เพียงแค่เพิ่มค่าที่ต้องการอาร์กิวเมนต์ที่ 3 ของPSVariable
คอนสตรัคNew-Object
ซึ่งเรียกว่าในสคริปต์ข้างต้นผ่านPowerShell v5.0 ควรอนุญาต
[คงที่] [int] $ variable = 42
[คงที่] [DateTime] $ thisday
และชอบ
Set-Variable
อย่างไรเมื่อใช้? เมื่อจัดการกับตัวแปรอาจใช้[string]$name = value
แต่ดูเหมือนว่าจะไม่เป็นไปได้สำหรับค่าคงที่?