Переменные — это самая базовая структура данных в любой тип кодирования. Но одной переменной вряд ли достаточно для большинства целей, особенно при работе с более сложными алгоритмами.
И здесь на помощь приходят массивы. Будь то C++ или Питон, массивы в той или иной форме присутствуют в каждом языке программирования. А как насчет Windows PowerShell? Как работают массивы PowerShell? Как вы их используете? Каков их синтаксис? Давайте выясним.
Массивы PowerShell 101
Проще говоря, массив — это просто структурированный набор переменных. Идея состоит в том, чтобы избежать необходимости отслеживать десятки имен путем объединения связанных переменных в пронумерованный набор.
В PowerShell вы можете создать переменную, добавив символ $ к имени переменной. Например:
$prime = 13
Переменная может содержать любой тип данных: от чисел до строк. Для указания строки вам просто нужно использовать двойные или одинарные кавычки.
$name = «Левин»
Теперь, чтобы создать новый массив, просто присвойте одной и той же переменной несколько значений, разделенных запятыми. Вот так:
$week = «Понедельник», «Вторник», «Среда», «Четверг», «Пятница», «Суббота», «Воскресенье»
Некоторые люди предпочитают явно приводить переменную к массиву, чтобы избежать путаницы, хотя в этом нет необходимости. Для этого поместите значения в круглые скобки, начинающиеся с символа @.
$week = @(“Понедельник”, “Вторник”, “Среда”, “Четверг”, “Пятница”, “Суббота”, “Воскресенье”)
Обычно это бывает полезно при попытке поместить выходные данные других команд в массив, где вы не можете вручную записать их в правильном формате.
Создание массива
Мы уже видели наиболее распространенный метод создания массива. Но в зависимости от ситуации есть и другие способы, которые могут оказаться более подходящими. Например, если вы хотите создать массив, содержащий диапазон чисел, вы можете использовать оператор диапазона:
$digits = (0..9)
Это создаст массив из всех десяти цифр от нуля до девяти. Вы также можете инициализировать пустой массив, если вам просто нужно место для хранения значений позже..
$values = @()
Несколько массивов можно даже вкладывать друг в друга, однако такое использование может очень быстро запутать.
$coordinates = @(
(5, 10, 23),
(11, 7, 16)
)
По умолчанию массив может хранить переменные любого типа, будь то числа, строки или их сочетание. Но вы можете явно определить тип, если хотите ограничить вводимые в него значения. Например:
[int[]] $numbers = 2,3,4,5
Таким образом, массив может содержать только целые числа. Попытка присвоить ему значение любого другого типа вернет ошибку. Это может быть полезно для предотвращения простых ошибок для массивов, работающих исключительно с числовыми значениями, поскольку ввод строки в переменную, которая будет использоваться в вычислениях, создаст проблемы.
Доступ к массивам
До сих пор мы видели несколько методов создания массивов, содержащих различные типы данных. Но как получить доступ к этим данным?
Массивы PowerShell используют тот же формат, что и другие языки программирования. Доступ к каждой переменной массива можно получить по ее индексному номеру. Например:
$var = $numbers[5]
Это скопирует значение, хранящееся в пятом индексе массива $numbers, в переменную $var. Обратите внимание, что индексы массива начинают отсчет с 0, поэтому доступ к первому элементу осуществляется с нуля.
Если бы мы вывели это, например:
“$days[2]”
У нас будет среда, а не вторник.
Вы также можете использовать этот же метод для изменения этих значений. Например, следующая команда изменит второй элемент массива на ноль:
$numbers[1] = 0
Вы также можете добавить дополнительные элементы в существующий массив вместо изменения значений текущих записей, просто добавив их как арифметическое выражение.
$names += «Джонни»
Этот метод можно использовать для добавления нескольких записей одновременно или даже целых массивов.
$names += «Чарли, Лиам, Тереза»
$names += $surnames
Метод, разделенный запятыми, также применим для доступа к нескольким элементам массива. Например, если вы введете это значение, первые пять элементов $daysбудут сохранены в $weekdays..
$weekdays = $days[0,1,2,3,4]
Итерация по массивам
Доступ к отдельным элементам массива вручную — это хорошо, но если вы хотите выполнить действия со всем содержимым массива, это может оказаться утомительным. Более элегантный подход — использовать цикл For.
Циклы For могут систематически перебирать все элементы массива, обрабатывая каждое значение в соответствии с инструкциями. Вот как можно построить такой цикл:
Для ($i = 0 ; $i -lt $days.Length ; $i++)
{
$days[$i]
}
Функция array.Length возвращает размер массива, который по сути представляет собой количество элементов в нем. Его можно подключить к параметру тестового выражения цикла For, чтобы полностью перебрать все элементы.
Цикл Foreach и цикл Foreach-object могут сделать то же самое с еще более простым сценарием PowerShell.
Foreach ($day в $days)
{
$day
Это избавит вас от необходимости определять размер массива, оставляя всю информацию на усмотрение PowerShell.
Когда следует использовать массивы PowerShell
Самый большой источник ошибок в сложном скрипте — неправильные ссылки на переменные. Происходит это из-за наличия большого количества переменных с уникальными именами, что затрудняет запоминание их назначения.
Простейшим решением этой проблемы является широкое использование массивов. Все переменные, связанные каким-либо образом, могут быть отнесены к одному массиву и доступны через их индексные номера.
Microsoft PowerShell Основной вариант использования — автоматизация, и массивы играют в этом ключевую роль. Объекты, возвращаемые командлетами PowerShell, можно сохранять в массивах и выполнять итерацию. Это позволяет автоматически выполнять последовательные задачи, что значительно упрощает администрирование системы.
.