2013-01-21 76 views
22

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

在主脚本,我已导入模块的对象:

$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。我错过了什么?

回答

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

这造成在该函数的范围新本地$SQLServer

如果你想在模块更新变量(.psm1)范围,那么你需要前缀名称,以表明:

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

更多关于示波器看get-help about_scopes

+0

我一直在寻找并阅读about_scopes,但仍然不清楚模块中定义的变量是否可以使用模块中函数的脚本范围来设置。脚本范围听起来像是在模块上下文中使用不当,应称为模块范围或类似的东西。谢谢您的回答! –

+1

@ChrisMagnuson我同意这个名字不是很好,但它确实有意义(与“普通”脚本相关的区别在于模块状态在返回给调用者后仍然存在)。 – Richard