Как использовать Get-SSMParameterList CmdLet для обработки параметров с определенным префиксом - PullRequest
0 голосов
/ 22 сентября 2018

Я хочу написать скрипт 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в этом большинстве.

Я застрял на следующем:

  1. Я не знаю, какой синтаксис использовать для аргумента -ParameterFilter, чтобы сопоставить все параметры спрефикс /MyApp/

  2. Мне нужно подтверждение, что мне не нужно использовать -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

Правильно ли я понял это илиспособ сделать это без загрузки сборки?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Здесь поздно вечером, но, как и Грег, DLL загружается с модулем AWSPowerShell для меня.

PS C:\Users\ncox> Get-AWSPowerShellVersion

AWS Tools for Windows PowerShell
Version 3.3.390.0
Copyright 2012-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.

Amazon Web Services SDK for .NET
Core Runtime Version 3.3.28.0
Copyright 2009-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.

...

PS C:\Users\ncox> [appdomain]::currentdomain.getassemblies() |? FullName -Like "AWSSDK.SimpleSystems*" | select fullname

FullName
--------
AWSSDK.SimpleSystemsManagement, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604

PS C:\Users\ncox> 

В качестве альтернативы, возможно, вы могли бы использовать Get-SSMParametersByPath?

Get-SSMParametersByPath -Path '/...myPrefix...'
0 голосов
/ 15 ноября 2018

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

$p = new-object -typename Amazon.SimpleSystemsManagement.Model.ParameterStringFilter -property @{key="Name";Option="BeginsWith";Values="sandbox"}
Get-SSMParameterList -ParameterFilter @($p)

Это дает мне правильные отфильтрованные результаты.

Обратите внимание, что -ParameterFilter принимает массив ParameterStringFilter.

Я использую PowerShell версии 5.1.17134.228 (как показано в $ PSVERSIONTABLE) и Get-AWSPowerShellVersion возвращает «Версия 3.3.215.0»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...