ТЛ; др
Чтобы обновить переменную $BaseHomeFolderPath
в области действия script , необходимо явно указать ее в этой области:
$script:BaseHomeFolderPath = '\\path1\users'
В противном случае вы неявно создадите новую локальную переменную с этим именем в дочерней области, в которой работают ваши обработчики событий.
В PowerShell, когда вы назначаете переменную с помощью $var = ...
, вы либо:
обновить существующую переменную, которая была создана в той же области .
или неявно создайте новую переменную в текущей области действия .
Сложность в том, что, хотя дочерние области см. переменные, созданные в родительских областях и могут получать их значения только по имени, присваивать им по имени только создает новую , локальную переменную области действия , и эту новую переменную затем shadows исходную переменную в текущей области и все дочерние области.
Простая демонстрация с использованием оператора вызова &
для выполнения блока скрипта ({ ... }
) в дочерней области:
$var = 'parent'
"in parent: before: $var"
& {
"in child: before: $var" # sees $var from parent scope
$var = 'child' # creates new $var in current scope
"in child: after: $var" # sees new $var, which shadows the parent's
}
"in parent: after: $var" # still has original value
Это печатает:
in parent: before: parent
in child: before: parent
in child: after: child
in parent: after: parent
Для получения дополнительной информации см .: