У меня есть модуль и скрипт, который запускает простые пользовательские скрипты.Я хочу, чтобы пользовательский сценарий был максимально простым, и поэтому я использую Import-Module
с флагом -Global
.У меня проблема с модулем «закрытая» переменная.В моем случае у меня есть 2 копии этой переменной.Можно ли получить только одну копию?
Ниже приведен простой пример.Вы можете запустить, поместив 3 файла в одну папку и выполнив ScriptRunner.ps1
.
Module.psm1
function Invoke-UserScript
{
param($Path)
$Script:UserScriptFailed = $false
& $Path
return $Script:UserScriptFailed
}
function New-Something
{
$Script:UserScriptFailed = $true
}
function Write-Var
{
Write-Host "Write-Var output: $Script:UserScriptFailed"
}
Export-ModuleMember -Function Invoke-UserScript
Export-ModuleMember -Function New-Something
Export-ModuleMember -Function Write-Var
ScriptRunner.ps1
Set-Location $PSScriptRoot
Import-Module -Name (Resolve-Path '.\Module.psm1') -Global
$failed = Invoke-UserScript -Path '.\UserScript.ps1'
Write-Output "ScriptRunner output: $failed"
UserScript.ps1
New-Something
Write-Var
В моем примере функция New-Something
устанавливает UserScriptFailed
в $true
.Но как только UserScript.ps1
заканчивается, ScriptRunner.ps1
видит $false
значение.
Вывод:
Write-Var output: True
ScriptRunner output: False