З https://technet.microsoft.com/en-us/library/hh847849.aspx
Елемент, створений вами в межах області, може бути змінений лише в тій області, в якій він був створений, якщо ви прямо не вказали іншу область.
так що ви можете використовувати його $Global:x = ...
для встановлення.
Сценарії Powershell часто копіюються та вставляються в блоки для реалізації функціональності, і часто методи написані для використання у кількох сценаріях. Обмежуючи присвоєння визначеній області для змінної, ви гарантуєте, що навіть якщо два вставлені блоки коду використовують одне і те ж ім'я змінної, вони не можуть неналежним чином змінити дані, від яких залежить інший блок, не чітко заявляючи, що вони цього хочуть. Це допомагає зробити блоки більш модульними, а також виявити ненавмисні зіткнення імен.
Редагувати:
примітка про сферу повноважень: Потужність каскадів Powershell, тому локальна область дії завжди містить об'єкти, визначені в областях пращурів (батьківський, прозорий, глобальний тощо). Це означає, що змінна, визначена в усьому світі або в батьківському пакеті стека (функція, що викликає функцію), завжди доступна, тоді як об'єкти, визначені в дочірніх областях, не є. У цьому випадку єдиним обмеженням є те, що дочірня область не може змінювати значення батьківського діапазону, якщо тільки ця область не визначена прямо.
Від: https://technet.microsoft.com/en-us/library/hh847849.aspx
Нижче наведені основні правила застосування:
- 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.
If you create an item in a scope, and the item shares its name with an
item in a different scope, the original item might be hidden under the
new item. But, it is not overridden or changed.