Root/Get-WS1LoginSessionToken.ps1

<#
.SYNOPSIS
Request an SessionToken using Oauth2 client that supports user and password.
@Source: https://docs.hol.vmware.com/HOL-2019/hol-1957-02-uem_pdf_en.pdf
 
.PARAMETER Tenant
Mandatory: WS1Access Tenant.
 
.PARAMETER LocalAdminUSR
Mandatory: Local user.
 
.PARAMETER LocalAdminPWD
Optional: local user password.
 
.EXAMPLE
$Token = Get-WS1LoginSessionToken -Tenant "example.vmware.com" -LocalAdminUSR "Admin" -LocalAdminPWD "P@ssw0rd"
#>

Function Get-WS1LoginSessionToken{
    [cmdletbinding()]
    param(
        [Parameter(Mandatory=$true)][string]$Tenant,
        [Parameter(Mandatory=$true)][string]$LocalAdminUSR,
        [Parameter(Mandatory=$true)][string]$LocalAdminPWD

    )

    $URI = "https://$($Tenant)/SAAS/API/1.0/REST/auth/system/login"
    $Header = @{
        Authorization = "Bearer $($Token)"
        "Content-Type" = "application/json"
        Accept = "application/json"
    }
    $Body = @{
        "username" = "$LocalAdminUSR"
        "password" = "$LocalAdminPWD"
        "issueToken" = "true"
    } | ConvertTo-Json

    $IRMParams = @{
        Method = 'POST'
        Headers = $Header
        Body = $Body
        URI = $URI
    }
    Write-Debug $($IRMParams | out-string)
    $sessionToken = (Invoke-RestMethod @IRMParams).sessionToken
    #$sessionTokenDEC = ConvertFrom-JWT -Token $sessionToken
    $Token = @{
        scope = "admin"
        "access_token" = "$sessionToken"
        "token_type" = "Bearer"
        "expires_in" = "$((ConvertFrom-JWT -Token $sessionToken).exp)"
        "refresh_token" = "None"
        "Tenant" = "$Tenant"
    }
    
    Return (New-Object -TypeName psobject -Property $Token)
}