如何在PowerShell中创建全局常量变量

乔普
## 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允许更改值。

有没有办法创建一个真正的全局常量?

背景:

我有一个主脚本。主脚本加载了一些模块。在所有模块中以及在主脚本中,我需要一些固定的文件和注册表路径。因此,我想将这些路径声明为全局常量。

安斯加·威彻斯(Ansgar Wiechers)

全局变量$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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章