Краткий справочник по powershell
Приведем краткие примеры по выполнению наиболее важных и используемых возможностей языка PowerShell. Для подробного изучения возможностей языка и встроенных функций можно обратиться к электронному ресурсу «Изучение PowerShell» [2, 3].
Ввод/вывод информации на консоль
Наиболее простым способом вывода произвольной информации в командную консоль является командлет «Out-Host» (является командлетом, в который по умолчанию передаются результаты выполнения команд, поэтому его явное указание в конвейере не обязательно) или «Write-Host». Они получают на вход параметр и выводят его текстовое представление на консоль:
Write-Host "Hello PowerShell"
Для ввода информации с консоли используется команда «Read-Host», возвращающая введенную строку в виде результата:
$var1 = Read-Host "Введите ваше имя"
Переменные и массивы
В скриптах PowerShell все переменные должны начинаться с символа «$» (доллар). Объявлять переменные не нужно, любое присвоение переменной, имя которой ранее не встречалось, приводит к созданию новой переменной в программе. В именах переменных нельзя использовать символы «!», «@», «#», «%», «&», «.» и символ пробела. Имена переменных (а также любых других идентификаторов) регистронезависимы.
Перед переменной в квадратных скобках может быть указан ее тип. Например,
[double]$val = 5
Перечень основных типов приведен ниже в таблице 3.
Таблица 3. Основные базовые типы PowerShell
Имя типа |
Описание |
[array] |
Массив значений. Массив в PowerShell может содержать элементы различных типов. |
[bool] |
Логическая величина принимающая значения True/False. |
[byte] |
8-ми битное беззнаковое значение (0..255). |
[char] |
Один символ в кодировке Unicode. Данный тип данных занимает в памяти два байта. |
[decimal] |
Знаковое 128-и битное число. |
[double] |
Дробное (с плавающей точкой) число удвоенной точности (64 бита). |
[hashtable] |
Хэш-таблица. |
[int] |
Целое знаковое четырехбайтовое число. |
[long] |
Целое знаковое восьмибайтовое число. |
[single] |
Дробное (с плавающей точкой) число одинарной точности (32 бита). |
[string] |
Неизменяемая текстовая строка в кодировке Unicode. |
Для того чтобы создать массив значений, необходимо записать их через запятую внутри конструкции @(…). Например,
$vals1 = @(3, 5.1, 7, 15)
$vals2 = @(-6, 12, 9, 10)
Write-Host ($vals1 + $vals2)
Оператор «+» в данном примере производит объединение массивов, создавая новый массив, состоящий из последовательно расположенных элементов двух массивов.
Массивы допускают обращение к своим элементам по их индексу (индекс первого элемент – ноль) и поддерживают свойство «Count» – количество элементов в массиве:
for($i=0; $i -lt $vals1.Count; $i++)
{
Write-Host $vals1[$i]
}
Доступ к аргументам командной строки
Все аргументы командной строки, переданные при запуске скрипта, заносятся в переменную $args, имеющую тип массива. Перебрать значения аргументов можно с помощью, например, цикла foreach:
#Вывод всех параметров командной строки
foreach($i in $args) { write-host $i }
Для доступа к конкретному аргументу необходимо использовать индексный доступ к массиву, указывая номер элемента.
Условные операторы
В языке PowerShell используется ряд операторов сравнения, описанных в таблице 4. В случае сравнения текстовых данных данные операторы производят сравнение без учета регистра, однако это поведение может быть изменено добавлением символа «c» (символ в английской раскладке) непосредственно после дефиса.
Таблица 4. Операторы сравнения
Оператор |
Описание |
-lt |
Меньше чем (первый аргумент меньше второго) |
-le |
Меньше чем или равно |
-gt |
Больше чем |
-ge |
Больше чем или равно |
-eq |
Аргументы оператора равны |
-ne |
Аргументы не равны |
-like |
Первый операнд соответствует шаблону, описанному вторым оператором |
-notlike |
Первый операнд не соответствует шаблону, описанному вторым оператором |
-and |
Логический оператор «И», соединяющий несколько условий |
-or |
Логический оператор «ИЛИ» |
Условный оператор «if» используется для создания ветвлений кода скрипта, как в следующем примере:
$color = read-host "Введите цвет"
if( $color -eq 0) { write-host "black" }
elseif( $color -eq 1) { write-host "blue" }
elseif( $color -eq 2) { write-host "red" }
else { write-host "unknown" }
Обратите внимание, что тело условного оператора всегда обрамляется фигурными скобками, даже если внутри находится только один оператор. Это же правило применимо к любым сложносоставным конструкциям, например, к операторам циклов.
Вместо написания множества условных операторов, как в предыдущем примере, в случае сравнения на равенство можно применять оператор «switch»:
$color = read-host "Введите цвет"
switch( $color )
{
0 { "black" }
1 { "blue" }
2 { "red" }
default { "unknown" }
}
Операторы циклов
В языке PowerShell присутствует пять типов циклов: for, foreach, while, do-while и do-until. Все эти циклы имеют те же самые алгоритмы функционирования, что и в большинстве современных языков программирования. Для краткого ознакомления рассмотрим, как будет выглядеть задача вывод чисел от 0 (нуля) до некоторого вводимого пользователем значения с применением каждого из циклов:
$max = read-host "Введите макс. число"
#Цикл for
write-host "Цикл FOR"
for($i=0; $i -lt $max; $i++) { write-host $i }
#Цикл for
write-host "Цикл FOREACH"
foreach($i in (0..($max-1))) { write-host $i }
#Цикл while
write-host "Цикл DO-WHILE"
$i = 0
while( $i -lt $max )
{
write-host $i
$i = $i + 1
}
#Цикл do-while
write-host "Цикл DO-WHILE"
$i = 0
do { write-host $i; $i++ }
while( $i -lt $max )
#Цикл do-until
write-host "Цикл DO-UNTIL"
$i = 0
do { write-host $i; $i++ }
until( $i -ge $max )
Пользовательские функции
Описание пользовательских функций в PowerShell имеет следующий синтаксис:
function <имя-функ.>[(<пар-ры>)] { <операторы> }
Результатом работы функции является результат последнего выражения, вычисленного в ней. Например, рассмотрим программу, складывающую два вводимых с клавиатуры числа.
function Add([int]$x, [int]$y) { $x + $y }
$a = Read-Host "Введите A"
$b = Read-Host "Введите B"
Write-Host "Сумма A+B=" (Add $a $b)
Явное указание типа данных параметров функции в ее заголовке заставляет интерпретатор PowerShell автоматически преобразовывать введенные строки к числовой форме. Стоит так же обратиться внимание на синтаксис вызова функции, когда ее параметры передаются не в скобках, а записываются следом за ней через пробел(ы).
