Как использовать массив PowerShell - Полное руководство
Массивы PowerShell используются для хранения коллекции элементов. Они являются основополагающей частью PowerShell и любого языка программирования, поскольку позволяют хранить и структурировать коллекцию элементов в одной переменной. Затем мы можем использовать массив для выполнения широкого спектра задач с каждым из элементов массива.
В этой статье мы рассмотрим массивы PowerShell и то, как использовать их в ваших скриптах PowerShell.
Массив PowerShell
Прежде чем мы перейдем к тому, как создавать и использовать массивы в PowerShell, давайте сначала кратко рассмотрим преимущества использования массивов. Массивы используются в каждом языке программирования. Они позволяют легко выполнять задачи с несколькими элементами.
Например, если вы хотите создать скрипт, который проверяет, онлайн ли ваши серверы. Вместо того чтобы писать код для каждого отдельного сервера, вы можете создать массив с именами серверов или IP-адресами и пройтись по каждому элементу массива.
Заметка
Убедитесь, что вы также прочитали эту статью о хеш-таблицах и разнице между массивами и хеш-таблицами.
Массивы также можно использовать для сортировки или структурирования данных, что особенно полезно при работе с большими наборами данных.
Создание массивов
Самый простой и понятный способ создать массив в PowerShell - это присвоить несколько элементов одной переменной. Например, если мы хотим создать массив фруктов, мы можем просто сделать это:
$fruits = 'apple','raspberry','kiwi'
Result of $fruits:
apple
raspberry
kiwiИспользуя нотацию @()
Более распространенный способ определения или создания массива - использовать запись @(), также известную как оператор подвыражения. Это создаст массив значений, находящихся внутри скобок ( ).
Например, чтобы создать массив фруктов:
$fruits = @('apple','raspberry','kiwi')Результаты такие же, как и в случае, если вы присваиваете несколько элементов одной переменной, как в нашем первом примере. Но мы также можем использовать этот метод для создания пустого массива, например:
$data = @()
Result
$data.Count
0Создание массива PowerShell с определенным типом
Массивы в PowerShell могут содержать любой тип данных. Даже возможно смешивать разные типы данных в одном массиве. Например, мы можем создать массив, который содержит целые числа, строки и даже другой массив:
$array = @('foo',3,'bar',50,@('apple','kiwi'))Как вы можете видеть на скриншоте выше, массив содержит строку, целое число и другой массив.
Чтобы предотвратить это, мы можем создать массив с строгой типизацией. Это означает, что мы определяем, какие типы данных может содержать массив. Чтобы создать типизированный массив, нам нужно указать тип массива в квадратных скобках перед переменной.
Например, чтобы создать массив, который может содержать только целые числа:
[int32[]]$ints = 10,50,30,20
Другие часто используемые варианты типов данных для массивов включают:
- Массив строк[] – Создайте массив строк.
- Int[] – Используется для создания массива целых чисел.
- Boolean[] – Массив значений типа Boolean (истина или ложь).
- Byte[] – Используется для создания массива байтов.
- Double[] – Создает массив чисел с плавающей запятой двойной точности.
- Decimal[] – Это используется для создания массива десятичных чисел.
- Массив даты и времени[] – Используется для создания массива дат и времени.
- Объект[] – Создайте массив объектов.
- Char[] – Это используется для создания массива символов.
- Массив[] – Используется для создания массива массивов.
Также возможно создавать другие типы массивов, такие как пользовательские типы объектов и определенные классы .NET фреймворка, например, Diagnostics.Process.
Создание многомерного массива
Многоразмерный массив — это массив, который содержит другие массивы в качестве элементов. Создать многоразмерный массив в PowerShell так же просто, как создать массив, а затем добавить подмассивы в качестве элементов. Например, чтобы создать двумерный массив:
Create an empty 2-dimensional array
$myArray = @()
Add sub-arrays as elements
$myArray += @(1,2,3),@(4,5,6),@(7,8,9)Мы также можем создать двумерный массив в одну строку, используя оператор запятой:
$myArray = @( (1,2,3), (4,5,6), (7,8,9) )Чтобы получить доступ к элементам многомерного массива, нам нужно использовать индекс первого (родительского) массива и подмассива (вложенного массива):
Return the third element (2) of the second array (1):
$myArray[1][2]
Returns
6Доступ к элементам массива и их изменение
Теперь мы знаем, как создать массив, давайте посмотрим, как получить доступ и использовать данные внутри массивов.
Доступ к элементам с помощью индекса массива
Массивы в PowerShell имеют индекс, который всегда начинается с 0. Мы можем использовать этот индекс для получения элементов из массива, просто указав номер индекса в скобках. Для следующих примеров мы будем использовать следующий массив:
$fruits = @("Apple", "Banana", "Cherry", "Date", "Elderberry", "Fig", "Grape", "Honeydew", "Kiwi", "Lemon")Чтобы получить доступ к первому элементу массива, яблоку, мы указываем индекс 0:
$fruits[0]
Result
AppleМы также можем вернуть несколько элементов из массива, введя несколько индексов:
$fruits[3,7,8]
Result
Date
Honeydew
KiwiДругим вариантом является возвращение диапазона элементов из массива. Например, мы можем вернуть первые 5 элементов, используя:
$fruits[0..4]
Result
Apple
Banana
Cherry
Date
Elderberry
Последний вариант, который полезно знать, - это то, что вы также можете подсчитывать элементы массива в обратном порядке от индекса. Таким образом, чтобы получить последний элемент или последние 3 элемента массива, мы можем сделать следующее:
$fruits[-1]
Result
Lemon
$fruits[-1..-3]
#Result
Lemon
Kiwi
HoneydewЦикл по массиву в PowerShell
Самое большое преимущество использования массивов или хеш-таблиц в PowerShell заключается в том, что вы можете пройтись по всем элементам массива. Это позволяет вам выполнять одни и те же действия над всеми элементами массива.
Заметка
Убедитесь, что вы также прочитали эту статью о For-Each, Do-While и других циклах в PowerShell. В ней будет объяснено различие и самые быстрые методы.
Существуют различные методы для перебора массива, но самым простым методом является использование либо командлета ForEach-Object после переменной, либо метода .ForEach:
$fruits | ForEach-Object {"Fruit: $_"}
Result
Fruit: Apple
Fruit: Banana
Fruit: Cherry
Fruit: Date
Fruit: Elderberry
Fruit: Fig
Fruit: Grape
Fruit: Honeydew
Fruit: Kiwi
Fruit: Lemon
Or:
$fruits.ForEach({"Fruit: $_"})Когда вы хотите отслеживать, где вы находитесь в массиве, цикл For - это хороший метод для использования. Этот метод будет отслеживать номер индекса, на котором он находится в массиве:
for ($i = 0; $i -le ($fruits.length - 1); $i += 1) {
Write-Host "$($fruits[$i]) is located at index $i"
}Сортировать массив PowerShell
Мы можем отсортировать элементы в массиве с помощью команды Sort-Object. Это отсортирует все элементы в массиве на основе их значений. По умолчанию элементы будут отсортированы в алфавитном порядке. Например, чтобы отсортировать массив фруктов, мы можем сделать так:
$sortedFruits = $fruits | Sort-ObjectМы также можем отсортировать массив в порядке убывания, добавив параметр -Descending:
$sortedFruits = $fruits | Sort-Object -Descending
Result
Lemon
Kiwi
Honeydew
Grape
Fig
Elderberry
Date
Cherry
BananaХорошо знать, что командлет Sort-Object не изменяет оригинальный массив, а возвращает новый отсортированный массив. Вы можете использовать параметр -Unique, чтобы отсортировать и удалить дубликаты в массиве.
Отфильтровать массив в PowerShell
Мы можем использовать командлет Where-Object, чтобы отфильтровать массив в PowerShell. Он вернет только те элементы, которые соответствуют условию фильтра, создавая новый массив. Например, давайте получим все фрукты, которые заканчиваются на «rry»:
$filteredFruits = $fruits | Where-Object {$_ -like "*rry"}
result
Cherry
ElderberryPowerShell Добавить в массив
Чтобы добавить элементы в массив, нам нужно использовать оператор +=. Это скопирует содержимое массива и добавит новые элементы в него. Например, мы можем добавить новый фрукт в массив $fruits вот так:
$fruits += "Mango"Или мы можем добавить несколько элементов в массив вот так:
$fruits += "Mango", "Nectarine", "Orange"Хорошо знать, что технически вы не можете добавлять элементы в массив в PowerShell. Когда вы создаете массив, его длина будет определенной. И эта длина фиксирована, поэтому вы не можете добавлять или удалять элементы. Однако оператор += копирует все из существующего массива и добавляет новый элемент(ы) к нему.
Некоторые пытаются использовать метод .add() для добавления элементов в массив, но этот метод можно использовать только с ArrayList.
Удалить элементы из массива
Удаление элементов из массива технически невозможно, так же как и добавление. Поэтому, чтобы удалить элементы из массива, нам нужно создать новый массив и отфильтровать элемент, который мы не хотим.
Например, чтобы удалить Банан из массива $fruits, мы копируем массив и используем командлет Where-Object для фильтрации Банана:
$fruits = $fruits | Where-Object {$_ -ne "Banana"}Массив списка PowerShell
Существует лучший способ добавления или удаления элементов из массива. Для этого нам потребуется использовать ArrayList PowerShell, который доступен в классе 'System.Collections.ArrayList'. Преимущества ArrayList по сравнению с обычным массивом заключаются в том, что мы можем добавлять и удалять элементы из массива без необходимости предварительного копирования массива. Это действительно может увеличить производительность вашего скрипта, когда вы работаете с большими наборами данных.
Таким образом, чтобы создать ArrayList в PowerShell, нам нужно использовать командлет New-Object для создания массива:
$arrayList = New-Object System.Collections.ArrayListТеперь мы можем использовать метод .Add(), чтобы добавлять элементы в ArrayList:
$arrayList.Add("Apple")
$arrayList.Add("Banana")Чтобы удалить элементы из ArrayList, мы просто можем использовать метод .Remove():
$arrayList.Remove("Apple")Извлечение элементов из ArrayList такое же, как и с обычным массивом. Вы можете использовать индекс или перебрать все элементы массива с помощью одного из методов циклов.
Встроенные командлеты массива
Существуют несколько встроенных cmdlet, которые можно использовать для выполнения общих операций с массивами. Эти cmdlet облегчают работу с массивами и позволяют автоматизировать задачи. Некоторые из самых часто используемых встроенных cmdlet для массивов в PowerShell:
Оператор соединения
Оператор join используется для объединения элементов массива в одну строку. Мы можем указать разделитель между элементами, например, пробел или запятую. Например, мы можем объединить элементы массива $fruits в одну строку таким образом:
$fruits -join ','
Result
Apple,Cherry,Date,Elderberry,Fig,Grape,Honeydew,Kiwi,LemonОператор разделения
Мы можем преобразовать строку в массив, используя оператор split. Так же, как с оператором join, мы можем указать разделитель элементов, например, пробел или запятую. Таким образом, мы можем, например, разбить строку фруктов обратно в массив следующим образом:
$fruits = "Apple,Banana,Cherry" -split ','Заменить оператор
Чтобы заменить элемент, конкретный текст или символы в массиве PowerShell, мы можем использовать оператор замены. Оператор -replace является оператором регулярного выражения, который позволяет вам искать и заменять текст в массиве.
Например, чтобы заменить Яблоко в массиве фруктов на Манго, мы можем сделать следующее:
$fruits = $fruits -replace "Apple","Mango"Имейте в виду, что оператор -replace регистрозависим; если вы хотите, чтобы он был регистронезависимым, вам следует использовать оператор -ireplace.
Оператор не ограничивается заменой одного элемента массива. Он также может заменить конкретный символ во всех элементах массива. Например, чтобы заменить «e» на «E»:ку
$fruits = $fruits -replace "e","E"
Result
ApplE
ChErry
DatE
EldErbErry
Fig
GrapE
HonEydEw
Kiwi
LEmonЗаключение
Массивы являются важным инструментом для сценариев и автоматизации в PowerShell. Они позволяют автоматизировать повторяющиеся задачи в вашем сценарии и эффективно обрабатывать большие объемы данных.
Надеюсь, вы нашли эту статью полезной. Если у вас есть вопросы, просто оставьте комментарий ниже.
