是否可以从模块(script
文件)中使用.psm1
范围设置变量的值?以下内容不起作用,因为根据我的阅读,模块中的script
范围实际上不是script
范围。
TestScope.psm1
function Initialize-TestVariable {
param (
[string]
$Name
)
$scope = "Script"
$visibility = "Public"
Set-Variable -Scope $scope -Name $Name -Value "Set in module" -Force -Visibility $visibility
}
Export-ModuleMember -Function *
TestScope.ps1
param (
[string]
$Value = "Default value"
)
$path = Join-Path (Split-Path -Path $PSCommandPath -Parent) 'TestScope.psm1'
Import-Module $path -ErrorAction Stop
Initialize-TestVariable -Name "Value"
$Value
输出
Default value
我需要输出为:
Set in module
如果有人想知道为什么我需要这样做,那是有道理的(因此,我对讨论是否是一个好主意不感兴趣,只需要知道是否可以这样做,以及,如果可以,如何) 。另外,也不选择使用global
范围,因为它会改变状态(脚本退出后脚本退出后会挂起全局变量,而全局变量会在脚本启动时不存在)。
答案 0 :(得分:1)
我知道了:
TestScope.psm1
function Initialize-TestVariable {
[CmdletBinding()]
param (
[string]
$Name
)
$PSCmdlet.SessionState.PSVariable.Set($Name, "Set in module")
}
Export-ModuleMember -Function *