modules/Devolutions.CIEM.Checks/Public/Update-CIEMScanRun.ps1
|
function Update-CIEMScanRun { <# .SYNOPSIS Updates individual fields of an existing ScanRun. .DESCRIPTION Performs a partial UPDATE on the scan_runs table. Only fields explicitly passed via $PSBoundParameters are modified. .PARAMETER Id The ScanRun ID to update (required). .PARAMETER Status New status value. .PARAMETER ErrorMessage Error message to set (for failed scans). .PARAMETER PassThru Returns the updated ScanRun object. #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$Id, [Parameter()] [string]$Status, [Parameter()] [string]$ErrorMessage, [Parameter()] [switch]$PassThru ) $ErrorActionPreference = 'Stop' $existing = Invoke-CIEMQuery -Query "SELECT id FROM scan_runs WHERE id = @id" -Parameters @{ id = $Id } if (-not $existing) { throw "ScanRun '$Id' not found." } $setClauses = @() $params = @{ id = $Id } if ($PSBoundParameters.ContainsKey('Status')) { $setClauses += "status = @status" $params.status = $Status } if ($PSBoundParameters.ContainsKey('ErrorMessage')) { $setClauses += "error_message = @error_message" $params.error_message = $ErrorMessage } if ($setClauses.Count -eq 0) { Write-Verbose "Update-CIEMScanRun: No fields to update." if ($PassThru) { return Get-CIEMScanRun -Id $Id } return } $query = "UPDATE scan_runs SET $($setClauses -join ', ') WHERE id = @id" Invoke-CIEMQuery -Query $query -Parameters $params -AsNonQuery | Out-Null if ($PassThru) { Get-CIEMScanRun -Id $Id } } |