Public/connect-alsession.ps1

function Connect-ALsession
{
<#
.SYNOPSIS
  Connects to the Citrix Application Layering appliance and creates a web request session
.DESCRIPTION
  Connects to the Citrix Application Layering appliance and creates a web request session
.PARAMETER credential
  PowerShell credential object
.EXAMPLE
  $websession = Connect-alsession -aplip $aplip -Credential $Credential -Verbose
#>

[cmdletbinding()]
Param(
[parameter(Mandatory=$true)][pscredential]$Credential,
[Parameter(Mandatory=$true)][string]$aplip
)
Begin {
  Write-Verbose "BEGIN: $($MyInvocation.MyCommand)"
}
Process {
#https://stackoverflow.com/questions/41897114/unexpected-error-occurred-running-a-simple-unauthorized-rest-query
$code = @"
public class SSLHandler
{
    public static System.Net.Security.RemoteCertificateValidationCallback GetSSLHandler()
    {
        return new System.Net.Security.RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; });
    }
}
"@

#compile the class
try{
  if([SSLHandler])
  {
    Write-Verbose "SSLHandler already loaded"
  }
  }
  catch
  {
    Write-Verbose "SSLHandler loading"
    Add-Type -TypeDefinition $code
  }


[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
#[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = [SSLHandler]::GetSSLHandler()
$username = $Credential.UserName
$pass = $Credential.GetNetworkCredential().Password

[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">
    <Login xmlns="http://www.unidesk.com/">
      <command>
        <UserName>$username</UserName>
        <Password>$pass</Password>
        <Culture>en-US</Culture>
        <RememberMe>false</RememberMe>
      </command>
    </Login>
  </s:Body>
</s:Envelope>
"@

$headers = @{"SOAPAction" = "http://www.unidesk.com/Login"}
$url = "https://" + $aplip + "/Unidesk.Web/API.asmx"
$login = Invoke-WebRequest -Uri $url -Method Post -Body $xml -ContentType "text/xml" -SessionVariable websession -Headers $headers
[xml]$mylogin = $login.Content

if($mylogin.Envelope.Body.LoginResponse.LoginResult.Error)
{
  throw $mylogin.Envelope.Body.LoginResponse.LoginResult.Error.message
}
else {
  $websession|add-member -NotePropertyName 'token' -NotePropertyValue $mylogin.Envelope.body.LoginResponse.LoginResult.Token
  $websession|Add-Member -NotePropertyName 'aplip' -NotePropertyValue $aplip
  Write-Verbose "TOKEN: $($mylogin.Envelope.body.LoginResponse.LoginResult.Token)"
  Write-Verbose "IP $aplip"
  return $websession
}


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