Private/Invoke-Azcli.ps1


function Invoke-Azcli {
    <#
    .SYNOPSIS
        This function is a wrapper for azure cli
    .PARAMETER ArgumentList
        The arguments to be passed on to az
    #>


    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false,Position=1)]
        [String[]]$ArgumentList
    )


    $Params = @{}

    if ($PSBoundParameters['ArgumentList']) {
        $Params['Parameters'] = $PSBoundParameters['ArgumentList']
    }
    
    $CommandPath = Get-Command -Name az | Select-Object -First 1 -ExpandProperty Source

    # Invoke azure cli and process result
     $Result = Invoke-Process -Path $CommandPath @Params

     if ($Result.ExitCode -ne 0) {
          throw "StdErr: $($Result.StdErr)`nStdOut: $($Result.StdOut)`nExitCode: $($Result.ExitCode)"
     } 

    try {
        # Lets try to convert the json output
        Write-Output (ConvertFrom-Json -InputObject (-join $Result.StdOut))
    } catch {
        "StdErr: $($Result.StdErr) $($_)`nStdOut: $($Result.StdOut)`nExitCode: $($Result.ExitCode)"

        # If we cant parse it, just write the output to the pipeline
        Write-Output $Result.StdOut
    }

}