Загрузить переменные из другого скрипта PowerShell

У меня есть несколько скриптов, которые могут повторно использовать переменные, поэтому я хотел бы изолировать переменные в их собственном скрипте Variables.ps1, т.е.

$var1 = "1"
$var2 = "2"

Я пытаюсь загрузить эти переменные, а затем распечатать их в сценарии Main.ps1 следующим образом:

.\Variables.ps1
$var1
$var2

Это работает, если я сначала запускаю. \ Variables.ps1, но не работает, если я просто запускаю Main.ps1. Моя среда - это PowerShell ISE. Что я делаю неправильно?


person Greg    schedule 08.12.2009    source источник


Ответы (3)


Переменные, объявленные в Variables.ps1, находятся в «Области действия сценария». То есть вы не можете увидеть их за пределами объявляющего их скрипта. Один из способов перенести переменные в Variables.ps1 в область main.ps1 - это "точечный источник" Variables.ps1. Это, по сути, запускает Variables.ps1 в рамках main.ps1. Для этого просто поставьте точку и пробел перед вызовом скрипта:

. .\Variables.ps1
$var1
$var2
person zdan    schedule 08.12.2009
comment
полностью согласен с этим решением, в моем случае я столкнулся с небольшой проблемой с путем к файлу, хотя все файлы были в одном каталоге, мне пришлось добавить абсолютный путь к файлу, поскольку разные пользователи должны были иметь возможность его выполнить, так что это что-то нравится: . ./absolute/path/to/file/Variables.ps1 - person T.J.; 17.06.2020

# var.ps1
$Global:var1 = "1"
$Global:var2 = "2"

Это работает. Лучше это или хуже, чем "точечный поиск", вероятно, зависит от ваших конкретных требований.

PS > .\var.ps1
PS > $var1
1
PS > $var2
2
PS >
person dan-gph    schedule 08.12.2009

Просто чтобы убедиться в правильности ... попробуйте это ... в main.ps1

echo "Test"
. .\Variables.ps1
echo $var1
echo $var2
person Shankar R10N    schedule 08.12.2009
comment
Я вижу только результат теста. - person Greg; 08.12.2009
comment
Именно то, что упоминает пользователь zdan! - person Shankar R10N; 08.12.2009