Public/Scripts/Get-FleetScript.ps1

function Get-FleetScript {
    <#
    .SYNOPSIS
        Lists saved scripts or gets one script.
 
    .DESCRIPTION
        Sends GET /api/v1/fleet/scripts or GET /api/v1/fleet/scripts/{id}.
        Listing scripts for unassigned hosts is available in Fleet Free.
        Filtering with FleetId requires Fleet Premium.
 
    .PARAMETER Id
        Script ID.
 
    .PARAMETER FleetId
        Fleet Premium. Lists scripts saved on this fleet. Omit it to list scripts for unassigned hosts.
 
    .PARAMETER Page
        Page number. When omitted, every page is retrieved.
 
    .PARAMETER PerPage
        Page size. The default is 100.
 
    .EXAMPLE
        Get-FleetScript
 
    .EXAMPLE
        Get-FleetScript -Id 12
 
    .NOTES
        Passing FleetId requires Fleet Premium and returns HTTP 402 on Fleet Free.
        https://fleetdm.com/docs/rest-api/rest-api#list-scripts
 
    .LINK
        https://fleetdm.com/docs/rest-api/rest-api#list-scripts
    #>

    [CmdletBinding(DefaultParameterSetName = 'List')]
    param(
        [Parameter(ParameterSetName = 'ById', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
        [ValidateRange(1, [int]::MaxValue)]
        [int]$Id,

        [Parameter(ParameterSetName = 'List')]
        [ValidateRange(0, [int]::MaxValue)]
        [int]$FleetId,

        [Parameter(ParameterSetName = 'List')]
        [ValidateRange(0, [int]::MaxValue)]
        [int]$Page,

        [Parameter(ParameterSetName = 'List')]
        [ValidateRange(1, 500)]
        [int]$PerPage = 100
    )

    process {
        if ($PSCmdlet.ParameterSetName -eq 'ById') {
            $response = Invoke-FleetDMRequest -Endpoint "scripts/$Id" -Method GET
            return (Get-FleetResponseRecord -Response $response -Name 'script' -TypeName 'FleetDM.Script')
        }

        $queryParams = @{ per_page = $PerPage }
        if ($PSBoundParameters.ContainsKey('FleetId')) { $queryParams['fleet_id'] = $FleetId }
        if ($PSBoundParameters.ContainsKey('Page')) { $queryParams['page'] = $Page }

        $followPagination = -not $PSBoundParameters.ContainsKey('Page')
        if ($followPagination) {
            $response = Invoke-FleetDMRequest -Endpoint 'scripts' -QueryParameters $queryParams -FollowPagination
        }
        else {
            $response = Invoke-FleetDMRequest -Endpoint 'scripts' -QueryParameters $queryParams
        }

        return (Get-FleetListResult -Response $response -Name 'scripts' -TypeName 'FleetDM.Script')
    }
}