【问题标题】:Variables in modules in PowerShellPowerShell 模块中的变量
【发布时间】:2013-01-04 13:18:26
【问题描述】:

我有一个主脚本,其中定义了一些常量。然后我有一个模块(psm1)来包含辅助函数。详情如下:

在主脚本中,我已将模块作为对象导入:

$cud2ADhleper = Import-Module -Force $cud2ADhelperModule -AsCustomObject

在模块中,我有两个变量,

[string]$SQLServer = $null

Function SetSQLServerAddr ([string] $name)
{
    $SQLServer = $name
}
Function GetSQLServerAddr
{
    return $SQLServer
}

我的理解是因为我没有从模块中导出$SQLServer,所以这个变量应该是本地的,我应该可以设置/获取它。

事实证明并非如此。在我调用SetSQLServerAddr ([string] $name) 之后,调用GetSQLServerAddr 返回$null。我错过了什么?

【问题讨论】:

    标签: powershell module


    【解决方案1】:
    Function SetSQLServerAddr ([string] $name)
    {
        $SQLServer = $name
    }
    

    这会在该函数的范围内创建一个新的本地 $SQLServer

    如果您想在模块 (.psm1) 范围内更新变量,则需要在名称前加上前缀以表明:

    Function SetSQLServerAddr ([string] $name)
    {
        $script:SQLServer = $name
    }
    

    有关范围的更多信息,请参阅get-help about_scopes

    【讨论】:

    • 我一直在寻找并阅读了 about_scopes,但我仍然不清楚模块中定义的变量是否可以使用模块内函数中的脚本范围来设置。脚本范围听起来像是在模块的上下文中用词不当,应该称为模块范围或类似的名称。谢谢你的回答!
    • @ChrisMagnuson 我同意这个名字不是很好,但它确实有意义(与“正常”脚本的相关区别是模块状态在返回给调用者后仍然存在)。
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多