public/Start-UnraidParityCheck.ps1

function Start-UnraidParityCheck {
    <#
    .SYNOPSIS
        Starts a parity check.

    .PARAMETER Array
        Array object (auto-retrieves if not provided).

    .PARAMETER NoCorrect
        Read-only check without corrections.

    .PARAMETER Session
        Unraid session (defaults to current session).

    .EXAMPLE
        Start-UnraidParityCheck

    .EXAMPLE
        Start-UnraidParityCheck -NoCorrect
    #>

    [CmdletBinding(SupportsShouldProcess)]
    [OutputType('void')]
    param(
        [Parameter(ValueFromPipeline)]
        [UnraidArray]$Array,

        [switch]$NoCorrect,

        [Parameter()]
        [UnraidSession]$Session = $script:DefaultUnraidSession
    )

    process {
        if (! $Array) {
            Write-Verbose "Retrieving current array status..."
            $Array = Get-UnraidArray

            if (!$Array) {
                Write-Error "Unable to retrieve array status."
                return
            }
        }

        if ($Array.ParityStatus -eq "RUNNING" -or $Array.ParityStatus -eq "PAUSED") {
            Write-Warning "Parity check is already active. Status: $($Array.ParityStatus)"
            return
        }

        if ($Array.State -ne "STARTED") {
            Write-Error "Cannot start parity check. The array must be started first."
            return
        }

        $shouldCorrect = if ($NoCorrect) { "false" } else { "true" }
        $actionDesc    = if ($NoCorrect) { "read-only parity check" } else { "parity check with correction" }

        if ($PSCmdlet.ShouldProcess("Unraid Array", "Start $actionDesc")) {
            $gqlQuery = @"
            mutation StartCheck {
                parityCheck {
                    start(correct: $shouldCorrect)
                }
            }
"@

            $result = Invoke-UnraidQuery -Query $gqlQuery -Session $Session 

            if ($result.parityCheck.start) {  Write-Information "Parity check started: $actionDesc" -InformationAction Continue }
            else { Write-Warning "Command sent, but Unraid did not confirm the start."  }
        }
    }
}