如何通过模块设置PowerShell脚本变量?

时间:2019-04-09 03:36:18

标签: powershell variables module scope

是否可以从模块(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范围,因为它会改变状态(脚本退出后脚本退出后会挂起全局变量,而全局变量会在脚本启动时不存在)。

1 个答案:

答案 0 :(得分:1)

我知道了:

TestScope.psm1

function Initialize-TestVariable {
    [CmdletBinding()]
    param (
        [string]
        $Name
    )

    $PSCmdlet.SessionState.PSVariable.Set($Name, "Set in module")
}

Export-ModuleMember -Function *