Перейти к содержимому

Программирование на языке PowerShell

Технология Windows PowerShell позволяет не только выполнять команды администрирования, но и полноценно программировать алгоритмы на языке PowerShell. Для этого в языке PowerShell существуют атрибуты, присущие всем современным языкам программирования такие как: переменные, условия, циклы, массивы, обработка ошибок и все это можно использовать для написания сложных сценариев администрирования.

Язык PowerShell – это объектно-ориентированный скриптовой язык программирования, который является частью технологии Windows PowerShell. Синтаксис всех программных конструкций языка PowerShell схож с синтаксисом СИ подобных языков.

Давайте подробней рассмотрим возможности программирования, которые есть в языке PowerShell.

Переменные в Windows PowerShell

В Windows PowerShell есть как встроенные переменные, так и переменные, которые может создавать пользователь. Все переменные в PowerShell можно посмотреть с помощью командлета Get-Variable, также с помощью данного командлета можно получить значение переменной, но обычно к переменной обращаются через знак доллар ($).

Переменные в PowerShell можно объявлять с указанием типа и без, при объявлении переменной ее можно сразу инициализировать. Еще одной особенностью переменных в PowerShell является то, что они могут менять свой тип в зависимости от значения этой переменной, но это только в том случае если мы принудительно при объявлении переменной не указали ее тип.

Для того чтобы создать переменную, необходимо перед ее названием указать знак доллара ($). В случае необходимости можно принудительно указать тип данных переменной в квадратных скобках перед ее названием. Например, ниже мы создаем переменную TestVar с целочисленным типом данных (int) и сразу ее инициализируем.

Так как PowerShell объектно-ориентированный язык программирования, в качестве значения переменной может выступать сложный объект со своими свойствами и методами. Например, встроенная переменная $PSVersionTable, которая содержит служебную информацию о версии PowerShell.

Типов данных переменных в Windows PowerShell очень много, так как они основаны на типах, которые есть в .NET Framework. Но, в то же время, есть и наиболее распространенные типы данных, т.е. базовые, такие как:

  • [int] — целое число, 32 бита;
  • [single] — число с плавающей запятой одинарной точности;
  • [double] — число с плавающей запятой двойной точности;
  • [string] — строка символов, т.е. текст;
  • [char] — один символ;
  • [Boolean] — значения «Истина» или «Ложь»;
  • [datetime] — дата или время.

Для работы с переменными существуют специальные командлеты PowerShell:

  • New-Variable – создание переменной;
  • Set-Variable – присваивание переменной значения;
  • Get-Variable – получение переменной;
  • Clear-Variable – очистка переменной;
  • Remove-Variable – удаление переменой.

Но, как я уже сказал, с переменной обычно работают, используя знак доллар ($).

Условные конструкции в PowerShell

В PowerShell, как и в других языках программирования, есть и условные конструкции. Они нужны для того, чтобы на основе результата проверки выполнять те или иные действия. К условным конструкциям в PowerShell относятся конструкции:

  • IF
  • IF…ELSE
  • IF…ELSEIF…ELSE
  • SWITCH

Так как условные конструкции предполагают сравнение чего-либо, необходимо затронуть такую тему как операторы сравнения, тем более что в PowerShell они пишутся отличным от других языков способом.

Операторы сравнения PowerShell

  • -eq – равно (в других языках обычно знак =);
  • -ne – не равно (в других языках эквивалентно знакам <> или !=);
  • -gt – больше (в других языках обычно знак >);
  • -lt – меньше (в других языках обычно знак <);
  • -ge – больше или равно (в других языках эквивалентно знакам >=);
  • -le – меньше или равно (в других языках эквивалентно знакам <=).

Примеры использования условных конструкций

IF

Если условие выполняется, то начинает работу блок в фигурных скобках.

IF…ELSE

Если условие выполняется, то начинает работу блок в фигурных скобках после оператора IF, если не выполняется блок после ELSE.

IF…ELSEIF…ELSE

Если переменная TestVar = 100, то выполняется блок после IF, если больше 100 блок после ELSEIF, если меньше 100, то блок после ELSE.

SWITCH

В данном случае переменная TestVar сравнивается с перечисленными в фигурных скобках значениями и если условие истина, то выполняется соответствующий блок, если никакое значение не подошло, выполняется необязательный блок default.

Циклы в PowerShell

В языке PowerShell можно использовать и циклы. Цикл – это программная конструкция, которая подразумевает многократное выполнение одних и тех же действий.

В Windows PowerShell есть несколько разновидностей циклов, а именно:

  • WHILE
  • DO WHILE
  • DO UNTIL
  • FOR
  • FOREACH

Цикл WHILE

Данный цикл работает до тех пор, пока выполняется условие вначале цикла, т.е. этот цикл с предусловием.

Цикл DO WHILE

Это цикл с постусловием, т.е. он хоть раз, но выполнится, в отличие от цикла WHILE, работа которого может и не начаться, если условие не выполняется.

Цикл DO UNTIL

Если цикл DO WHILE выполняется пока условие истина, то DO UNTIL выполняется пока условие ложно.

Цикл FOR

Данный тип цикла отличается от других тем, что нам заранее известно количество итераций цикла, т.е. он выполнится определенное количество раз. Например, в цикле WHILE мы не знаем, продолжит ли он свою работу после первой итерации (мы можем и не знать, войдем ли мы вообще в цикл).

Перебор FOREACH

Это разновидность цикла, при которой происходит перебор элементов коллекции. В примере ниже мы сохраняем результат командлета Get-Service (т.е. список служб), а затем с помощь перебора FOREACH выводим название службы и ее статус.

Массивы в PowerShell

Конечно же, в PowerShell есть и массивы. Массив — это структура данных, предназначенная для хранения коллекции элементов. Элементы массива могут быть одного или разных типов, т.е. массив может быть как строго типизированный, так и нет.

Как и во многих языках программирования в PowerShell к элементу массив можно обращаться по индексу (начинающегося с нуля). При инициализации массива значения мы перечисляем через запятую.

Пример создания массива, который может содержать элементы разных типов.

Пример создания строго типизированного массива.

Пример перебора элементов массива.

Обработка ошибок в Windows PowerShell

Для отслеживания и перехвата ошибок в Windows PowerShell есть механизм Try…Catch. Он представляет собой конструкцию, при которой Вы весь код, в котором может возникнуть исключительная ситуация (ошибка), помещаете в блок Try. В блоке Catch Вы пишите код, который должен выполниться при возникновении ошибки. Если ошибок не было, то блок Catch просто не выполнятся.

В примере ниже мы хотим защитить себя от ситуаций, когда пользователь может ввести какое-нибудь непонятное число, например 0 (или вообще текст), а как Вы знаете делить на ноль нельзя. Поэтому тот код, в котором может возникнуть такая ситуация мы поместили в блок Try. В блоке catch мы выводим короткое, понятное предупреждение пользователю.

Опубликовано вPowershell

Ваш комментарий будет первым

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *