Private/AWS/New-SilkTCOAWSRDSSnapshotList.ps1

function New-SilkTCOAWSRDSSnapshotList {
    param(
        [Parameter()]
        [string] $region,
        [Parameter()]
        [array] $liveIds
    )

    if (-not (Get-Module -Name AWS.Tools.RDS)) { Import-Module AWS.Tools.RDS -ErrorAction Stop }

    $p = @{}
    if ($region) { $p['Region'] = $region }

    # live instance ids let us spot orphaned snapshots (source db is gone)
    if (-not $liveIds) { $liveIds = (Get-RDSDBInstance @p).DBInstanceIdentifier }

    # default returns automated + manual. copies come back as manual with a source snap id
    $snaps = Get-RDSDBSnapshot @p

    $thelist = @()
    foreach ($s in $snaps) {
        $isCopy = [bool]$s.SourceDBSnapshotIdentifier
        # a copy is technically 'manual', we just call it out separately
        $class = if ($isCopy) { 'copy' } else { $s.SnapshotType }

        # SourceDBSnapshotIdentifier is a full arn, grab just the snap name for readability
        $copiedFromName = if ($isCopy) { ($s.SourceDBSnapshotIdentifier -split ':')[-1] } else { $null }

        $o = New-Object psobject
        $o | Add-Member -MemberType NoteProperty -Name SnapshotName -Value $s.DBSnapshotIdentifier
        $o | Add-Member -MemberType NoteProperty -Name SourceInstance -Value $s.DBInstanceIdentifier
        $o | Add-Member -MemberType NoteProperty -Name SourceInstanceResourceId -Value $s.DbiResourceId
        $o | Add-Member -MemberType NoteProperty -Name Class -Value $class
        $o | Add-Member -MemberType NoteProperty -Name SnapshotType -Value $s.SnapshotType
        $o | Add-Member -MemberType NoteProperty -Name IsCopy -Value $isCopy
        $o | Add-Member -MemberType NoteProperty -Name CopiedFrom -Value $s.SourceDBSnapshotIdentifier
        $o | Add-Member -MemberType NoteProperty -Name CopiedFromName -Value $copiedFromName
        $o | Add-Member -MemberType NoteProperty -Name SourceRegion -Value $s.SourceRegion
        $o | Add-Member -MemberType NoteProperty -Name Engine -Value $s.Engine
        $o | Add-Member -MemberType NoteProperty -Name SizeGB -Value $s.AllocatedStorage
        $o | Add-Member -MemberType NoteProperty -Name Encrypted -Value $s.Encrypted
        $o | Add-Member -MemberType NoteProperty -Name Created -Value $s.SnapshotCreateTime
        $o | Add-Member -MemberType NoteProperty -Name OriginalCreated -Value $s.OriginalSnapshotCreateTime
        $o | Add-Member -MemberType NoteProperty -Name Orphaned -Value ($s.DBInstanceIdentifier -notin $liveIds)

        $thelist += $o
    }

    return $thelist
}