Если вы используете -Option Constant
, вы говорите PowerShell, что результирующая переменная не должна разрешать последующее изменение .
Следовательно, повторный запуск Set-Variable
с тем же именем переменной приводит кв ошибке.
При этом, , вы увидите этот симптом только в том случае, если ваш сценарий имеет «точечный источник», т. е. выполняется непосредственно в области действия вызывающего , что означает, что повторные вызовы видятопределения, оставленные предыдущими вызовами.
В некоторых средах неявно выполняют "точечный источник" - в частности, PowerShell ISE и - как в вашем случае - код Visual Studio с расширением PowerShell.
Простой обходной путь - добавить -ErrorAction Ignore
к вашему вызову Set-Variable
, учитывая, что справедливо предположить, что единственной возможной причиной сбоя является переопределение константы.
В целом, в таких средах, как PowerShell ISE и Visual Studio Code , следует помнить, что данный сценарийВ результате вызова могут остаться определения, которые влияют на последующие вызовы.
В отличие от этого, не вызывает беспокойство при повторном вызове сценария из консоли PowerShell / терминал окно , потому что сценарии там выполняются в дочерней области.
mhhollomon запрашивает использование Модификаторы области , такие как $script:...
, будут работать:
Нет, потому что в глобальной области, в которой сценарии выполняются в коде Visual Studio, область действия $script:...
(Set-Variable -Scope Script ...
)является такой же областью действия, т. е. также глобальной областью действия.
Если вы действительно хотите явно убедиться, что ваш скрипт не изменяет вызывающую область, даже если она имеет "точечный источник", выможет обернуть все содержимое скрипта в & { ... }
, чтобы обеспечить выполнение в дочерней области.