You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS PowerShell Get-EC2SecurityGroup获取安全组及IP详情的语法问题

问题原因

你现有的代码无法直接输出可读的IP信息,是因为IpRanges属性本身是一个对象集合,直接通过Select查询只会展示对象类型,不会展开其中的CidrIp字段(也就是你需要的关联IP段信息)。

优化后可用代码

foreach ($g in Get-EC2SecurityGroup ) {
    Write-Host "`n安全组ID: $($g.GroupId) | 安全组描述: $($g.Description)"
    Write-Host "------------------------入站规则明细------------------------"
    $g.IpPermissions | ForEach-Object {
        # 展开IpRanges里的每个CIDR段单独输出
        foreach ($ipRange in $_.IpRanges) {
            [PSCustomObject]@{
                协议 = $_.IpProtocol
                端口范围 = if ($_.ToPort -eq $_.FromPort) { $_.ToPort } else { "$($_.FromPort)-$($_.ToPort)" }
                授权IP段 = $ipRange.CidrIp
                规则描述 = $ipRange.Description
            }
        }
    } | Format-Table -AutoSize
}

代码说明

  • 自动区分单端口和端口范围,输出更易读
  • 展开了IpRanges集合,直接展示每个授权的CIDR IP段,同时会输出IP段对应的规则描述(如果有配置的话)
  • 按安全组分隔输出,结构更清晰
  • 如果需要同时查询出站规则,补充$g.IpPermissionsEgress的遍历逻辑即可

可选:导出结果到CSV文件

如果你需要把结果保存为本地文件方便后续查看,可以使用如下逻辑:

$allSgRules = @()
foreach ($g in Get-EC2SecurityGroup ) {
    $g.IpPermissions | ForEach-Object {
        foreach ($ipRange in $_.IpRanges) {
            $allSgRules += [PSCustomObject]@{
                安全组ID = $g.GroupId
                安全组描述 = $g.Description
                协议 = $_.IpProtocol
                端口范围 = if ($_.ToPort -eq $_.FromPort) { $_.ToPort } else { "$($_.FromPort)-$($_.ToPort)" }
                授权IP段 = $ipRange.CidrIp
                规则描述 = $ipRange.Description
            }
        }
    }
}
$allSgRules | Export-Csv -Path "./EC2安全组规则明细.csv" -Encoding UTF8 -NoTypeInformation

内容的提问来源于stack exchange,提问作者Kez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:18:01