Переменные в powershell являются контекстно-зависимыми. Если я определю функцию как:
$bar = "Hi"
function foo {
$bar = "Hey!"
}
$bar <-- returns "Hi"
Тогда переменная $ bar недоступна для меня вне этой функции. Чтобы сделать переменные доступными вне функций, вы можете контролировать область действия функции. Если я установлю переменную в функции, используя скрипт или глобальный префикс, тогда переменная будет доступна для всего скрипта или глобально в пространстве выполнения powershell. Смотрите здесь:
function foo {
$script:fooVar = "world"
}
function bar {
foo
$global:barVar = "Hello " + $fooVar
}
Переменная $ fooVar в функции foo будет доступна всем другим функциям в сценарии благодаря сценарию префикса области действия переменной $ fooVar. Функция barVar будет доступна глобально в пространстве выполнения. То есть когда ваш сценарий завершен, переменная все еще присутствует в командной строке и даже в других сценариях.
Как вы можете видеть в функции bar, я сначала вызываю foo, а затем использую переменную foovVar. Когда я использую переменную $ fooVar, мне не нужно указывать $ script: fooVar, я могу, если захочу, но это не обязательно.
Это все допустимые переменные:
$aaa = 123
$script:bbb = 123
$global:ccc = 123
Так что в вашем случае используйте $ script: source и $ script: target или $ global: source и $ global: target. Для получения дополнительной информации выполните следующую команду:
Help About_Scope