Public/Invoke-VSCodeRollback.ps1

function Invoke-VSCodeRollback {
    [CmdletBinding()]
    param()

    $root = Join-Path $env:LOCALAPPDATA "Programs"
    $prefix = "VSCode-"
    $linkPath = Join-Path $root "Microsoft VS Code"

    # List all versioned installs
    $versions = Get-ChildItem $root -Directory |
        Where-Object { $_.Name -like "$prefix*" } |
        Sort-Object Name -Descending

    if ($versions.Count -lt 2) {
        Write-Log "[ROLLBACK] Not enough versions to roll back"
        return 90
    }

    $currentTarget = (Get-Item $linkPath -ErrorAction SilentlyContinue).Target
    $previous = $versions[1].FullName

    Write-Log "[ROLLBACK] Current: $currentTarget"
    Write-Log "[ROLLBACK] Rolling back to: $previous"

    # Remove current symlink
    if (Test-Path $linkPath) {
        Remove-Item $linkPath -Force
    }

    # Create new symlink
    New-Item -ItemType SymbolicLink -Path $linkPath -Target $previous | Out-Null

    Write-Log "[ROLLBACK] Rollback complete"
    return 0
}