在 foreach powershell 中添加值
Add values inside foreach powershell
我有以下代码:
foreach ($region in (Get-AWSRegion)) {
$images = aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ImageId]' | sort | uniq -c
}
$images
上面的代码给我类似的东西:
3 ami-123**
但我正在尝试将所有区域内的所有 AMI 集中在一起,因此它应该类似于:
9 ami-123**
当我尝试类似的操作时:
$images += aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ImageId]' | sort | uniq -c
我得到:
3 ami-123** 3 ami-123** 3 ami-123**
有办法吗?
三个紧迫的问题 - 首先,您在循环内不断覆盖 $images
的值,正如您发现的那样,您可以通过将 添加 来解决这个问题上一个结果集。
第二个问题是您实际上并没有针对 $region
,因此您不断从为 aws
配置的默认区域获得相同的结果 - 在循环内指定 --region $region
(假设 Get-AWSRegion
returns 区域标识符为字符串)。
第三个问题有点……基础 - aws
cli returns 一个字符串,所以你需要手动解析它并汇总结果 - 你可以这样做一个 [hashtable]
和一个简单的正则表达式模式:
# Create hashtable to aggregate results
$ImageIDCounts = @{}
foreach($region in Get-AWSRegion){
$perRegionCount = aws ec2 describe-instances --region $region --output text --query 'Reservations[*].Instances[*].[ImageId]' | sort | uniq -c
foreach($entry in $perRegionCount){
if($entry -match '^\s*(\d+)\s+(.*)$'){
$Count = $Matches[1] -as [int]
$ImageID = $Matches[2].Trim()
$ImageIDCounts[$ImageID] += $Count
}
}
}
$ImageIDCounts
现在每个唯一的 ImageID 包含一个条目,因此您可以:
$ami123count = $ImageIDCounts['ami-123']
我有以下代码:
foreach ($region in (Get-AWSRegion)) {
$images = aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ImageId]' | sort | uniq -c
}
$images
上面的代码给我类似的东西:
3 ami-123**
但我正在尝试将所有区域内的所有 AMI 集中在一起,因此它应该类似于:
9 ami-123**
当我尝试类似的操作时:
$images += aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ImageId]' | sort | uniq -c
我得到: 3 ami-123** 3 ami-123** 3 ami-123**
有办法吗?
三个紧迫的问题 - 首先,您在循环内不断覆盖 $images
的值,正如您发现的那样,您可以通过将 添加 来解决这个问题上一个结果集。
第二个问题是您实际上并没有针对 $region
,因此您不断从为 aws
配置的默认区域获得相同的结果 - 在循环内指定 --region $region
(假设 Get-AWSRegion
returns 区域标识符为字符串)。
第三个问题有点……基础 - aws
cli returns 一个字符串,所以你需要手动解析它并汇总结果 - 你可以这样做一个 [hashtable]
和一个简单的正则表达式模式:
# Create hashtable to aggregate results
$ImageIDCounts = @{}
foreach($region in Get-AWSRegion){
$perRegionCount = aws ec2 describe-instances --region $region --output text --query 'Reservations[*].Instances[*].[ImageId]' | sort | uniq -c
foreach($entry in $perRegionCount){
if($entry -match '^\s*(\d+)\s+(.*)$'){
$Count = $Matches[1] -as [int]
$ImageID = $Matches[2].Trim()
$ImageIDCounts[$ImageID] += $Count
}
}
}
$ImageIDCounts
现在每个唯一的 ImageID 包含一个条目,因此您可以:
$ami123count = $ImageIDCounts['ami-123']