Сталкиваясь с хэш-таблицами впервые, вы можете задаваться вопросом, что они такое и какую ключевую роль они играют в ваших сценариях или командах. Не волнуйтесь! В этом руководстве вы найдете все необходимое для начала работы с использованием хэш-таблиц в PowerShell.
Вкратце, хэш-таблицы позволяют вам хранить и манипулировать данными с использованием пар ключ-значение, к которым можно быстро и эффективно получить доступ. И в этом руководстве вы узнаете основы работы с хэш-таблицами и как использовать их в ваших сценариях и командах PowerShell.
Читайте далее и начинайте расширять свой набор навыков с помощью хэш-таблиц PowerShell!
Предварительные требования
Это практическое руководство, поэтому, чтобы следовать за ним, убедитесь, что у вас установлена и настроена система с PowerShell версии 5 и выше. В этом руководстве используется Windows 10 с PowerShell 7, но другие версии PowerShell и Windows также подойдут.
Создание хэш-таблицы в PowerShell
Получение конкретных данных может превратиться в “иголку в стоге сена” в какой-то момент. Но с помощью хэш-таблиц вы можете быстро искать определенные элементы в обширной коллекции данных.
В PowerShell хэш-таблицы являются гибкими структурами данных, которые используются во многих случаях, таких как хранение конфигурационных данных, передача аргументов в cmdlet’ы и хранение данных в сценарии.
Чтобы увидеть, как работает хэш-таблица в PowerShell, вам сначала нужно создать ее следующим образом:
1. Откройте сеанс PowerShell и запустите следующую команду, которая не выводит никакого результата, но объявляет переменную с именем name
, ссылается на пустой хэш-таблицы.
Как видите ниже, подобно массивам в PowerShell, хэш-таблицы определяются с помощью символа @
.
2. Затем выполните следующую команду, чтобы узнать тип переменной name
(GetType()
).
Тип переменной name
– это Hashtable, как показано ниже. Эта информация подтверждает успешное создание хэш-таблицы.

3. После проверки хэш-таблицы выполните следующий код, чтобы проверить, является ли она пустой или нет.
Данный код определяет, равно ли значение свойства Count
(-eq
) 0
и выводит соответствующее сообщение.
Ниже вы можете видеть, что хеш-таблица пуста, так как вы только что создали ее, и в ней нет определенных пар ключ-значение.

Добавление элементов в хеш-таблицу PowerShell
Вы только что создали почти пустую хеш-таблицу PowerShell, которая может быть полезна только при добавлении элементов. Как это сделать? Добавив пары ключ-значение в хеш-таблицу.
Аналогично массиву, но вместо использования целых чисел в качестве индексов, хеш-таблица PowerShell использует ключи (которые могут быть любого типа данных) для идентификации значений. Эта функция позволяет быстро добавлять, извлекать и удалять элементы из хеш-таблицы, так как ключ быстро находит соответствующее значение.
Ниже приведен синтаксис добавления пары ключ-значение в хеш-таблицу PowerShell, где:
$hashtable
– имя хеш-таблицы.$key
– имя ключа, который не чувствителен к регистру. Например, “FirstName” и “firstname” будут считаться одним и тем же ключом в хеш-таблице$value
– значение, связанное с ключом.
Запустите следующий код, который не выводит данные в консоль, но объявляет пары ключ-значение и добавляет их в вашу хеш-таблицу ($name
).
В хеш-таблице ключ позволяет выполнить хэширование, которое отображает ключ на конкретное место во внутренней структуре данных хеш-таблицы.
? Значения в хеш-таблице могут быть любого типа, такие как числа, строки, массивы, объекты и другие типы данных.
Теперь запустите код ниже, чтобы проверить, пуста ли ваша хэш-таблица.
Как показано ниже, вы получите сообщение о том, что на этот раз хэш-таблица не пуста.

Получение элементов из хэш-таблицы PowerShell
Предположим, что вы уверены, что ваша хэш-таблица не пуста. Как вы узнаете, какие элементы существуют в вашей хэш-таблице? К счастью, вы также можете получить элементы из своей хэш-таблицы.
Запустите код ниже, чтобы извлечь и вывести (Write-Output
) все элементы из вашей хэш-таблицы в виде пар ключ-значение, по одной на строку.`

Теперь запустите код ниже, чтобы извлечь и вывести (Write-Output
) все элементы из хэш-таблицы на консоль.
? Обратите внимание, что вы часто будете использовать следующий код в этом руководстве. Вы можете избежать копирования и вставки одного и того же кода несколько раз, создав функцию, но это выходит за рамки этого руководства.
На этот раз вы можете видеть указания на ключи и значения среди перечисленных элементов.

Создание хэш-таблиц с предопределенными значениями
До сих пор вы только смотрели на создание пустых хэш-таблиц. Но если вы знаете, что определенные значения всегда будут нужны в вашей хэш-таблице, вы можете создать ее с предопределенными значениями.
Хэш-таблицы с предопределенными значениями могут сэкономить время и сделать ваш код более эффективным, поскольку вам не нужно будет добавлять значения в хэш-таблицу позже.
? Обратите внимание, что создание хэш-таблиц не производит вывода. Но не волнуйтесь. В этом руководстве вы будете проверять каждую хэш-таблицу после ее создания.
1. Выполните следующую команду, чтобы создать хэш-таблицу ($hashtable1
) с тремя парами ключ-значение.
2. Затем выполните следующий код для проверки существования новой хэш-таблицы (hashtable1
).
Вы увидите, что значения для каждой пары ключ-значение выводятся на экран, как ожидается. Этот вывод подтверждает, что предопределенные значения хранятся в соответствующих местах в хэш-таблице.

3. Теперь выполните следующий код, чтобы создать хэш-таблицу ($hashtable2
) с предопределенными значениями с использованием цикла (или массива).
4. Наконец, выполните следующий код, чтобы проверить, что новая хэш-таблица (hashtable2
) была успешно создана.
Ниже приведен вывод, подтверждающий, что метод с использованием цикла работает при создании хэш-таблицы с предопределенными значениями. Но поскольку элементы перечислены случайным образом, перейдите к следующему разделу для исправления.

Создание упорядоченного списка элементов в хэш-таблицах
По умолчанию элементы в хэш-таблице хранятся в произвольном порядке. Но что делать, если вам нужен упорядоченный список? Вы также можете создать упорядоченный список элементов в ваших хэш-таблицах, чтобы упорядочить данные в определенном порядке.
Чтобы создать упорядоченный список элементов в вашей хэш-таблице, используйте атрибут [ordered]
следующим образом:
1. Запустите следующий код, чтобы создать упорядоченный список элементов в хэш-таблице ($hashtable3
).
2. Затем запустите следующий код, чтобы подтвердить успешное создание упорядоченного списка хэш-таблиц.
Как показано ниже, перечисленные элементы остаются в том порядке, в котором вы их определили при создании хэш-таблицы.
Некоторые возможные преимущества использования упорядоченной хэш-таблицы включают, но не ограничены следующим:
Benefits | Description |
Easier to read and debug | The elements are displayed in a predictable order, which can be especially useful if you work with many elements of a large hashtable. |
Improved performance | An ordered hashtable can be more efficient when accessing elements frequently in a specific order. |

3. Наконец, вызовите вашу упорядоченную хэш-таблицу ($hashtable3
), чтобы убедиться, что вы по-прежнему получите упорядоченный список элементов.
Приведенный ниже вывод подтверждает, что вы по-прежнему получите упорядоченный список элементов независимо от того, как вы обращаетесь к вашей хэш-таблице.

Обновление существующих элементов в хэш-таблицах
Данные постоянно меняются, и если у вас есть существующие хэш-таблицы, обновление их является важной задачей. Например, вы используете хэш-таблицу для хранения значений конфигурации. В этом случае вам может потребоваться обновить значение ключа, если конфигурация изменилась.
Для обновления хэш-таблицы PowerShell оператор присваивания =
сделает все, как показано ниже:
1. Запустите следующую команду, которая не выводит результат, но обновляет значение ключа Key2
в $hashtable3
на NewValue2
.
Затем выполните следующую команду, чтобы Add()
добавить новую пару ключ-значение (Key4 = NewValue4
) в хэш-таблицу ($hashtable3
).
Добавление новой пары ключ-значение не выводит результат, как обновление существующих списков в хэш-таблицах, но вы проверите изменения на следующем шаге.
3. Выполните следующий код, чтобы проверить, что значения ключей в вашей хэш-таблице ($hashtable3
) были обновлены.

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

4. Теперь выполните следующий код, который использует метод Contains()
для проверки, существует ли ключ, который вы пытаетесь добавить, уже в хэш-таблице перед добавлением пары ключ-значение.
Если новый ключ не существует, вы получите сообщение ниже, говорящее, что новый ключ был добавлен в хэш-таблицу.

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

5. Наконец, выполните код ниже, чтобы получить все элементы вашей хэш-таблицы ($hashtable3
).
Ниже вы можете увидеть только что добавленный ключ (Key5) и другие элементы, которые вы добавили до этого в хэш-таблицу.

Удаление элементов из хэш-таблицы
Слишком много элементов в хэш-таблице, особенно ненужных, может привести только к путанице. Удаление элементов, которые больше не актуальны или не нужны в вашей хэш-таблице, будет вам в помощь.
Предположим, что ваша хэш-таблица содержит список пользователей и их информацию. Если это так, удалите пользователей из вашей хэш-таблицы, если они больше не активны.
Выполните код ниже, чтобы удалить конкретный элемент (Key1
) из вашей хэш-таблицы ($hashtable3
).
Ниже выводится сообщение о том, что ключ был удален. Но если ключ не существует, вы получите сообщение о том, что ключ не найден.

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

Вывод
С помощью структуры пар ключ-значение и быстрого доступа, хэш-таблица в PowerShell отлично подходит для управления большим объемом данных в различных сценариях. В этом руководстве вы узнали, как создавать, добавлять, обновлять и удалять элементы из хэш-таблиц. Все это дает вам навыки эффективного использования хэш-таблиц в ваших сценариях.
Почему бы не использовать только что полученные навыки на новом уровне? Рассмотрите возможность включения хэш-таблиц в ваши сценарии для выполнения более сложных задач, таких как обработка данных и трансформация. Или попробуйте комбинировать хэш-таблицы с другими структурами данных в PowerShell, такими как массивы и объекты, для решения более сложных задач?