Поиск по сайту:

Как использовать массив 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
Elderberry

PowerShell Добавить в массив

Чтобы добавить элементы в массив, нам нужно использовать оператор +=. Это скопирует содержимое массива и добавит новые элементы в него. Например, мы можем добавить новый фрукт в массив $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. Они позволяют автоматизировать повторяющиеся задачи в вашем сценарии и эффективно обрабатывать большие объемы данных.

Надеюсь, вы нашли эту статью полезной. Если у вас есть вопросы, просто оставьте комментарий ниже.