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." } } } } |