aClass.psm1

class aClass
{
    static $Type = 'A'

    static [PSCustomObject] MakeEC2IObj ([psobject] $obj )
    {
        $lo = [pscustomobject]@{
            Name = ($obj.Tags |
                Where-Object {$_.Key -match "Name"}).Value
            ID = $obj.InstanceId
            PrivateIP = $obj.PrivateIpAddress
            PublicIP = $obj.PublicIpAddress
            PublicDNS = $obj.PublicDnsName
            Type = $obj.InstanceType.Value
            SecurityGroupName = $obj.SecurityGroups.GroupName
            SecurityGroupID = $obj.SecurityGroups.GroupId
            Tags = $obj.Tags
            State = $obj.State.Name
            SubnetID = $obj.SubnetId
            VpcID = $obj.VpcId
            Object = $obj
        }
        $lo.PSObject.TypeNames.Insert(0,'SupSkiFun.AWS.EC2Instance.Info')
        return $lo
    }

    static [PSCustomObject] MakeIAMDObj ([psobject] $pol, [string] $doc)
    {
        $lo = [PSCustomObject]@{
            CreateDate = $pol.CreateDate
            VersionId = $pol.VersionId
            IsDefault = $pol.IsDefaultVersion
            Document = $doc
        }
        $lo.PSObject.TypeNames.Insert(0,'SupSkiFun.AWS.IAMPolDoc.Info')
        return $lo

    }

    static [psobject] MakeR53Change ([string] $Action, [psobject] $rr)
    {
        $rc = [Amazon.Route53.Model.Change]::new()
        $rc.Action = $Action
        $rc.ResourceRecordSet = $rr
        return $rc
    }

    static [pscustomobject] MakeR53Obj ([psobject] $rs)
    {
        $lo = [pscustomobject]@{
            FQDN = $rs.Name
            IP = $rs.ResourceRecords.Value
            Type = $rs.Type
            TTL = $rs.TTL
        }
        $lo.PSObject.TypeNames.Insert(0,'SupSkiFun.AWS.R53.Record.Info')
        return $lo
    }

    static [pscustomobject] MakeR53Obj ([psobject] $rc, [psobject] $rv, [string] $HostedZoneId)
    {
        $lo = [pscustomobject]@{
            FQDN = $rc.ResourceRecordSet.Name
            IP = $rc.ResourceRecordSet.ResourceRecords.Value
            Action = $rc.Action
            Type = $rc.ResourceRecordSet.Type
            TTL = $rc.ResourceRecordSet.TTL
            ZoneID = $HostedZoneId
            JobID = $rv.ID
            Status = $rv.Status
            SubmittedAt = $rv.SubmittedAt
        }
        $lo.PSObject.TypeNames.Insert(0,'SupSkiFun.AWS.R53.A.Record.Info')
        return $lo
    }

    static [psobject] MakeR53ResRec ([string] $FQDN, [Int32] $TTL, [ipaddress] $IP)
    {
        $rr = [Amazon.Route53.Model.ResourceRecordSet]::new()
        $rr.Name = $FQDN
        $rr.Type = [aClass]::Type
        $rr.TTL = $TTL
        $rr.ResourceRecords.Add(@{Value = $IP})
        return $rr
    }

    static [PSCustomObject] MakeVPCObj ([psobject] $obj , [hashtable] $exh )
    {
        $lo = [pscustomobject]@{
            Name = ($obj.Tags |
                Where-Object {$_.Key -match "Name"}).Value
            CidrBlock = $obj.CidrBlock
            VpcID = $obj.VpcId
            DhcpOptionsId = $obj.DhcpOptionsId
            IsDefault = $obj.IsDefault
            State = $obj.State.Value
            Tags = $obj.Tags
            DnsHostNames = $exh.'DnsHostNames'
            DnsResolution = $exh.'DnsResolution'
            OwnerId = $obj.OwnerId
            Object = $obj
        }
        $lo.PSObject.TypeNames.Insert(0,'SupSkiFun.AWS.VPC.Info')
        return $lo
    }
}