## My try to create a global constant
Set-Variable -Name c -Value "x" -Option Constant -Scope Global -Force
Write-Host $c ## -> x
$c = "y" ## -> WriteError: (C:String) [], SessionStateUnauthorizedAccessException
## -> VariableNotWritable
Write-Host $c ## -> x
function test {
Write-Host $c ## -> x
$c = "xxxx"
Write-Host $c ## -> xxxx
}
test
我的变量$c
是全局可访问的,但并非在所有情况下都是恒定的。尝试更改函数内部的值test()
,PowerShell允许更改值。
有没有办法创建一个真正的全局常量?
背景:
我有一个主脚本。主脚本加载了一些模块。在所有模块中以及在主脚本中,我需要一些固定的文件和注册表路径。因此,我想将这些路径声明为全局常量。
在全局变量$c
保持不变,但分配$c = "xxxx"
另一个本地变量$c
定义,是以新的价值,掩盖了当地环境的全局变量。
示范:
PS C:\>设置变量-名称c-值“ x”-选项常量-作用域全局-Force PS C:\>功能测试{ >> Get-Variable -Name c -Scope Global >> Get-Variable -Name c -Scope Local >> $ c =“ xxxx” >> Get-Variable -Name c -Scope Global >> Get-Variable -Name c -Scope Local >> } >> PS C:\> test Name值 - ------ cx Get-Variable:找不到名称为'c'的变量。 在第3行: + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo:ObjectNotFound:(c:String)[Get-Variable], ItemNotFoundException + FullyQualifiedErrorId:VariableNotFound,Microsoft.PowerShell.Commands.GetVariableCommand cx c xxxx
第一次Get-Variable -Name c -Scope Local
调用失败,因为还没有$c
定义局部变量。
可以通过在变量/常量前面加上正确的范围来避免此问题:
PS C:\>设置变量-名称c-值“ x”-选项常量-作用域全局-强制 PS C:\>函数测试{ >> $ global: c >> $ global: c =“ xxxx” >> $ global: c >> } >> PS C:\> test x 无法覆盖变量c,因为它是只读或常量。 在第3行:char:5 + $ global:c =“ xxxx” + ~~~~~~~~~~~~~~~~~ + CategoryInfo:WriteError:(c:String)[],SessionStateUnauthorizedAccessException + FullyQualifiedErrorId:
或通过定义所有范围的常量:
PS C:\>设置变量-名称c-值“ x”-选项常量,AllScope -Force PS C:\>功能测试{ >> $ c >> $ c =“ xxxx” >> $ c >> } >> PS C:\> test x 无法覆盖变量c,因为它是只读或常量。 在第3行:char:5 + $ c =“ xxxx” + ~~~~~~~~~~~ + + CategoryInfo:WriteError:(c:String)[],SessionStateUnauthorizedAccessException + FullyQualifiedErrorId:VariableNotWritable x
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句