PSFunctions/Get-DataverseAttributes.ps1

function Get-DataverseAttributes {
    <#
.EXTERNALHELP PSDataverse.PowerShell-Help.xml
#>


  [CmdletBinding(SupportsShouldProcess)]
  param(
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
    [ValidateNotNullOrEmpty()]
    [string[]]$EntityLogicalName,

    [ValidateNotNullOrEmpty()]
    [string]$AttributeType,

    [ValidateNotNullOrEmpty()]
    [string]$Select,

    [ValidateNotNullOrEmpty()]
    [string]$Filter,

    [ValidateNotNullOrEmpty()]
    [string]$Expand
  )

  process {
    foreach($entity in $EntityLogicalName) {
      if ($PSBoundParameters.ContainsKey('AttributeType')) {
        $query = "EntityDefinitions(LogicalName='$entity')/Attributes/Microsoft.Dynamics.CRM.$($AttributeType)AttributeMetadata?LabelLanguages=1033"
      } else {
        $query = "EntityDefinitions(LogicalName='$entity')/Attributes?LabelLanguages=1033"
      }
      if ($PSBoundParameters.ContainsKey('Select')) { $query += "&`$select=$Select" }
      if ($PSBoundParameters.ContainsKey('Filter')) { $query += "&`$filter=$Filter" }
      if ($PSBoundParameters.ContainsKey('Expand')) { $query += "&`$expand=$Expand" }
      if ($PSCmdlet.ShouldProcess($query, "Send-DataverseOperation")) {
        Send-DataverseOperation $query -AutoPaginate | Select-Object -ExpandProperty value
      }
    }
  }
}