Public/Invoke-1CMenu.ps1

function Invoke-1CMenu {
    <#
    .SYNOPSIS
        Основное меню модуля 1CMgmt: быстрый доступ к справке, обслуживанию и задачам планировщика.
    .DESCRIPTION
        Лаконичное меню: Справка → Обслуживание → Задачи (ЖР/автоапгрейд) → Выход.
    .EXAMPLE
        Invoke-1CMenu
    #>

    
    Clear-Host

    # Определяем разделитель и массив пунктов меню
    $separator = "-----------------------------------------------"
    $menuItems = @(
        @{ Key = "0"; Text = "Справка по модулю"; Action = { Get-1CModuleHelp } },
        @{ Key = "1"; Text = "Обслуживание сервера 1С"; Action = { Invoke-1CMaintenanceMenu } },
        @{ Key = "2"; Text = "Задачи планировщика (ЖР и автоапгрейд)"; Action = { Invoke-1CTaskMenu } },
        @{ Key = "3"; Text = "Быстрый апгрейд current (запустить сейчас)"; Action = { Start-1CServerUpgrade } },
        @{ Key = "q"; Text = "Выход"; Action = { exit } }
    )

    # Вывод заголовка и пунктов меню
    Write-Host $separator -ForegroundColor Blue
    Write-Host "1CMgmt — основное меню" -ForegroundColor Green
    Write-Host $separator -ForegroundColor Blue
    Write-Host "Проверка зависимостей..." -NoNewline
    Test-1CModuleDependency | Out-Null
    Write-Host " ok" -ForegroundColor Green
    Write-Host $separator -ForegroundColor Blue
    
    foreach ($item in $menuItems) {
        Write-Host ("{0}. {1}" -f $item.Key, $item.Text) -ForegroundColor Green
        Write-Host $separator -ForegroundColor Blue
    }
    Write-Host

    # Обработка пользовательского ввода
    while ($true) {
        $choice = Read-Host "Выберите действие (q — выход)"
        $selected = $menuItems | Where-Object { $_.Key -eq $choice }
        if ($selected) {
            # Выполнение ассоциированного блока
            & $selected.Action
        }
        else {
            Write-Host "Неверный выбор, попробуйте снова." -ForegroundColor Red
        }
    }
}