Cover Image

awscliで出力したSubnetのjsonをPowerShellでcsvとして部分出力する

2023-3-30 - 読み終える時間: ~1 分

や~、けっこう悩んだ。

まずNameタグなんかは1行でスパッと抜き出せなくて、もっといい書き方ないのかな~ってなってる。

とりあえず以下がそのコード。

### aws ec2 describe-subnets で出力したjson読み込み
$subnet = Get-Content .\describe-subnets.json | ConvertFrom-Json
### カウント用に1要素なにか配列にする
$subnetid = @($subnet.Subnets.SubnetId)

### ヘッダーを1行目に記載
$csvheader = "SubnetName," + "SubnetId," + "CidrBlock," + "Ipv6CidrBlock," + "VpcId," + "AvailabilityZone"
$csvheader | Out-File -Force -Encoding oem -FilePath .\subnets.csv

### 中身を入れていく
for ($i = 0; $i -lt $subnetid.Length; $i++) {
  ### Nameタグ取り出し
  $subnettags = $subnet.Subnets | where {$_.SubnetId -eq $subnet.Subnets.SubnetId[$i]}
  $subnetnametag = $subnettags.Tags | where {$_.Key -eq "Name"}
  $subnetnamevalue = $subnetnametag.Value
  ### NameタグがないときはN/Aを入れる
  $subnetname = if ($subnetnamevalue -eq $nul) {"N/A"}else{$subnetnamevalue}

  ### Ipv6も値が空ならN/Aを入れる
  $ipv6cidrblock = $subnet.Subnets | where {$_.SubnetId -eq $subnet.Subnets.SubnetId[$i]}
  $ipv6cidr = $ipv6cidrblock.Ipv6CidrBlockAssociationSet.Ipv6CidrBlock
  $ipv6block = if ($ipv6cidr -eq $nul) {"N/A"}else{$ipv6cidr}

  ### 中身を詰める
  $line = $subnetname + "," + $subnetid[$i] + "," + $subnet.Subnets.CidrBlock[$i] + "," + $ipv6block + "," + $subnet.Subnets.VpcId[$i] + "," + $subnet.Subnets.AvailabilityZone[$i]
  $line | Out-File -Append -Encoding oem -FilePath .\subnets.csv
}

今回はここまで