Checks/Invoke-CIEMAttackPathRemediation.ps1

param(
    [Parameter(Mandatory)]
    [string]$AttackPathId
)

$ErrorActionPreference = 'Stop'

if ([string]::IsNullOrWhiteSpace($AttackPathId)) {
    throw 'Cannot execute attack path remediation because AttackPathId is empty.'
}

$attackPaths = @(Devolutions.CIEM\Get-CIEMAttackPath | Where-Object { $_.Id -eq $AttackPathId })
if ($attackPaths.Count -ne 1) {
    throw "Cannot execute attack path remediation because attack path '$AttackPathId' was not found."
}

$attackPath = $attackPaths[0]
$scriptText = Devolutions.CIEM\Get-CIEMAttackPathRemediationScript -Id $AttackPathId
$startedAt = Get-Date
& ([scriptblock]::Create($scriptText))
$completedAt = Get-Date

[pscustomobject]@{
    AttackPathId     = $AttackPathId
    PatternId        = $attackPath.PatternId
    PatternName      = $attackPath.PatternName
    StartedAt        = $startedAt
    CompletedAt      = $completedAt
    DurationSeconds  = [Math]::Round(($completedAt - $startedAt).TotalSeconds, 3)
    Status           = 'Completed'
}