Я хочу написать скрипт Powershell, который будет получать все параметры из хранилища параметров AWS SSM, которые принадлежат моему приложению, а затем выполнять итерацию по параметрам и выполнять действия для каждого из них.Параметры для моего приложения определяются по определенному префиксу, например, они называются:
/MyApp/Component1/Param1
/MyApp/Component1/Param2
/MyApp/Component2/Param1
...
Я новичок в Powershell, но моя отправная точка - использование AWS Get-SSMParameterList CmdLet, и отфильтруйте результаты по префиксу /MyApp/
.
. Из связанной документации я вижу, что один вызов Get-SSMParameterList
возвращает результаты с максимальной отдачей, т. Е. Мне может понадобитьсявызывайте его повторно, передавая параметр -NextToken
, полученный от предыдущего вызова, чтобы гарантировать получение всех результатов. В этом ответе на связанный вопрос говорится, что «подавляющее большинство» AWS CmdLets обрабатывает пейджинг автоматически, если -NextToken
и -MaxResult
не указаны, но мне не понятно из документации, включен ли этот CmdLetв этом большинстве.
Я застрял на следующем:
Я не знаю, какой синтаксис использовать для аргумента -ParameterFilter
, чтобы сопоставить все параметры спрефикс /MyApp/
Мне нужно подтверждение, что мне не нужно использовать -NextToken
, чтобы получить все результаты, или, если мне это нужно, узнать, какзахватить значение NextToken
, возвращаемое API, чтобы я мог выполнить цикл и получить следующую страницу результатов.
Может кто-нибудь помочь с этим?
ОБНОВЛЕНИЕ
По пункту 2 мой опыт подсказывает, что мне не нужно использовать -NextToken, и на сегодняшний день всегда получал все результаты за один вызов.Но я думаю, это может зависеть от количества параметров в наборе результатов.
Для пункта 1 я нашел способ сделать это, а именно:
[System.Reflection.Assembly]::LoadFile(
"...\AWSSDK.SimpleSystemsManagement.dll")
...
$p = New-Object Amazon.SimpleSystemsManagement.Model.ParameterStringFilter
$p.Key = "Name"
$p.Option = "BeginsWith"
$p.Values = "/...my prefix..."
Get-SSMParameterList -ParameterFilter $p ...
, но этокажется уродливым, поскольку мне нужно знать, где установлена сборка AWSSDK.SimpleSystemsManagement.dll
, чтобы использовать Get-SSMParameterList
CmdLet.Как минимум, я бы ожидал использовать:
$p = New-SSMParameterFilter -Key "Name" -Option "BeginsWith" -Values "..."
Get-SSMParameterList -ParameterFilter $p
Другой CmdLet SSM, который требует от меня загрузки AWSSDK.SimpleSystemsManagement.dll
сборки, равен Add-SSMResourceTag
, для параметра -Tags
которого требуется массивиз Amazon.SimpleSystemsManagement.Model.Tag
объектов:
$tag = New-Object Amazon.SimpleSystemsManagement.Model.Tag
$tag.Key = ...
$tag.Value = ...
Add-SSMResourceTag -Tags ($tag)
Почему параметр -Tags
не принимает Hashtable вроде Add-SQSResourceTag
?
$tags = @{}
$tags.add(key, value)
Add-SQSResourceTag -Tags $tags
Правильно ли я понял это илиспособ сделать это без загрузки сборки?