Массив powershell: Извините! Страница, которую Вы ищете, не может быть найдена

Содержание

Основы PowerShell: массивы и таблицы хеширования | Windows IT Pro/RE

Массивы и таблицы хеширования – две базовых структуры, в которых для эффективной работы в оболочке PowerShell необходимо разбираться. Освоив принципы работы с массивами и таблицами хеширования, вы уже будете на пути к тому, чтобы стать опытным пользователем PowerShell

Массивы и таблицы хеширования – две наиболее важных структуры данных, доступные в современных языках написания сценариев. Оболочка Windows PowerShell (http://www.windowsitpro.com/topics/powershell-scripting) поддерживает обе эти структуры. Массив, который иногда называют «коллекцией», содержит список элементов. Таблица хеширования, которую еще называют «словарем» или «массивом ассоциаций», содержит списки пар элементов. Далее в статье я покажу, как создавать массивы и таблицы хеширования, а также получать доступ к их элементам.

Создание массива

Массивы полезны в тех случаях, когда вы собираетесь хранить и просматривать список или коллекцию элементов. Один из простейших способов создать массив – использовать команду PowerShell, которая выводит более одного объекта. Например, в результате простого запуска команды Get-ChildItem будет выведен список объектов в текущем расположении. Этот список может быть сохранен в переменной. Если текущее расположение содержит более одного объекта, переменная, в которой вы сохранили список, становится массивом. Это действительно просто. Например, рассмотрим следующую команду PowerShell:

$list = Get-ChildItem $ENV:SystemRoot

После выполнения этой команды переменная $list содержит массив объектов FileInfo и DirectoryInfo.

Другой способ создать массив – указать объекты, разделив их запятыми, и присвоить их переменной:

$list = «A",»B«,"C»,«1",»2«,"3»

Доступ к элементам массива

Существует три способа обращения к элементам массива.

  • Использование инструкции foreach. Инструкция foreach оболочки PowerShell предоставляет удобный способ обращения к любому элементу массива. Например, чтобы вывести на экран элемент массива $list, нужно запустить команду:
foreach ( $item in $list ) { $item }
  • Использование команды ForEach-Object. Команда ForEach-Object рассматривает массив как входные данные из конвейера и передает каждый объект массива в блок сценария для обработки. Текущий элемент массива представлен специальной переменной $_. Чтобы вывести на экран элемент массива $list с помощью команды ForEach-Object, используйте команду:
$list | ForEach-Object { $_ }
  • Применение инструкции с номером индекса. К каждому объекту (элементу) массива можно обратиться по соответствующему номеру, начиная с 0. Например, выражение $list[0] ссылается на первый элемент в массиве, выражение $list[1] ссылается на второй элемент, и так далее. Так, чтобы вывести на экран каждый член массива с помощью инструкции for и номера индекса, запустите команду:
for ( $i = 0; $i -lt $list.Count; $i++ ) {
$list[$i]
}

Из этих трех подходов способ с индексами используется реже всего. Основная причина в том, что инструкция foreach и команда ForEach-Object обеспечивают более быстрое выполнение задачи.

При изучении этих трех подходов основной вопрос звучит так: в чем разница между использованием инструкции foreach и команды ForEach-Object? Разница в первую очередь в том, что при использовании инструкции foreach необходимо извлечь все элементы массива, прежде чем вы сможете получить доступ к ним. И наоборот, команда ForEach-Object использует преимущества конвейера PowerShell, позволяя получить доступ сразу к отдельному элементу.

Какой же из подходов выбрать? Ответ зависит от элементов массива. Если у вас сравнительно небольшое количество элементов массива и извлечение не займет много времени, инструкция foreach будет работать отлично. Если же у вас большой список элементов и извлечение элементов требует значительного времени (например, файлы на удаленном файловом сервере), вы, скорее всего, захотите использовать команду ForEach-Object. Также стоит подумать о применении команды Write-Progress. Если вы хотите задействовать эту команду в сценарии, чтобы информировать пользователя о ходе выполнения операции, вам придется предварительно извлечь все объекты с помощью инструкции foreach – это необходимо для расчета процента выполненной работы.

Есть еще один момент, из-за которого могут возникнуть затруднения при выборе между инструкцией foreach и командой ForEach-Object: псевдонимом команды ForEach-Object является ключевое слово foreach! Не забывайте, что при использовании выражения foreach после вертикальной черты (|) в конвейере PowerSh ell на самом деле вы вызываете команду ForEach-Object.

Другое затруднение, связанное с массивами, может проявиться, если вы знакомы с языками VBScript или JavaScript. В этих двух языках написания сценариев массивы и коллекции являются разными типами объектов. Однако в оболочке PowerShell вы можете рассматривать их как одно и то же.

Создание таблицы хеширования

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

Вы можете создать таблицу хеширования путем указания имени и значения между символами @{ и }. Например, чтобы создать таблицу хеширования, которая содержит имена трех серверов и их IP-адреса, следует выполнить команду:

$hash = @{«server1» = «192.168.17.21»;
«server2» = «192.168.17.22»;
«server3» = «192.168.17.23»}

Если вывести эту таблицу хеширования на экран (просто написать $hash в строке PowerShell и нажать клавишу ввода), вы увидите результаты, приведенные на рисунке. Заметьте, что оболочка PowerShell выводит данные столбца Name в произвольном порядке. Одна из особенностей таблицы хеширования заключается в том, что именованные элементы не имеют определенного порядка.

 

Рисунок. Таблица хэширования

Доступ к элементам таблицы хеширования

Чтобы получить значение из таблицы хеширования, вы можете указать имя таблицы хеширования и далее имя элемента, значение которого вы хотите получить, заключенное в квадратные скобки. Либо вы можете поставить точку между именем таблицы и именем элемента, значение которого вы хотите получить. Например, для созданной ранее переменной $hash любая из приведенных ниже команд вернет значение 192.168.17.21:

$hash[«server1»]
$hash.server1
$hash.«server1»

Имейте в виду, что кавычки в команде $hash[«server1»] необходимы. Без них оболочка PowerShell не сможет получить информацию о том, каким образом обрабатывать ключ server1. Однако если имя сервера хранится в переменной (например, $serverName), вы можете применить команду:

$hash[$serverName]

Некоторые команды PowerShell используют таблицы хеширования в качестве значений для параметров. Например, команда Select-Object задействует таблицы хеширования для вывода на экран вычисляемых свойств. Чтобы использовать таблицу хеширования при создании вычисляемого свойства для команды Select-Object, она должна иметь два парных значения: Name, которое задает имя вычисляемого свойства, и Expression, которое содержит блок сценариев, отвечающий за вычисление свойства. Например, возьмем команду:

Get-ChildItem $ENV:SystemRoot | select-object Name,
LastWriteTime, @{Name=«Day»;
Expression={$_.LastWriteTime.DayOfWeek}}

В этом случае команда Select-Object выведет имя, время последней записи и день недели для каждого файла и каталога в установочной папке Windows. Как и в случае с командой ForEach-Object, специальная переменная $_ ссылается на текущий объект.

.

Массивы в PowerShell.Инициализация, заполнение в цикле

Очень простой вопрос и не могу решить целый вечер.

for ($i = 0; $i -lt 5; $i++)
    {
        $BBQ[$i] = $i
    }
$BBQ

Почему этот код не работает?
«Не удается индексировать в массив NULL»

Если добавить вначале $BBQ = @(), ничего не получится.
Работает только если заранее объявить массив, например так:$BBQ = @(1,3,5,7,4,6)
А что делать,если неизвестно заранее количество элементов?

  • массивы
  • powershell






1

Нашел ответ:)

$BBQ = @()
    for ($i = 0; $i -lt 5; $i++)
    {
        $BBQ[$i] += $i
    }
$BBQ

Всё дело в фиксированной длине массивов!






1

Если после объявления массива $BBQ = @(), необходимо добавить элемент, то необходимо воспользоваться командой +=.

$BBQ = @()
$BBQ += 2 # 2
$BBQ += 7 # 2, 7
$BBQ += 5 # 2, 7, 5

Но данный вариант не очень хорошо подходит для больших массивов из-за того что в PowerShell массивы не изменяемые. И при каждом добавлении пересоздаётся весь массив. Для такой задачи подойдёт класс System.Collections.ArrayList

$BBQ = New-Object System.Collections.ArrayList
$BBQ.Add(2)
$BBQ.Add(7)
$BBQ.Add(5)

Если нужен массив как в вопросе все значения от 0 до 4, то проще всего будет воспользоваться числовым диапазоном.

$BBQ = 0..4 # 0, 1, 2, 3, 4

Вы можете сделать Hashtable, тогда ваш код сработает:

$BBQ = @{}
for ($i = 0; $i -lt 5; $i++) {
    $BBQ[$i] = $i
}
$BBQ
Name Value
---- -----
4    4    
3    3    
2    2    
1    1    
0    0    







Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации



Почта

Необходима, но никому не показывается




By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.



Массив PowerShell

: все, что вам нужно знать!

Салаудин Рэджек
0 Комментарии
создание массива в powershell, длина массива powershell, powershell добавить элемент в массив, powershell добавить в массив, powershell добавить в массив, массив powershell содержит, массив powershell в строку, преобразовать массив powershell в строку, создать массив powershell, массив фильтров powershell, powershell перебирает массив, массив соединения powershell, цикл powershell через массив, powershell удаляет элемент из массива, массив сортировки powershell, разделяет строку powershell на массив

Введение в массивы в PowerShell

Массив — это структура данных, в которой хранится набор элементов. В PowerShell массив может содержать элементы данных разных типов, включая целые числа, строки и объекты. Массив — это полезный инструмент для хранения данных и управления ими в PowerShell, поскольку он позволяет хранить несколько значений в одной переменной. Использование массивов в ваших сценариях значительно упрощает их чтение и поддержку, а также ускоряет их выполнение. Вместо написания длинных строк кода для каждого элемента в вашем наборе вы можете просто использовать синтаксис @(), за которым следуют элементы массива (например, @(Элемент1, Элемент2 и т. д.). Это позволяет легко ссылаться на все элементы в вашем наборе без необходимости перечислять их по отдельности.Например, если вам нужно сохранить список имен пользователей или путей к файлам, массив будет лучшим способом сделать это.

В этом исчерпывающем руководстве мы рассмотрим основы массивов PowerShell, когда их следует использовать и как они могут облегчить вашу жизнь. Давайте начнем!

Содержание

  • Введение в массивы в PowerShell
  • Создание массива в PowerShell
  • Изменение элементов в массиве
    • Добавление объекта в массив в PowerShell
    • Удаление элементов из массива 9002 0
  • Доступ к элементам в массив
    • Проверить, содержит ли массив элемент в PowerShell

Создание массива в PowerShell

Существует несколько способов создания массива в PowerShell. Вот три распространенных метода:

Вариант №1: Использование оператора @() :

Синтаксис @() используется для создания массива в PowerShell. Например:

$массив = @(1, 2, 3, 4, 5)
 

Это создает массив, содержащий целые числа от 1 до 5. Точно так же вы можете создать массив строк с:

$array = @("яблоко", "банан", "манго")
 

Вариант №2: Использование оператора , :

Вы также можете создать массив, разделяя значения запятыми. Например:

$ массив = 1, 2, 3, 4, 5
 

Это создает массив, содержащий целые числа от 1 до 5.

Вариант № 3: Использование метода Range() :

Метод Range() — это встроенная функция PowerShell, которая создает массив целых чисел в указанном диапазоне. Например:

$массив = 1. .5
 

Это создает массив, содержащий целые числа от 1 до 5. Вы можете создать массив со смешанным типом:

Изменение элементов в массиве

Чтобы изменить элемент в массиве, вы можете использовать индекс массива для доступа к элементу и присвойте ему новое значение. Например:

$массив = @(1, 2, 3, 4, 5)
$массив[2] = 6
 

Это изменит элемент с индексом 2 в массиве $array с 3 на 6.

Добавление элементов в массив

Чтобы добавить элемент в массив, вы можете использовать оператор += . Например:

$массив = @(1, 2, 3, 4, 5)
$массив += 6
 

Это добавит элемент 6 в конец массива $array . Вы также можете использовать метод «Добавить()», чтобы добавить элемент в массив:

$массив = @()
$массив.Добавить(1)
$массив.Добавить(2)
$массив.Добавить(3)
 

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

#Инициализировать массив
$массив = 1, 2, 3
#Добавить несколько элементов в массив
$массив += 4, 5, 6
 

Добавить объект в массив в PowerShell

Объекты можно размещать в массиве как:

# Создаем массив объектов
$object1 = [pscustomobject]@{
    Имя = "Джон"
    Возраст = 30
}
$object2 = [pscustomobject]@{
    Имя = "Джейн"
    Возраст = 25
}
$массив = @($объект1, $объект2)
 

Это создает массив объектов с различными типами данных в качестве его элементов. Вы можете создать массив со смешанным типом:

# Создаем массив смешанного типа
$массив = @(1, "яблоко", $объект1)
 

PowerShell для разделения строки на массив

Чтобы разделить строку на массив в PowerShell, вы можете использовать метод Split() . Метод Split() принимает разделитель в качестве аргумента и возвращает массив подстрок, разделенных указанным разделителем.

Например, чтобы разделить строку по символу запятой, вы можете использовать следующий код:

$строка = "1,2,3,4,5"
$массив = $string.Split(",")
 

Эта оболочка PowerShell разбивает строку, разделенную запятыми, на массив.

Преобразование массива в строку в PowerShell

Чтобы преобразовать массив в строку в PowerShell, вы можете использовать оператор -join . Этот оператор принимает массив в качестве входных данных и возвращает строку, состоящую из элементов массива, соединенных вместе с использованием указанного разделителя.

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

$ массив = 1, 2, 3, 4, 5
$string = $array -join ";"
 

Это приведет к тому, что $string будет установлено в строку "1;2;3;4;5" .

Удаление элементов из массива

Чтобы удалить элемент из массива, вы можете использовать метод Remove() или методы RemoveAt() или ArrayList по умолчанию System. Object[] не поддерживает удаление элементов. Этот метод удаляет первое вхождение указанного значения из массива. Например:

[System.Collections.ArrayList]$array = @(1, 2, 3, 4, 5)
$массив.Удалить(3)
 

Это удалит элемент 3 из массива $array . Вы также можете использовать оператор «RemoveAt», чтобы удалить элемент с определенным индексом из массива:

[System.Collections.ArrayList]$array = @(1, 2, 3, 4, 5)
$массив.RemoveAt(1)
 

Это удалит элемент 2 из массива.

Доступ к элементам массива

Вы можете использовать индекс массива для доступа к элементу массива. Индекс элемента массива — это его позиция в массиве. В PowerShell индексы массива начинаются с 0. Например:

$array = @("яблоко", "банан", "манго")
$элемент = $массив[2]
 

В этом примере $element будет присвоено значение «Mango», поскольку это элемент с индексом 2 в массиве $array. Вы можете получить доступ к элементам массива, используя их порядковый номер, например:

. 
#Получить элементы массива по индексу
$array[0] # Это вернет "яблоко"
$array[1] # Это вернет "банан"
 

Вы также можете использовать цикл ForEach для перебора элементов массива: Вот пример того, как перебирать массив и печатать каждый элемент:

#получить все элементы массива
foreach ($ элемент в массиве $) {
    $элемент записи-хоста
}
 

Длина массива в PowerShell

Чтобы получить длину массива в PowerShell, можно использовать свойство Length или свойство Count . Например, чтобы получить количество элементов в массиве целых чисел, вы можете использовать любой из следующих подходов:

.
$массив = @(1, 2, 3, 4, 5)
$длина = $массив.Длина
$количество = $массив.Количество
 

Сортировка массива

Чтобы отсортировать массив, используйте командлет Sort-Object :

$массив = @(5, 2, 4, 1, 3)
$ отсортированный массив = $ массив | Сортировать-Объект
 

Это отсортирует массив в порядке возрастания. Точно так же, чтобы отсортировать массив в порядке убывания, используйте переключатель -Descending.

$массив = @(1, 3, 5, 2, 4)
$SortedArray = $массив | Сортировать-объект - по убыванию
$сортированный массив
 

Фильтровать массив в PowerShell

Чтобы отфильтровать массив, используйте кнопку 9Командлет 0044 Where-Object :

$массив = @(1, 2, 3, 4, 5)
$FilteredArray = $массив | Где-Объект { $_ -gt 3 }
 

Будет создан новый массив, содержащий только те элементы исходного массива, которые больше 3.

Проверить, содержит ли массив элемент в PowerShell

Чтобы проверить, содержит ли массив определенное значение в PowerShell, вы можно использовать метод Содержит . Вот пример:

$ массив = 1, 2, 3, 4, 5
Если ($массив.Содержит(3)) {
    Write-host "Массив содержит значение 3" -f Зеленый
}
Еще {
    Write-host "Массив не содержит значения 3" -f Желтый
}
 

Имейте в виду, что метод Содержит чувствителен к регистру, поэтому, если вы проверяете строковое значение, необходимо убедиться, что регистр совпадает. Кроме того, вы можете использовать оператор -содержит следующим образом:

$ массив = 1, 2, 3, 4, 5
если ($ массив - содержит 3) {
    Write-Output «Массив содержит значение 3».
}
 

Оператор -содержит нечувствителен к регистру. Вы также можете использовать оператор -in , чтобы проверить, содержит ли массив определенное значение:

$array = "Яблоко", "Апельсин", "Вишня"
Если ("Яблоко" - в массиве $){
    Write-host "Массив содержит значение "Apple"" -f Зеленый
}
Еще {
    Write-host "Массив не содержит значения "Apple"" -f Желтый
}
 

Подведение итогов

Использование массивов в сценариях PowerShell — это эффективный способ упростить сложные операции и сделать их более понятными и удобными для других (и вас самих) с течением времени. Ссылаясь на все элементы в наборе с помощью всего одной команды, вместо того, чтобы перечислять их по отдельности, вы экономите время и усилия, получая при этом тот же результат! Поэтому в следующий раз, когда вы будете писать сценарий, требующий одновременного доступа к нескольким элементам в наборе, подумайте об использовании вместо этого массива! Это просто может сэкономить вам драгоценное время в долгосрочной перспективе!

Создавайте лучшие сценарии с помощью PowerShell ArrayLists и Arrays

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

Не читатель? Посмотрите соответствующий видеоурок!

Не видите видео? Убедитесь, что ваш блокировщик рекламы отключен.

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

Предварительные условия/требования

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

  • Windows PowerShell 3 или более поздней версии
  • . NET Framework 4.5 или более поздней версии

Хотите больше подобных советов? Посетите мой личный блог PowerShell по адресу: https://nkasco.com/FriendsOfATA

Создание массивов с помощью PowerShell

Существует множество различных способов создания массивов с помощью PowerShell. Предположим, у вас есть список имен, которые вам нужно как-то обработать, как показано ниже.

 Джон
Сюзи
Джим
Джонни
Carrie 

Построение массивов с помощью элементов, разделенных запятыми

Самый простой способ создать массив — просто назначить известные входные данные, разделенные запятыми, переменной, как показано ниже.

 $BasicArray = "Джон", "Сьюзи", "Джим", "Джонни", "Кэрри" 

Если вы запустите метод GetType() , доступный для всех объектов в PowerShell, вы увидите, что успешно создал массив, указанный свойством BaseType , показанным ниже.

 PS51> $BasicArray.GetType()
Базовый тип имени IsPublic IsSerial
-------- -------- ---- --------
True True Object[] System.Array 

Использование оператора подвыражения

Вы также можете создавать массивы в PowerShell с помощью оператора подвыражения. Эта концепция обычно используется, когда вы не знаете, сколько элементов будет добавлено в ваш массив. Результат может содержать ноль или много элементов при создании.

Обратите внимание, что массив с именем $MyArray был создан с нулевыми элементами внутри.

 # Создать пустой массив с оператором подвыражения
PS51> $MyArray = @()
PS51> $MyArray.count
0 

Использование оператора диапазона

Массивы предназначены не только для хранения строк, как показано выше. Вы также можете создавать массивы с другими типами объектов, такими как целые числа.

Если вам нужен массив целых чисел в последовательном порядке, вы можете использовать ярлык и использовать оператор диапазона . . . Ниже вы можете видеть, что массив был создан с целыми числами от 2 до 5 с помощью одной строки кода.

 PS51> $NumberedArray = 2..5
PS51> $NumberedArray
2
3
4
5 

Создание коллекций PowerShell ArrayList

Использование PowerShell ArrayList также является способом хранения списка элементов с помощью PowerShell. Класс ArrayList является частью пространства имен System.Collections в .NET. Создав новый объект этого типа, вы затем сможете хранить объекты в ArrayList.

Ниже видно, что вам необходимо явно создать объект ArrayList с помощью командлета New-Object или путем приведения стандартного массива к объекту ArrayList.

Обратите внимание, что в данном случае BaseType является объектом, тогда как в приведенных выше примерах используются BaseTypes of Arrays, которые демонстрируют наследование от класса Object. В конечном итоге PowerShell обеспечивает доступ к системе типов .NET.

 PS51> $MyArrayList = New-Object -TypeName "System. Collections.ArrayList"
# Преобразование массива в ArrayList также является приемлемым вариантом
PS51> $MyArrayList = [System.Collections.ArrayList]@()
PS51> $MyArrayList.GetType()
Базовый тип имени IsPublic IsSerial
-------- -------- ---- --------
True True ArrayList System.Object 

Добавление элементов в массив

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

Чтобы добавить элементы в существующую коллекцию, вы можете использовать оператор += или метод Добавить . Но знайте, что есть существенные различия в том, как они работают.

Когда вы создаете стандартный массив с @() , вы будете использовать оператор += , но для добавления элементов в ArrayList вы должны использовать Добавить метод . Эти методы отличаются тем, что оператор += на самом деле уничтожает существующий массив и создает новый с новым элементом.

Чтобы продемонстрировать, как вы увидите ниже, вы можете ссылаться на свойство IsFixedSize для массива или ArrayList, чтобы узнать, что является неизменным, а что нет.

 PS51> $BasicArray.IsFixedSize
Истинный
PS51> $MyArrayList.IsFixedSize
False 

Поскольку базовый массив представляет собой набор фиксированного размера, его нельзя изменить.

Попытка использовать метод Add() с массивом фиксированного размера приведет к ошибке из-за фиксированного размера. Ниже вы можете увидеть несколько примеров, в которых вы можете успешно добавлять элементы в массив.

 # НЕ работает
$BasicArray.Add("Нейт")
#Работает
$BasicArray += "Нейт"
$MyArrayList.Add("Нейт")
$MyArrayList += "Nate" 

Удаление элементов из массива

Теперь, когда вы лучше понимаете, как добавлять элементы в массив, давайте рассмотрим несколько способов удаления элементов из массива.

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

 $NewBasicArray = $BasicArray -ne "Nate" 

Поскольку список ArrayList не является фиксированным, вы можете удалить из него элементы с помощью метода Remove() . Это один из сценариев, в котором использование ArrayList может принести вам пользу, если вы планируете часто добавлять/удалять элементы.

 $MyArrayList.Remove("Nate") 

Извлечение определенных элементов из массива или ArrayList

Для извлечения определенных элементов из массива или ArrayList можно использовать множество различных методов. Как и в случае с другими объектами в PowerShell, вы можете получить доступ ко всем элементам массива, просто вызвав объект.

 PS51> $BasicArray
Джон
Сюзи
Джим
Джонни
Carrie 

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

 PS51> $BasicArray[0]
John 

И наоборот, вы также можете ссылаться на индексы в обратном направлении, используя тире (отрицательный индикатор) для вызова последних X элементов массива. Обычный способ найти последний элемент в массиве — использовать -1 , как показано ниже.

 PS51> $BasicArray[-1]
Carrie 

Оператор диапазона, о котором вы узнали выше, также можно использовать для извлечения объектов массива, следуя тому же методу вызова элементов. Допустим, вы хотите получить первые четыре имени в списке 9.0044 Массив $BasicArray .

Ниже вы можете указать диапазон индексов 0-3, которые вернут первые четыре элемента.

 PS51> $BasicArray[0..3]
Джон
Сюзи
Джим
Johnny 

Оптимизация массивов с помощью PowerShell

Теперь, когда вы хорошо знаете, как создавать массивы и управлять ими, какой из них следует использовать? Чтобы ответить на этот вопрос, давайте рассмотрим несколько примеров с командлетом Measure-Command . Используя командлет Measure-Command , вы лучше поймете, сколько времени требуется командам для обработки элементов по мере их передачи по конвейеру.

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

Давайте применим то, что вы только что узнали в предыдущем разделе о разнице между += и использованием метода Add() с циклом из 50 000 элементов.

Сначала создайте пустой массив и пустой список ArrayList, как показано ниже.

 PS51> $MyArray = @()
PS51> $MyArrayList = [System.Collections.ArrayList]@() 

Затем заполните 50 000 элементов в каждой коллекции с помощью оператора диапазона и цикла foreach , как показано ниже.

 @(0..50000).foreach({$MyArray += $_})
@(0. .50000).foreach({$MyArrayList.Add($_)}) 

Наконец, заключите свои команды в выражение и передайте это выражение командлету Measure-Command . Выполняя выражение с помощью Measure-Command , вы можете увидеть, сколько времени на самом деле требуется для выполнения каждого процесса.

Имейте в виду, что, как вы узнали ранее, += фактически создает новый массив, а не добавляет его к фиксированному.

 PS51> Измерение-команда-выражение {@(0..50000).foreach({$MyArray += $_})}
Дней : 0
Часы : 0
Минуты : 0
Секунды: 59
Миллисекунды: 58
Клещи: 590585963
Всего дней: 0,000683548568287037
Всего часов: 0,0164051656388889Всего минут: 0,984309938333333
Всего секунд: 59.0585963
Всего миллисекунд: 59058,5963
PS51> Измерение-команда-выражение {@(0..50000).foreach({$MyArrayList.Add($_)})}
Дней : 0
Часы : 0
Минуты : 0
Секунд : 0
Миллисекунды: 139
Тиков: 1399989
Всего дней: 1.62035763888889E-06
Всего часов: 3,88885833333333E-05
Всего минут: 0,002333315
Всего секунд: 0,1399989
Всего миллисекунд: 139,9989 

Результат? Почти 60 секунд против 139 миллисекунд !

Как видите, гораздо быстрее использовать ArrayList для больших коллекций, чем использовать массив фиксированного размера.