是否可以强制一个模块中的功能遵循其他模块上变量的只读设置?

时间:2019-05-17 10:20:48

标签: powershell variables module scope

您好,想想这种情况。您有2个定义如下的Powershell模块。 如果将它们导入控制台(只需在控制台中运行代码),就可以使用变量test,但不能对其进行修改(预期行为)。但是第二个模块中的功能changeVariable不支持只读设置,并且在内部可以通过变量测试执行任何所需的操作。

第一个模块:

New-Module {
New-Variable test -Value "test" -Option AllScope, Constant -Force -Scope global

Export-ModuleMember -Variable *
}

第二个模块:

New-Module {
function changeVariable {
    $test = "someString" # this should end with error, that variable cannot be changed 
    $test
}

Export-ModuleMember -Function *
}

那么有可能在powershell中创建全局不可修改的变量吗?

1 个答案:

答案 0 :(得分:1)

第二个模块未从全局范围访问compile "org.apache.spark:spark-core_2.11:2.1.0.cloudera1@jar" 变量。它正在从函数的作用域访问变量。您需要指出它是一个全局变量。一种实现方法是使用$test范围修饰符。

global

还有其他可以与New-Module { function changeVariable { $global:test = "someString" # this should end with error, that variable cannot be changed $global:test } Export-ModuleMember -Function * } 语法一起使用的范围。参见About Scopes