ps/Modules/Cole.PowerShell.Developer/Public/ConvertTo-Instance.ps1
2023-05-30 22:51:22 -07:00

68 lines
3.1 KiB
PowerShell

function ConvertTo-Instance {
<#
.SYNOPSIS
Convert the Instance to something that displays neatly
.OUTPUTS
Returns a [object[]] of instances.
#>
[CmdletBinding()]
[OutputType([string[]])]
param (
[Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
[object]$Instance
)
begin {
$logLead = (Get-LogLeadName)
# Define the defaults for the DriveObject response to add some custom display information
$defaultTypeName = 'Instance'
$defaultKeys = @('InstanceId')
$defaultDisplaySet = @('InstanceId', 'Hostname', 'PrivateIpAddress', 'Designation', 'InstanceType', 'CaptureState', 'Region')
$defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet)
$defaultKeyPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultKeyPropertySet',[string[]]$defaultKeys)
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet,$defaultKeyPropertySet)
$liveStateScript = { (Get-EC2Instance -InstanceId $this.InstanceId -ProfileName (Get-LocalCachedAWSProfile) -Region $this.Region).Instances.State.Name }
}
process {
try {
$instanceObject = New-Object PSCustomObject -Property @{
AvailabilityZone = $Instance.AvailabilityZone
CaptureState = $Instance.CaptureState.Value
CpuOptions = $Instance.CpuOptions
EnaSupport = $Instance.EnaSupport
IamInstanceProfile = $Instance.IamInstanceProfile
ImageId = $Instance.ImageId
InstanceId = $Instance.InstanceId
InstanceType = $Instance.InstanceType
NetworkInterfaces = $Instance.NetworkInterfaces
PrivateDnsName = $Instance.PrivateDnsName
PrivateIpAddress = $Instance.PrivateIpAddress
PublicDnsName = $Instance.PublicDnsName
PublicIpAddress = $Instance.PublicIpAddress
Region = $Instance.Region
SecurityGroups = $Instance.SecurityGroups
SubnetId = $Instance.SubnetId
VpcId = $Instance.VpcId
Tags = $Instance.Tags
Hostname = $Instance.Hostname
Designation = $Instance.Designation
DesignationTag = $Instance.DesignationTag
Role = $Instance.Role
Service = $Instance.Service
}
#Give this object a unique typename
$instanceObject.PSObject.TypeNames.Insert(0,$defaultTypeName)
$instanceObject | Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $PSStandardMembers
$instanceObject | Add-Member -MemberType ScriptProperty -Name LiveState -Value $liveStateScript
return $instanceObject
} catch {
Write-Warning "$logLead : Could not convert item to Instance object. Check error below. Returning `$null"
Write-ErrorObject -ErrorItem $PSItem
return $null
}
}
}