Public/new-alapplayer.ps1

function New-ALAppLayer {
  <#
.SYNOPSIS
  Creates a new application layer
.DESCRIPTION
  Creates a new application layer
.PARAMETER websession
  Existing Webrequest session for ELM Appliance
.PARAMETER version
  Version of the layer
.PARAMETER name
  Name of the layer
.PARAMETER description
  Description of the layer
.PARAMETER revdescription
  Revision description
.PARAMETER OsLayerSwitching
  Allow OS Switching NotBoundToOsLayer=ON BoundToOsLayer=OFF
.PARAMETER connectorid
  ID of Connector to use
.PARAMETER osrevid
  Operating system version ID
.PARAMETER platformrevid
  Platform version ID if needed
.PARAMETER appprereqid
  Application Layer Prerequisie version ID(s) if needed
.PARAMETER diskformat
  Disk format of the image
.PARAMETER fileshareid
  Fileshare ID to store disk
.PARAMETER size
  Size of layer in GB (default 10240)
.PARAMETER icon
  Icon ID (default 196608)
.EXAMPLE
 $connector = Get-ALconnector -websession $websession -type Create|where{$_.name -eq "MYvCenter"}
 $fileshare = Get-ALRemoteshare -websession $websession
 $oss = Get-ALOsLayer -websession $websession|where{$_.name -eq "Windows 10 x64"}
 $osrevs = get-aloslayerDetail -websession $websession -id $oss.id
 $osrevid = $osrevs.Revisions.OsLayerRevisionDetail|where{$_.state -eq "Deployable"}|Sort-Object revision -Descending|select -First 1
 new-alapplayer -websession $websession -version "1.0" -name "Accounting APP" -description "Accounting application" -connectorid $connector.id -osrevid $osrevid.Id -diskformat $connector.ValidDiskFormats.DiskFormat -OsLayerSwitching BoundToOsLayer -fileshareid $fileshare.id
#>

  [cmdletbinding(SupportsShouldProcess = $true, ConfirmImpact = 'High')]
  Param(
    [Parameter(Mandatory = $true)]$websession,
    [Parameter(Mandatory = $true)][string]$version,
    [Parameter(Mandatory = $true)][string]$name,
    [Parameter(Mandatory = $false)][string]$description = "",
    [Parameter(Mandatory = $false)][string]$revdescription = "",
    [Parameter(Mandatory = $false)][ValidateSet("NotBoundToOsLayer", "BoundToOsLayer")][string]$OsLayerSwitching = "BoundToOsLayer",
    [Parameter(Mandatory = $true)][string]$connectorid,
    [Parameter(Mandatory = $true)][string]$osrevid,
    [Parameter(Mandatory = $false)][string]$platformrevid,
    [Parameter(Mandatory = $false)][string[]]$appprereqid,
    [Parameter(Mandatory = $true)][string]$diskformat,
    [Parameter(Mandatory = $true)][string]$fileshareid,
    [Parameter(Mandatory = $false)][string]$size = "10240",
    [Parameter(Mandatory = $false)][string]$icon = "196608"
  )
  Begin {
    Write-Verbose "BEGIN: $($MyInvocation.MyCommand)"
    Test-ALWebsession -WebSession $websession
  }
  Process {

    if (-not ([string]::IsNullOrWhiteSpace($platformrevid))) {
      Write-Verbose "Creating with Platform layer"
      $plat = @"
<PlatformLayerRevisionId>$platformrevid</PlatformLayerRevisionId>
"@

    }
    else {
      Write-Verbose "Creating withOUT Platform layer"
      $plat = @"
<PlatformLayerRevisionId xsi:nil="true"/>
"@

    }

    if (-not ([string]::IsNullOrWhiteSpace($appprereqid))) {
      Write-Verbose "Creating with layer pre-reqs"
      $idsxml = @()
      foreach ($revid in $appprereqid) {
        $idsxml += @"
<long>$revid</long>
"@

      }

      $reqs = @"
<AppLayerRevisionIds>$idsxml</AppLayerRevisionIds>
"@

    }
    else {
      Write-Verbose "Creating withOUT layer pre-reqs"
      $reqs = @"
<AppLayerRevisionIds/>
"@

    }

    [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">
    <CreateApplicationLayer xmlns="http://www.unidesk.com/">
      <command>
        <OsLayerRevisionId>$osrevid</OsLayerRevisionId>
        $plat
        $reqs
        <LayerInfo>
          <Name>$name</Name>
          <Description>$description</Description>
          <IconId>$icon</IconId>
        </LayerInfo>
        <RevisionInfo>
          <Name>$version</Name>
          <Description>$revdescription</Description>
          <LayerSizeMiB>$size</LayerSizeMiB>
        </RevisionInfo>
        <OsLayerSwitching>$OsLayerSwitching</OsLayerSwitching>
        <SelectedFileShare>$fileshareid</SelectedFileShare>
        <PackagingDiskFilename>$name</PackagingDiskFilename>
        <PackagingDiskFormat>$diskformat</PackagingDiskFormat>
        <Reason>
          <ReferenceNumber>0</ReferenceNumber>
        </Reason>
        <PlatformConnectorConfigId>$connectorid</PlatformConnectorConfigId>
      </command>
    </CreateApplicationLayer>
  </s:Body>
</s:Envelope>
"@

    Write-Verbose $xml
    $headers = @{
      SOAPAction     = "http://www.unidesk.com/CreateApplicationLayer";
      "Content-Type" = "text/xml; charset=utf-8";
      UNIDESK_TOKEN  = $websession.token;
    }
    $url = "https://" + $websession.aplip + "/Unidesk.Web/API.asmx"
    if ($PSCmdlet.ShouldProcess("Creating app layer $name")) { 
      $return = Invoke-WebRequest -Uri $url -Method Post -Body $xml -Headers $headers -WebSession $websession
      [xml]$obj = $return.Content

      if ($obj.Envelope.Body.CreateApplicationLayerResponse.CreateApplicationLayerResult.Error) {
        throw $obj.Envelope.Body.CreateApplicationLayerResponse.CreateApplicationLayerResult.Error.message

      }
      else {
        Write-Verbose "WORKTICKET: $($obj.Envelope.Body.CreateApplicationLayerResponse.CreateApplicationLayerResult.WorkTicketId)"
        return $obj.Envelope.Body.CreateApplicationLayerResponse.CreateApplicationLayerResult
      }
    }
  }
  end { Write-Verbose "END: $($MyInvocation.MyCommand)" }
}