PowerShell中的模块中的变量

use*_*880 28 powershell module

我有一个主脚本,其中定义了一些常量.然后我有一个模块(psm1)来包含辅助函数.细节是:

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

$cud2ADhleper = Import-Module -Force $cud2ADhelperModule -AsCustomObject
Run Code Online (Sandbox Code Playgroud)

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

[string]$SQLServer = $null

Function SetSQLServerAddr ([string] $name)
{
    $SQLServer = $name
}
Function GetSQLServerAddr
{
    return $SQLServer
}
Run Code Online (Sandbox Code Playgroud)

我的理解是因为我没有$SQLServer从模块导出,这个变量应该是本地的,我应该能够设置/获取它.

事实证明不然.在我调用之后SetSQLServerAddr ([string] $name),然后callling GetSQLServerAddr返回$ null.我错过了什么?

Ric*_*ard 38

Function SetSQLServerAddr ([string] $name)
{
    $SQLServer = $name
}
Run Code Online (Sandbox Code Playgroud)

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

如果要在module(.psm1)范围更新变量,则需要在名称前添加前缀以指示:

Function SetSQLServerAddr ([string] $name)
{
    $script:SQLServer = $name
}
Run Code Online (Sandbox Code Playgroud)

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

  • @ChrisMagnuson 我同意这个名字并不好,但它确实有意义(与“正常”脚本的相关区别是模块状态在返回到调用者后仍然存在)。 (2认同)