Private/Invoke-KadenRepairRestore.ps1

function Invoke-KadenRepairRestore {
    <#
    .SYNOPSIS
        Put managed files and version state back to the recorded prior transaction state.
    .DESCRIPTION
        Child-owned files that are not in the journal stay in place. Resume is not required, so a missing installed payload does not block restore.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$ChildRoot,
        [Parameter(Mandatory = $true)]
        $OpenJournal
    )

    $journal = $OpenJournal.Journal
    if ($OpenJournal.Broken -or -not $journal) {
        throw 'KDN-TXN-REPAIR-REQUIRED: The interrupted journal cannot be read, so restore has no recorded prior state.'
    }

    $operations = @($journal.operations)
    if ($operations.Count -gt 0) {
        Restore-KadenManagedFile -ChildRoot $ChildRoot -Operations $operations
    }

    $version = $null
    $projectId = $null
    if ($journal.stateBefore) {
        if ($journal.stateBefore.managedContentVersion) {
            $version = [string]$journal.stateBefore.managedContentVersion
        }
        if ($journal.stateBefore.projectId) {
            $projectId = [string]$journal.stateBefore.projectId
        }
    }
    if ($version) {
        Write-KadenSharedState -ChildRoot $ChildRoot -ManagedContentVersion $version -ProjectId $projectId -InstallationStatus 'restored'
    }
    Complete-KadenOpenJournal -OpenJournal $OpenJournal -Operations $operations
}