У меня возникают некоторые проблемы с областью действия при создании сценариев 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 до того, как это произойдет, мы все равно можем увидеть выходные данные функции Write-Version B.
Вопрос, конечно, как это предотвратить ?? Я пробовал различные варианты области видимости, но, похоже, это не работает при точечном поиске. А так как в B.ps1 есть функции, которые мне нужны в области видимости A., просто вызвать B.ps1, вероятно, не вариант.
У кого-нибудь есть идеи?