Главная > Powershell > Использование пользовательских областей в Powershell

Использование пользовательских областей в Powershell

При написании скриптов Powershell бывают случаи, когда нужно на время изменить значение переменной, а затем восстановить исходное значение. Например, переопределить реакцию Powershell на возникновение не прерывающей ошибки. За это отвечает переменная $ErrorActionPreference. (Подробнее об этой и других переменных, которые задают поведение Powershell можно почитать, например на Technet.) Как правило в таком случае сохраняют исходное значение во временной переменной, а после выполнения определённых действий – восстанавливают:

"Исходное значение ErrorActionPreference - $ErrorActionPreference"

# Сохраняем исходное значение переменной во временную переменную
$ErrorActionPreferenceOLD = $ErrorActionPreference

# Меняем значение переменной на нужное
$ErrorActionPreference = 'stop'

"Изменённое значение ErrorActionPreference - $ErrorActionPreference"
# Выполняем какие-то действия...

# Восстанавливаем исходное значение переменной
$ErrorActionPreference = $ErrorActionPreferenceOLD

"Восстановленное значение ErrorActionPreference - $ErrorActionPreference"

В результате получим изменённое на время значение переменной:

Исходное значение ErrorActionPreference         - Continue
Изменённое значение ErrorActionPreference       - Stop
Восстановленное значение ErrorActionPreference  - Continue

Этого же результата можно добиться более простым путём.

Можно фрагмент кода, где используется изменённое значение переменной “засунуть” в так называемую пользовательскую область:

&{
    [Код]
 }

Это создаст новую область, любые значения переменных определённых в этой области будут удалены при выходе из неё:

"Исходное значение ErrorActionPreference `t- $ErrorActionPreference"

&{
    $ErrorActionPreference = 'stop'
    "Изменённое значение ErrorActionPreference `t- $ErrorActionPreference"
 }
 
"Восстановленное значение ErrorActionPreference `t- $ErrorActionPreference"

Результат будет таким же, но код выглядит более изящным и выполняется быстрее.

Таким же образом можно создать временную переменную, которая будет удалена после того как будет не нужна:

"Исходное значение переменной temp `t- $temp"

&{
    $temp = 'temp'
    "Изменённое значение переменной temp `t- $temp"
 }
 
"Восстановленное значение переменной temp - $temp"

В результате получим:

Исходное значение переменной temp        -
Изменённое значение переменной temp      - temp
Восстановленное значение переменной temp -
Реклама
Рубрики:Powershell Метки:
  1. Комментариев нет.
  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: