Public/Get-ALImportableRev.ps1

function Get-ALImportableRev {
  <#
.SYNOPSIS
  Gets revisions that can be used to import
.DESCRIPTION
  Gets revisions that can be used to import
.PARAMETER websession
  Existing Webrequest session for ELM Appliance
.PARAMETER sharepath
  Share UNC Path type
.PARAMETER username
  Share username
.PARAMETER sharepw
  Share password
.PARAMETER showall
  Get all layers including non exportable ones
.EXAMPLE
  Get-ALImportableRev -websession $websession -sharepath "\\myserver\path\layers"
#>

  [cmdletbinding()]
  Param(
    [Parameter(Mandatory = $true)]$websession,
    [Parameter(Mandatory = $true)][string]$sharepath,
    [Parameter(Mandatory = $false)][string]$username,
    [Parameter(Mandatory = $false)][string]$sharepw,
    [Parameter(Mandatory = $false)][switch]$showall
  )
  Begin {
    Write-Verbose "BEGIN: $($MyInvocation.MyCommand)"
    Test-ALWebsession -WebSession $websession
  }
  Process {

    if ($username) {
      Write-Verbose "Using Credentials"
      test-alremotefileshare -websession $websession -sharepath $sharepath -username $username -sharepw $sharepw
      [xml]$xml = @"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <QueryImportableRevisions xmlns="http://www.unidesk.com/">
      <query>
        <Share>
          <ShareId xsi:nil="true"/>
          <SharePath>$sharepath</SharePath>
          <Username>$username</Username>
          <Password>$sharepw</Password>
        </Share>
      </query>
    </QueryImportableRevisions>
  </s:Body>
</s:Envelope>
"@

    }
    else {
      Write-Verbose "NO Credentials"
      test-alremotefileshare -websession $websession -sharepath $sharepath
      [xml]$xml = @"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <QueryImportableRevisions xmlns="http://www.unidesk.com/">
      <query>
        <Share>
          <ShareId xsi:nil="true"/>
          <SharePath>$sharepath</SharePath>
        </Share>
      </query>
    </QueryImportableRevisions>
  </s:Body>
</s:Envelope>
"@
 
    }
    Write-Verbose $xml

    $headers = @{
      SOAPAction     = "http://www.unidesk.com/QueryImportableRevisions";
      "Content-Type" = "text/xml; charset=utf-8";
      UNIDESK_TOKEN  = $websession.token;
    }
    $url = "https://" + $websession.aplip + "/Unidesk.Web/API.asmx"
    $return = Invoke-WebRequest -Uri $url -Method Post -Body $xml -Headers $headers -WebSession $websession
    [xml]$obj = $return.Content
    #return $obj
    $output = @()
    foreach ($oslayer in $obj.Envelope.Body.QueryImportableRevisionsResponse.QueryImportableRevisionsResult.ImportableLayerHierarchy.OsLayers.PortableOsLayer) {
      write-verbose $oslayer.name
      foreach ($osrev in $oslayer.Revisions.PortableRevision) {
        write-verbose "Entering os layer revisions"
        $temp = [PSCustomObject]@{
          "OSLayer"             = $oslayer.Name;
          "LayerTYPE"           = "OS";
          "BaseName"            = $oslayer.Name;
          "RevName"             = $osrev.Name;
          "ID"                  = $osrev.Id.'#text';
          "SizeInMB"            = $osrev.LayerSizeInMb;
          "ExistsInDestination" = $osrev.ExistsInDestination;
        }
        $output += $temp
      }
        
      foreach ($applayer in $oslayer.AppLayers.PortableLayer) {
        write-verbose "Entering app layer"
        foreach ($applayerrev in $applayer.Revisions.PortableRevision) {
          $temp = [PSCustomObject]@{
            "OSLayer"             = $oslayer.Name;
            "LayerTYPE"           = "APP";
            "BaseName"            = $applayer.Name;
            "RevName"             = $applayerrev.Name;
            "ID"                  = $applayerrev.Id.'#text';
            "SizeInMB"            = $applayerrev.LayerSizeInMb;
            "ExistsInDestination" = $applayerrev.ExistsInDestination;
          }
          $output += $temp
        }
      }

      foreach ($platlayer in $oslayer.PlatformLayers.PortableLayer) {
        write-verbose "Entering platform layer"
        foreach ($platlayerev in $platlayer.Revisions.PortableRevision) {
          $temp = [PSCustomObject]@{
            "OSLayer"             = $oslayer.Name;
            "LayerTYPE"           = "PLATFORM";
            "BaseName"            = $platlayer.Name;
            "RevName"             = $platlayerev.Name;
            "ID"                  = $platlayerev.Id.'#text';
            "SizeInMB"            = $platlayerev.LayerSizeInMb;
            "ExistsInDestination" = $platlayerev.ExistsInDestination;
          }
          $output += $temp
        }
      }


    }

    if ($showall) {
      return $output
    }
    else {
      return $output | Where-Object { $_.ExistsInDestination -eq $false }
    }

  }

  end { Write-Verbose "END: $($MyInvocation.MyCommand)" }
}