```PowerShell
function Measure-ScriptBlock
{
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    [OutputType('object')]
    param(
        # The script block to measure.
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [scriptblock]$ScriptBlock,

        # The number of loops / iterations to run the script block. Default: "100"
        [Parameter()][UInt32]$Loops = 100,

        # Disables showing progress updates.
        [Parameter(ParameterSetName = 'NoProgress', Mandatory = $true)][switch]$ProgressOff,

        # Indicates the minimum time in seconds, between updates to the progress. Intended to help mitigate the performance impact of showing progress updates on short running scripts. Default: "1" Progress is updated no more than once (1) a second. Set to zero (0) to update on every loop. Note: Progress is updated once per loop, as such this parameter only has an effect when the execution time of the script block is less than this parameters value.
        [Parameter(ParameterSetName = 'Default')][UInt32]$ProgressMinFrequency
    )
    begin{}
    process{}
    end{}
}
```