32

我有一个主脚本,其中定义了一些常量。然后我有一个模块(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。我错过了什么?

4

1 回答 1

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

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

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

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

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

于 2013-01-21T13:47:41.657 回答