【问题标题】:How to set a PowerShell script variable from a module?如何从模块设置 PowerShell 脚本变量?
【发布时间】:2019-04-09 03:36:18
【问题描述】:

是否可以从模块(.psm1 文件)中设置具有script 范围的变量的值?以下内容不起作用,因为根据我的阅读,模块中的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 范围不是一个选项,因为它会更改状态(脚本退出后会挂起在脚本启动时不存在的全局变量)。

【问题讨论】:

    标签: powershell variables module scope


    【解决方案1】:

    我想通了:

    TestScope.psm1

    function Initialize-TestVariable {
        [CmdletBinding()]
        param (
            [string]
            $Name
        )
    
        $PSCmdlet.SessionState.PSVariable.Set($Name, "Set in module")
    }
    
    Export-ModuleMember -Function *
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      相关资源
      最近更新 更多