Public/Core/Invoke-IDSqlcmd.ps1

# .ExternalHelp IdentityCommand-help.xml
function Invoke-IDSqlcmd {
    [CmdletBinding()]
    param(
        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [String]$Script,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [int]$Limit,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [int]$PageNumber,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [int]$PageSize,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateRange(-1, 0)]
        [int]$Caching,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [bool]$Direction,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$SortBy
    )

    BEGIN {

    }#begin

    PROCESS {

        $URI = "$($ISPSSSession.tenant_url)/Redrock/query"

        #Redrock only honors Limit when it's paired with PageNumber/PageSize - default them from
        #Limit when not explicitly supplied, so -Limit alone behaves as callers would expect.
        if ($PSBoundParameters.ContainsKey('Limit')) {

            if (-not $PSBoundParameters.ContainsKey('PageSize')) {

                $PSBoundParameters.Add('PageSize', $Limit)

            }

            if (-not $PSBoundParameters.ContainsKey('PageNumber')) {

                $PSBoundParameters.Add('PageNumber', 1)

            }

        }

        #Create request body with Script & args properties
        $Cmd = $PSBoundParameters | Get-Parameter -ParametersToKeep Script
        $Cmd.Add('args', $($PSBoundParameters | Get-Parameter -ParametersToRemove Script))
        $Body = $Cmd | ConvertTo-Json

        #Send Request
        $result = Invoke-IDRestMethod -Uri $URI -Method POST -Body $Body

        if ($null -ne $result) {
            $result.Results.Row
        }

    }#process

    END { }#end

}