Использование хеш-таблиц в PowerShell, а также в некоторых сценариях Azure.

Если вы ИТ-специалист и создаете сценарии PowerShell для улучшения своей среды, вы, вероятно, используете переменные для хранения данных, что вполне приемлемо при работе со сценариями относительно низкой сложности. Но когда все становится больше, использование массивов и хеш-таблиц в PowerShell становится необходимостью.
В этом руководстве мы рассмотрим несколько основных шагов, необходимых для управления с помощью PowerShell. Это может быть полезно при запуске нескольких циклов, когда вы хотите сохранить информацию для будущего использования.
Поскольку мы изучаем хэш-таблицы, мы будем использовать их в нескольких примерах с Microsoft Azure, и я надеюсь, что вы сможете оценить ценность этой функции и добавить ее в свои собственные сценарии в будущем.
Начиная с хеш-таблиц
Хэш-таблица — это пара ключ/значение, и она очень полезна при использовании в сценариях PowerShell. Чтобы создать хеш-таблицу, просто введите следующий командлет PowerShell.
$ErrorTable = @{}
Пустая хеш-таблица становится полезной, когда мы можем добавлять и удалять данные из нее или из нее. Давайте добавим три записи в только что созданную хеш-таблицу.
$ErrorTable.Add("Error1", "Не удалось найти") $ErrorTable.Add("Error2", "Вторая ошибка") $ErrorTable.Add("Error3", "Третья ошибка")
Когда мы хотим проверить содержимое хеш-таблицы, нам просто нужно ввести ее имя, например, $ErrorTable.
Если мы хотим удалить содержимое из хэш-таблицы, мы можем использовать следующий командлет, и мы собираемся снова просмотреть содержимое, чтобы проверить, действительно ли был удален третий элемент.
$ErrorTable.Remove(“Error3”)
Получение данных
Теперь, когда мы можем добавлять и удалять данные из хеш-таблицы, нашим следующим логическим шагом будет извлечение информации, и это полезно при поиске информации в вашем скрипте.
Если мы хотим получить значение записи Error01, мы можем использовать несколько методов. Мои любимые:
$ErrorTable.Error01 $ErrorTable.Item("Error02")
Получение ключей и значений
Хеш-таблица — это набор пар ключ/значение. Мы можем перечислить каждый из них, используя этот короткий скрипт:
$ErrorTable.Keys $ErrorTable.Values
Распространенной задачей при использовании PowerShell является возможность зацикливания хеш-таблицы и получения информации о ключах и значениях, и иногда это не так просто использовать. В следующем коде отображается вся хеш-таблица, отображающая значения столбцов ключа и значения.
ForEach ($vError in $ErrorTable.Keys){ Write-Host Write-Host "Имя ошибки............: " $($vError) Write-Host "Значение ошибки...........: " $ErrorTable[$vError] Write-Host }
Пришло время использовать то, что мы рассмотрели до сих пор, в паре простых сценариев, чтобы помочь понять хеш-таблицы и начать добавлять их в свой набор инструментов PowerShell!
Сценарий 1. Создание отчета о хранилищах ключей для каждого местоположения в вашей подписке.
Имейте в виду, что PowerShell — это мощный инструмент, и существует множество способов добиться одного и того же результата. Я постараюсь показать несколько разных способов получения той же информации, и вы, вероятно, через некоторое время найдете лучшие и более эффективные способы (если вы это сделаете, пожалуйста, прокомментируйте здесь, чтобы поделиться с остальным сообществом!)
Допустим, нам нужен отчет о том, сколько Key Vault у нас есть в нашей текущей подписке по регионам. Я могу придумать несколько способов узнать эту информацию. Моим первым выбором было бы составить список Key Vault для каждого региона и подсчитать записи, и это дало бы мне результат, это была бы пара командлетов, как показано ниже:
Get-AzureRMKeyVault | Group-Object Location
Другой вариант — использовать , однако для этого потребуется строка для каждого местоположения. Вот командлет, чтобы узнать количество Key Vaults в одном месте.
(Get-AzureRMKeyVault | Where-Object { $_.location -eq “CanadaCentral” }).count
Все эти варианты выше действительны (мой любимый — первый, потому что я ленивый!). Но мы могли бы получить те же результаты, используя хэш-таблицы — что, конечно же, является темой этой статьи. Мы могли бы использовать приведенный ниже код, и мы бы перечислили все Key Vault, и для каждого Key Vault мы создадим новую пару ключ/значение или обновим существующую.
$KVList = @{} Get-AzureRmKeyVault | % { if (!($KVList.item($_.Location)){ $KVList.Add($_.Location,1) }Else{ $KvList.Item($_.location) = $kvlist.Item( $_.location) + 1 } } $KVList
Сценарий 2. Проверка разрешений в Key Vault
В предыдущем примере мы использовали хеш-таблицы, чтобы продемонстрировать, как получить одинаковые результаты, используя разные методы. Я вижу полезный ресурс для использования хеш-таблиц для отслеживания ошибок или когда нам нужно проверить определенные условия. Хорошим примером может быть создание отчета обо всех хранилищах ключей и проверка наличия у текущей учетной записи разрешений на перечисление секретов/ключей/сертификатов.
Используя приведенный ниже код, мы создаем хеш-таблицы с именем $KVPermissionReport и пытаемся перечислить всех доступных Key Vault, для каждого отдельного Key Vault мы регистрируем успех или неудачу. Результаты этой операции можно увидеть на изображении ниже.
$KVPermissionReport = @{} Get-AzureRmKeyVault | % { $vList = Get-AzureKeyVaultSecret -VaultName $_.VaultName -ErrorVariable vtmp -ErrorAction SilentlyContinue if ($vtmp){ $KVPermissionReport.Add($_.VaultName,"Ошибка разрешений") }Else{ $KVPermissionReport.Add($ _.VaultName,"Хорошо") } }
Хорошо, теперь у вас есть еще один инструмент в вашем наборе инструментов администратора!