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)"}

}