Public/Get-ALImageComp.ps1

function Get-ALImageComp {
  <#
.SYNOPSIS
  Gets image composition details
.DESCRIPTION
  Gets image composition details
.PARAMETER websession
  Existing Webrequest session for ELM Appliance
.PARAMETER id
  Image(template) id
.PARAMETER name
  Image name (supports wildcard)
.EXAMPLE
  Gets all images and layer composition
  Get-ALImageComp -websession $websession
.EXAMPLE
  Gets image and layer composition based on ID
  Get-ALImageComp -websession $websession -id 5535
.EXAMPLE
  Gets image and layer composition based on name
  Get-ALImageComp -websession $websession -name "Windows 10"
.EXAMPLE
  Gets image and layer composition based on name (wildcard)
  Get-ALImageComp -websession $websession -name "*10*"
#>

  [cmdletbinding()]
  Param(
    [Parameter(Mandatory = $true)]$websession,
    [Parameter(Mandatory = $false)][string]$id,
    [Parameter(Mandatory = $false)][string]$name
  )
  Begin {
    Write-Verbose "BEGIN: $($MyInvocation.MyCommand)"
    Test-ALWebsession -WebSession $websession
  
    #get images bases on params
    if ( -not ([string]::IsNullOrWhiteSpace($name)) -and ([string]::IsNullOrWhiteSpace($id))) {
      $images = Get-ALimage -websession $websession | Where-Object { $_.name -like $name }
    }
    elseif ([string]::IsNullOrWhiteSpace($name) -and (-not [string]::IsNullOrWhiteSpace($id))) {
      $images = Get-ALimage -websession $websession | Where-Object { $_.id -eq $id }
    }
    elseif ((-not [string]::IsNullOrWhiteSpace($name)) -and (-not [string]::IsNullOrWhiteSpace($id))) {
      throw "Need to use either ID or Name. Not both"
      return
    }
    else {
      $images = Get-ALimage -websession $websession
    }
  }
  Process {
    $returnimage = @()
    foreach ($image in $images) {
      $imagedetail = Get-ALimagedetail -websession $websession -id $image.id
    
      #image detail
      $myimage = [PSCustomObject]@{
        Id                          = $image.id
        ImageId                     = $image.Imageid
        Name                        = $image.Name
        Type                        = $image.Type
        Description                 = $imagedetail.Description
        DateCreated                 = $image.DateCreated
        DateLastModified            = $image.DateLastModified 
        IsPublishable               = $image.IsPublishable
        PlatformConnectorId         = $image.PlatformConnectorId
        PlatformConnectorName       = $image.PlatformConnectorName
        PlatformConnectorConfigId   = $image.PlatformConnectorConfigId
        PlatformConnectorConfigName = $image.PlatformConnectorConfigName
        SysprepType                 = $imagedetail.SysprepType
        ElasticLayerMode            = $imagedetail.ElasticLayerMode
        SizeMB                      = $imagedetail.LayeredImagePartitionSizeMiB
      }

      #Operating System
      $OS = [PSCustomObject]@{
        NAME        = $imagedetail.OsRev.name
        ID          = $imagedetail.OsRev.Revisions.RevisionResult.Id
        IMAGEID     = $imagedetail.OSrev.ImageId
        VersionNAME = $imagedetail.OsRev.Revisions.RevisionResult.Name
        Description = $imagedetail.OsRev.Revisions.RevisionResult.Description
        Status      = $imagedetail.OsRev.Revisions.RevisionResult.Status
      }
      $myimage | Add-Member -MemberType NoteProperty -Name OSLayer -Value $OS
    
      #Platform
      $PL = [PSCustomObject]@{
        NAME        = $imagedetail.PlatformLayer.name
        ID          = $imagedetail.PlatformLayer.Revisions.RevisionResult.Id
        IMAGEID     = $imagedetail.PlatformLayer.ImageId
        VersionNAME = $imagedetail.PlatformLayer.Revisions.RevisionResult.Name
        Description = $imagedetail.PlatformLayer.Revisions.RevisionResult.Description
        Status      = $imagedetail.PlatformLayer.Revisions.RevisionResult.Status
      }
      $myimage | Add-Member -MemberType NoteProperty -Name PlatformLayer -Value $PL
    
      #apps
      $apps = @()
      foreach ($app in $imagedetail.AppLayers.ApplicationLayerResult) {
        $appobj = [PSCustomObject]@{
          NAME        = $app.name
          ID          = $app.Revisions.RevisionResult.Id
          ImageId     = $app.ImageId
          Priority    = $app.Priority
          VersionNAME = $app.Revisions.RevisionResult.Name
          Description = $app.Revisions.RevisionResult.Description
          Status      = $app.Revisions.RevisionResult.Status
        }
        $apps += $appobj
        
      }
      $myimage | Add-Member -MemberType NoteProperty -Name AppLayer -Value $apps
      $returnimage += $myimage
    }
  
  }
  end {
    return $returnimage
    Write-Verbose "END: $($MyInvocation.MyCommand)"
  }
}