Как установить переменную скрипта PowerShell из модуля? - PullRequest
0 голосов
/ 09 апреля 2019

Можно ли установить значение переменной с областью действия 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 Ответ

1 голос
/ 09 апреля 2019

Я понял это:

TestScope.psm1

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

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

Export-ModuleMember -Function *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...