【问题标题】:Powershell: Remove Module does not unload global [constant] variables defined in a nested modulePowershell:删除模块不会卸载嵌套模块中定义的全局[常量]变量
【发布时间】:2012-04-25 17:04:33
【问题描述】:

我有一个模块清单文件 [.psd1 文件],我通过它导入 嵌套模块 [.psm1 文件]。其中一个模块 [.psm1] 文件在全局范围内定义了一个 constant 变量,如下所示 -

set-variable -name DataDirectory -option Constant -value "DataSources" -scope global -description "Data Directory"

当我对 psd1 文件执行 remove-module 然后再次尝试在 Powershell ISE 的同一会话中执行 import-module 时,我得到以下信息错误 -

+ set-variable <<<<  -name DataDirectory -option Constant -value "DataSources" -scope global -description "Data Directory"
    + CategoryInfo          : WriteError: (DataDirectory:String) [Set-Variable], SessionStateUnauthorizedAccessException
    + FullyQualifiedErrorId : VariableNotWritable,Microsoft.PowerShell.Commands.SetVariableCommand

这意味着在其中一个嵌套模块中定义的变量尚未卸载。

我必须明确做一个 remove-variable 吗?我认为 remove-module 会卸载所有内容

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    Remove-Module 将卸载模块范围内定义的所有内容。只有定义变量的模块才能删除它。卸载模块时不会删除全局变量。此外,在模块范围之外,您不能使用Remove-Variable 删除常量变量。您可以尝试的一件事是在尝试创建变量之前测试该变量是否已经存在。

    【讨论】:

    • 你说 - 只有定义变量的模块才能删除它。我怎样才能做到这一点?
    • 不要把它定义为全局,它必须在模块范围内定义,只需删除全局修饰符。如果你这样做了,你必须找到另一个解决方案,以便其他模块可以访问它
    猜你喜欢
    • 2010-11-23
    • 2016-02-10
    • 1970-01-01
    • 2021-06-26
    • 2015-01-02
    • 1970-01-01
    • 2016-10-20
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多