Public/get-alvcenterobject.ps1

function Get-alVcenterObject {
  <#
.SYNOPSIS
  Gets Vcenter Connector datacenters
.DESCRIPTION
  Gets Vcenter Connector datacenters
.PARAMETER websession
  Existing Webrequest session for ELM Appliance
.PARAMETER configid
  Connector ID
.PARAMETER vcenter
  vCenter Hostname
.PARAMETER vcenterpass
  Password to authenticate to vcenter
.PARAMETER username
  Username to authenticate to vcenter
.PARAMETER type
  Type of object to return
.PARAMETER dc
  vCenter Datacenter ID to query
.PARAMETER vmfolder
  vCenter folder ID to query
.PARAMETER name
  Name of object to return
.EXAMPLE
  Get-alVcenterObjectDataCenter -websession $websession -configid $vcenter.pccId -username $vcenter.pccConfig.userName -vcenter $vcenter.pccConfig.vCenterServer -Verbose
#>

  [cmdletbinding()]
  Param(
    [Parameter(Mandatory = $true)]$websession,
    [Parameter(Mandatory = $false)][string]$configid,
    [Parameter(Mandatory = $true)][string]$vcenter,
    [Parameter(Mandatory = $false)][string]$vcenterpass,
    [Parameter(Mandatory = $true)][string]$username,
    [Parameter(Mandatory = $true)][ValidateSet("Datacenter", "Host", "Datastore", "Network", "VMTemplate", "VMFolder")][string]$type,
    [Parameter(Mandatory = $false)][string]$dc,
    [Parameter(Mandatory = $false)][string]$vmfolder,
    [Parameter(Mandatory = $false)][SupportsWildcards()][string]$name = "*"
  )
  Begin {
    Write-Verbose "BEGIN: $($MyInvocation.MyCommand)"

    if ([string]::IsNullOrWhiteSpace($configid) -and [string]::IsNullOrWhiteSpace($vcenterpass)) {
      throw "If CONFIGID is not used a password must be set"
    }

    #Case sensitive for JSON
    switch ($type) {
      "datacenter" { $typemod = "Datacenter" }
      "host" { $typemod = "HostSystem" }
      "datastore" { $typemod = "Datastore" }
      "network" { $typemod = "Network" }
      "vmtemplate" { $typemod = "VirtualMachine" }
      "vmfolder" { $typemod = "Folder" }
    }

  }

  Process {

    #do the request
    $headers = @{
      "Cookie"       = ("UMCSessionCoookie=" + $($websession.token))
      "Accept"       = "*/*"
      "Content-Type" = "application/json"
      "Host"         = "$($websession.aplip):3504"
      "Referer"      = "https://$($websession.aplip):3504/ui/"
    }

    if ($typemod -eq "Datacenter") {
      Write-Verbose "Building Datacenter Body"
      $body = [PSCustomObject]@{
        'configId'      = $configid
        'properties'    = (
          'name',
          'vmFolder'
        )
        'recursive'     = $True
        'type'          = 'Datacenter'
        'userName'      = $username
        'vCenterServer' = $vcenter
      }

    }
    elseif ($typemod -eq "VirtualMachine") {
      Write-Verbose "Building VirtualMachine Body"
      $body = [PSCustomObject]@{
        'configId'      = $configid
        'vCenterServer' = $vcenter
        'userName'      = $username
        'root'          = [PSCustomObject]@{
          'attributes' = [PSCustomObject]@{
            'type'     = 'Folder'
            "xsi:type" = "ManagedObjectReference"
          }
          '$value'     = $vmfolder
        }
        'type'          = $typemod
        'properties'    = @(
          'name',
          'parent',
          'datastore',
          'network',
          'runtime',
          'config')
        'recursive'     = $True
      }
    }
    elseif ($typemod -eq "Folder") {
      Write-Verbose "Building Folder Body"
      $body = [PSCustomObject]@{
        'configId'      = $configid
        'vCenterServer' = $vcenter
        'userName'      = $username
        'root'          = [PSCustomObject]@{
          'attributes' = [PSCustomObject]@{
            'type'     = 'Folder'
            "xsi:type" = "ManagedObjectReference"
          }
          '$value'     = $vmfolder
        }
        'type'          = $typemod
        'properties'    = @('name')
        'recursive'     = $True 
      }

    }
    else {
      Write-Verbose "Building $type Body"
      if ([string]::IsNullOrWhiteSpace($dc)) {
        throw "DC Parameter required"
      }

      $body = [PSCustomObject]@{
        'configId'      = $configid
        'vCenterServer' = $vcenter
        'userName'      = $username
        'root'          = [PSCustomObject]@{
          'attributes' = [PSCustomObject]@{'type' = 'Datacenter' }
          '$value'     = $dc
        }
        'type'          = $typemod
        'properties'    = @('name')
        'recursive'     = $True
    
      }
  
    }

    #If password is used to authenticate against vcenter
    if ($vcenterpass) {
      $body.configId = ""
      $body | Add-Member -NotePropertyName "password" -NotePropertyValue $vcenterpass
    }

    try {
      $content = Invoke-RestMethod -Method POST -Uri "https://$($websession.aplip):3504/api/VmwareManagedObjects/findByType" -Headers $headers -Body ($body | ConvertTo-Json -Depth 100)
    }
    catch {

      if ($_.ErrorDetails.Message) {
        $temp = $_.ErrorDetails.Message | ConvertFrom-Json
        if ($temp.message) {
          Write-error $temp.message
        }
        else {
          Write-error $temp.error.message
          Write-error $temp.error.sqlmessage
          write-error $temp.error.staus
        }

        throw "Process failed!"
      }
      else {
        throw $_
      }
    }
    finally {
   
    }

    $final = @()
    if ($typemod -eq "VirtualMachine") {
      foreach ($return in $content.results) {
        $temp = [pscustomobject]@{
          "Type"  = "VirtualMachine"
          "Value" = $return.mobRef.'$value'
          "Name"  = $return.name
        }
        $final += $temp
      }
    }
    else {

      foreach ($return in $content.results) {
        $temp = [pscustomobject]@{
          "Type"  = $return.mobRef.attributes.type
          "Value" = $return.mobRef.'$value'
          "Name"  = $return.name
        }
    
        if ($typemod -eq "Datacenter") {
          $temp | Add-Member -NotePropertyName "vmFolder" -NotePropertyValue $return.vmFolder.'$value'
        }
        $final += $temp
      }

    }
  
    return $final | Where-Object { $_.name -like $name }

  }

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

}