在PowerShell中通过AWS CLI按LaunchTime统计近5天EC2实例数量问题
问题分析与解决
你的代码核心问题在于没有真正过滤实例,只是在--query参数里对每个实例的LaunchTime做了布尔判断,最终返回的是所有实例的ID和对应的判断结果,自然会得到总实例数。另外,统计逻辑也没有针对符合条件的实例做计数。
修正方案
要实现按LaunchTime筛选近5天的EC2实例并统计数量,需要用--filters参数先过滤实例,再通过--query提取数据或直接统计数量。
方案1:提取实例ID后统计数量
$getDays = Get-Date $5Days = $getDays.AddDays(-5).ToString('yyyy-MM-dd') # 通过filters筛选近5天创建的实例,再提取实例ID $instancesCreated = aws ec2 --profile $awsProfile --region $awsRegion describe-instances ` --filters "Name=launch-time,Values=$5Days-*" ` --query "Reservations[*].Instances[*].InstanceId" --output text # 分割文本并统计实例数量 $instanceCount = ($instancesCreated -split "`n").Count Write-Output "Total instances count in last 5 days : $instanceCount"
方案2:直接用query统计数量(更简洁)
$getDays = Get-Date $5Days = $getDays.AddDays(-5).ToString('yyyy-MM-dd') # 过滤后直接用length函数统计实例数 $instanceCount = aws ec2 --profile $awsProfile --region $awsRegion describe-instances ` --filters "Name=launch-time,Values=$5Days-*" ` --query "length(Reservations[*].Instances[*].InstanceId)" --output text Write-Output "Total instances count in last 5 days : $instanceCount"
关键说明
--filters "Name=launch-time,Values=$5Days-*":这是实现过滤的核心,AWS会自动匹配以指定日期开头的所有ISO 8601格式启动时间(比如2024-05-20T12:34:56.000Z),精准筛选近5天创建的实例。--output text:让AWS CLI返回纯文本格式,方便PowerShell处理统计。length()函数:在--query中直接计算符合条件的实例ID数组长度,省去后续文本分割步骤。
内容的提问来源于stack exchange,提问作者Money Times
相关产品推荐
相关产品推荐

