Столкновение областей применения PowerShell при точечной обработке скриптов

У меня возникли проблемы с областью действия при точечном копировании сценариев powershell. Предположим, у меня есть один скрипт 'A.ps1':

$VERSION = "1.0"

# Dot source B.ps1
. .\B.ps1

function Write-Version { Write-Host "A.ps1 version $VERSION" }
Write-Version

И скрипт B.ps1

$VERSION = "2.0"
function Write-Version { Write-Host "B.ps1 version $VERSION" }
Write-Version

Результатом выполнения A.ps1 будет:

B.ps1 version 2.0
A.ps1 version 2.0

Почему так происходит, вполне очевидно. Переменная $VERSION из B.ps1 попадает в область видимости A.ps1 и перезаписывает эту переменную. Действительно, это происходит и с Write-Version, но здесь A.ps1 перезаписывает версию B, но поскольку Write-Version вызывается в B.ps1 до того, как это произойдет, мы все еще можем видеть вывод функции B's Write-Version.

Вопрос, конечно, в том, как это предотвратить? Я пробовал различные варианты области видимости, но, похоже, это не работает при точечном копировании. И поскольку в B.ps1 есть функции, которые мне нужны в области видимости A, просто вызвать B.ps1, вероятно, не вариант.

Есть ли у кого-нибудь идеи?

5
задан wensveen 16 December 2011 в 08:47
поделиться