In this article I’ll show you how to return JSON as a vRO Property type using vRA Cloud Extensibility Proxy (CEXP) vRO PowerShell 7 scriptable tasks.
First a couple of notes about the CEXP.
- It is BIG, 32GB of RAM. However my lab instance is using less than 7 GB active memory.
- 8 vCPU, and runs about 50% on average.
- It deploys with 4 disks, using a tad less than 210 GB.
Why PowerShell 7? Well it was a design decision based on the customers PS proficiency.
Now down to the good stuff. Here are the details of this basic workflow using PowerShell 7 as Scriptable Tasks.
- Get a new vRA Cloud Bearer Token
- Save it, along with other common header values to an output variable named ‘headers’ (Properties)
- The second scriptable task will use the header and apiEndpoint to GET the vRAC version information (About).
- Then save version information to an output variable named ‘vRacAbout’ (Properties)
Getting (actually POST) the bearerToken is fairly simple. Here is the code for the first task.
function Handler($context, $inputs) {
<#
.PARAMETER $inputs.refreshToken (SecureString)
vRAC Refresh Token
.PARAMETER $inputs.apiEndpoint (String)
vRAC Base API URL
.OUTPUT headers (Properties)
Headers including the bearerToken
#>
$body = @{ refreshToken = $inputs.refreshToken } | ConvertTo-Json
$headers = @{'Accept' = 'application/json'
'Content-Type' = 'application/json'}
$Uri = $inputs.apiEndpoint + "/iaas/api/login"
$requestResponse = Invoke-RestMethod -Uri $Uri -Method Post -Body $body -Headers $headers
$bearerToken = "Bearer " + $requestResponse.token
$authorization = @{ Authorization = $bearerToken}
$headers += $authorization
$output=@{headers = $headers}
return $output
}
The second task consumes the headers produced by the first task, then GET(s) the Version Information from the vRA Cloud About route (‘/iaas/api/about’). The results are then returned as the vRacAbout (Properties) variable.
function Handler($context, $inputs) {
<#
.PARAMETER $inputs.headers (Properties)
vRAC Refresh Token
.PARAMETER $inputs.apiEndpoint (String)
vRAC Base API URL
.OUTPUT vRacAbout (Properties)
vRAC version information from the About route
#>
$requestUri += $inputs.apiEndpoint + "/iaas/api/about"
$requestResponse = Invoke-RestMethod -Uri $requestUri -Method Get -Headers $headers
$output=@{vRacAbout = $requestResponse}
return $output
}
Here, you can see the output variables for both tasks are populated. Pretty cool.

As you can see, using the vRO Properties type is fairly simple using the PowerShell on CEXP vRO.
The working workflow package is available here.
Happy coding.