Private/Get-ValidNonentities.ps1

Function Get-ValidNonentities {
    param
    (
        [SolutionComponent[]]$NonentityComponent,
        [Microsoft.Xrm.Tooling.Connector.CrmServiceClient]$conn,
        [hashtable]$Metadata
    )
    
    Write-Verbose "Identifying valid Nonentities..."
    $validNonentities = @()
    $componentSchema = @{ }

    foreach ($component in $NonentityComponent) {

        $exist = $Metadata.Target.Attributes[$component.ObjectId]
        if (-Not $exist) {
            $exist = $Metadata.Target[$component.ObjectId]
        }
        if (-Not $exist) {
            if ($Metadata.Target.BySchemaName.All[$component.SchemaName]) {
                if (-Not $componentSchema[$Component.SchemaName]) {
                    $componentSchema[$Component.SchemaName] = Get-ComponentTypeHash -Component $Component -Conn $conn -Metadata $Metadata
                } 
                $exist = $componentSchema[$component.SchemaName][$component.ObjectId]
            } elseif ($Metadata.Target.BySchemaName.Attributes[$component.SchemaName]) {
                $exist = $Metadata.Target.BySchemaName.Attributes[$component.SchemaName] | Where-Object -Property MetadataId -eq $component.ObjectId
            } else {
                
            }
        }

        if ($exist) {
            $validNonentities += $component
        }
    }
    
    Write-Output $validNonentities
}