Nina Simone
Nina Simone

Reputation: 3

Loop through individual id's in Powershell

I am running the following command in AWS:

$ aws ec2 describe-images \
    --owners self \
    --query 'reverse(sort_by(Images,&CreationDate))[:5].{id:ImageId,date:CreationDate}'
[
    {
        "id": "ami-0a1b2c3d4e5f60001",
        "date": "2018-11-28T17:16:38.000Z"
    },
    {
        "id": "ami-0a1b2c3d4e5f60002",
        "date": "2018-09-15T13:51:22.000Z"
    },
    {
        "id": "ami-0a1b2c3d4e5f60003",
        "date": "2018-08-19T10:22:45.000Z"
    },
    {
        "id": "ami-0a1b2c3d4e5f60004",
        "date": "2018-05-03T12:04:02.000Z"
    },
    {
        "id": "ami-0a1b2c3d4e5f60005",
        "date": "2017-12-13T17:16:38.000Z"
    }

]

I would like to use a foreach loop for each individual id. I have attempted this with text output, however, the foreach loop will only grab the first id. I am new to programming and not sure how I to make this work. I am limited to Powershell.

Upvotes: 0

Views: 613

Answers (1)

Theo
Theo

Reputation: 61178

If you capture this output, which is in JSON format in a variable say $json, you can do the following to iterate over the individual id properties:

# convert the JSON text to an array of PSObjects and loop through
($json | ConvertFrom-Json) | ForEach-Object {
    # do something using the items id property
    "Found ID: $($_.id)"
}

Or, if you like do it a bit differently you can use

$allItems = $json | ConvertFrom-Json
foreach ($item in $allItems) {
    # do something using the items id property
    "Found ID: $($item.id)"
}

The $() construct is needed to make sure PowerShell expands the value of $item.id into the string. You can get the same output string by doing "Found ID: {0}" -f $item.id

Upvotes: 1

Related Questions