Не только переменные.Когда это говорит «элемент», это означает переменные, функции, псевдонимы и psdrives.Все они имеют область действия.
LONG DESCRIPTION
Windows PowerShell protects access to variables, aliases, functions, and
Windows PowerShell drives (PSDrives) by limiting where they can be read and
changed. By enforcing a few simple rules for scope, Windows PowerShell
helps to ensure that you do not inadvertently change an item that should
not be changed.
The following are the basic rules of scope:
- An item you include in a scope is visible in the scope in which it
was created and in any child scope, unless you explicitly make it
private. You can place variables, aliases, functions, or Windows
PowerShell drives in one or more scopes.
- An item that you created within a scope can be changed only in the
scope in which it was created, unless you explicitly specify a
different scope.
Проблема копирования при записи возникает из-за способа, которым Powershell обрабатывает массивы.Добавление к этому массиву фактически уничтожает исходный массив и создает новый.Поскольку он был создан в этой области, он уничтожается при выходе из блока функции или скрипта и удалении области.
Вы можете явно изменять области видимости переменных при их обновлении, или вы можете использовать объекты [ref] для выполнения ваших обновлений или писать свой сценарий так, чтобы вы обновляли свойство объекта или ключ хеш-таблицыобъект или хеш-таблица в родительской области видимости.Это не создает новый объект в локальной области, оно изменяет объект в родительской области.