src/Views/Get-XrmRecordsFromView.ps1

<#
    .SYNOPSIS
    Retrieve records from a view.

    .DESCRIPTION
    Get records according to given view name.

    .PARAMETER XrmClient
    Xrm connector initialized to target instance. Use latest one by default. (Dataverse ServiceClient)

    .PARAMETER LogicalName
    Gets or sets the entity name in order to filter views name.

    .PARAMETER ViewName
    Entity saved query name. Use auto completion to select proper one.
#>

function Get-XrmRecordsFromView {
    [CmdletBinding()]
    param
    (        
        [Parameter(Mandatory = $false, ValueFromPipeline)]
        [Microsoft.PowerPlatform.Dataverse.Client.ServiceClient]
        $XrmClient = $Global:XrmClient,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $EntityLogicalName,      

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $ViewName
    )
    begin {   
        $StopWatch = [System.Diagnostics.Stopwatch]::StartNew(); 
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters); 
    }    
    process {        
        $selectedView = Get-XrmViews -EntityLogicalName $EntityLogicalName -Columns "name", "layoutxml", "fetchxml" | Where-Object -Property "name" -EQ $ViewName;
        $fetchQuery = Get-XrmQueryFromFetch -FetchXml $selectedView.fetchxml;
        $records = Get-XrmMultipleRecords -Query $fetchQuery;
        $records;
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }    
}

Export-ModuleMember -Function Get-XrmRecordsFromView -Alias *;

Register-ArgumentCompleter -CommandName New-XrmQueryExpression -ParameterName "EntityLogicalName" -ScriptBlock {

    param($CommandName, $ParameterName, $WordToComplete, $CommandAst, $FakeBoundParameters)

    $validLogicalNames = Get-XrmEntitiesLogicalName;
    return $validLogicalNames | Where-Object { $_ -like "$wordToComplete*" };
}

Register-ArgumentCompleter -CommandName Get-XrmRecordsFromView -ParameterName "ViewName" -ScriptBlock {

    param($CommandName, $ParameterName, $WordToComplete, $CommandAst, $FakeBoundParameters)

    $viewsNames = @();
    if (-not ($fakeBoundParameters.ContainsKey("EntityLogicalName"))) {
        return $viewsNames;
    }
    $views = Get-XrmViews -EntityLogicalName $fakeBoundParameters.EntityLogicalName -Columns "name";
    $views | ForEach-Object { $viewsNames += $_.name };
    return $viewsNames | Where-Object { $_ -like "$wordToComplete*" } | Sort-Object;
}