我想编写一个 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
另一个似乎需要我加载AWSSDK.SimpleSystemsManagement.dll
程序集的 SSM CmdLet 是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
我是否理解这一点,或者有没有办法在不加载程序集的情况下做到这一点?