gpt4 book ai didi

powershell - 从 CLI 发送可变数量的键值对

转载 作者:行者123 更新时间:2023-12-03 12:45:42 24 4
gpt4 key购买 nike

我需要执行 PowerShell 脚本作为我的 TFS 构建管道的一部分。 PowerShell 脚本是通用的,并执行为其提供的给定 AWS Cloud Formation 模板。我需要开发人员为模板提供表示模板参数的键/值对列表。由于他们可以使用它来执行任何 Cloud Formation 模板,因此输入参数会有所不同。

如何创建一个基于键/值的输入参数,我可以将它作为参数传递给另一个接受参数哈希图的 PowerShell 对象?

以下伪代码是我想要实现的

param(
[Parameter(Mandatory=$true)][string]$environment,
[KeyValuePair[]]$templateParameters
)
New-CFNStack -StackName $stackName -TemplateURL $fullTemplateUrlPath -Parameters @( $templateParameters)

我可以显式地创建参数并像这样传递它们:
$bucketNameParameter = new-object Amazon.CloudFormation.Model.Parameter
$bucketNameParameter.ParameterKey = "bucketname"
$bucketNameParameter.ParameterValue = "FooBar"
$isVersionedParameter = new-object Amazon.CloudFormation.Model.Parameter
$isVersionedParameter.ParameterKey = "bucketname"
$isVersionedParameter.ParameterValue = "FooBar"
New-CFNStack -StackName $stackName -TemplateURL $fullTemplateUrlPath -Parameters @( $environmentParameter, @isVersionedParameter )

由于每个模板可以采用完全不同的参数,我想让这个脚本灵活以方便重用。解决这个问题的最 PowerShell 方法是什么?

最佳答案

您可以接受 [hashtable] 实例并创建您的 [Amazon.CloudFormation.Model.Parameter]基于其条目的实例:

param(
[Parameter(Mandatory=$true)] [string] $environment,
[hashtable] $templateParameters
)

# Convert the hashtable's entries to an array of
# [Amazon.CloudFormation.Model.Parameter] instances.
$params = $templateParameters.GetEnumerator() | ForEach-Object {
$param = New-Object Amazon.CloudFormation.Model.Parameter
$param.ParameterKey = $_.Key
$param.ParameterValue = $_.Value
$param # output
}

New-CFNStack -StackName $stackName -TemplateURL $fullTemplateUrlPath -Parameters $params

注意使用 .GetEnumerator() ,这是枚举哈希表的条目并通过管道发送它们所必需的;默认情况下,PowerShell 通过管道整体发送哈希表。

使用您的(修改为唯一的)示例值,您可以将脚本调用为:
./script.ps1 -environment foo `
-templateParameters @{ bucketName1 = 'FooBar1'; bucketName2 = 'FooBar2' }

关于powershell - 从 CLI 发送可变数量的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50751408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com