Public/Invoke-1CMaintenanceMenu.ps1
|
function Invoke-1CMaintenanceMenu { <# .SYNOPSIS Меню обслуживания и установки 1C (1CMgmt). .DESCRIPTION Интерактивное меню с подменю для установки сервера 1С, обновления платформы/сервера, задач авто-апгрейда, проверки зависимостей и обслуживания. Ввод параметров делается через Read-Host. Используется switch и try/catch для обработки пользовательского ввода и ошибок. .EXAMPLE Invoke-1CMaintenanceMenu .NOTES Требуется PowerShell 5.1/7+, модуль 1CMgmt должен быть загружен. #> Clear-Host function Show-Header([string]$Title) { $sep = '-' * 55 Write-Host $sep -ForegroundColor Blue Write-Host $Title -ForegroundColor Green Write-Host $sep -ForegroundColor Blue } function Read-PortPrefixOptional { # Enter — использовать порты 15* (служба current) $pp = Read-Host "Префикс портов (две цифры, напр. 25). Enter — использовать порты 15* (current)" if ([string]::IsNullOrWhiteSpace($pp)) { return $null } if ($pp -notmatch '^[0-9]{2}$') { Write-Host "Неверный формат. Ожидались две цифры (напр. 25)." -ForegroundColor Yellow return $null } return [int]$pp } function Wait-Enter($msg = 'Готово. Enter — продолжить') { Read-Host $msg | Out-Null } function Is-Back($val) { # r / R / русская «к» от раскладки / слова назад/return $v = ($val ?? '').Trim() return ($v -match '^(?i:r|назад|back|return)$') } function Invoke-InstallMenu { while ($true) { Show-Header "Установка сервера 1С" Write-Host "Подсказка: параметры Version и PortPrefix необязательны. Если не указаны — будет использована последняя найденная версия и портовая схема 15* (current)." -ForegroundColor DarkGray Write-Host "1. Быстрая установка (по умолчанию: последняя версия, порты 15*)" -ForegroundColor Green Write-Host "2. Установка с параметрами (SetupPath / PortPrefix / Version; Version/PortPrefix — необяз.)" -ForegroundColor Green Write-Host "r. Назад" -ForegroundColor Green $c = (Read-Host "Выбор").Trim() if (Is-Back $c) { break } switch ($c) { '1' { try { Write-Host "Запуск: Install-1CServer" -ForegroundColor Cyan Install-1CServer Wait-Enter } catch { Write-Host $_ -ForegroundColor Red; Wait-Enter "Ошибка. Enter — назад" } } '2' { $setup = Read-Host "SetupPath (UNC или локальный). Enter — пропустить" if (Is-Back $setup) { continue } $pp = Read-PortPrefixOptional $ver = Read-Host "Version (напр. 8.3.22.1704). Enter — последняя найденная" if (Is-Back $ver) { continue } $splat = @{} if ($setup) { $splat.SetupPath = $setup } if ($pp) { $splat.PortPrefix = $pp } if ($ver) { $splat.Version = $ver } try { Write-Host ("Install-1CServer {0}" -f ((($splat.GetEnumerator() | ForEach-Object { "-{0} `"$($splat[$_])`"" -f $_.Key }) -join ' '))) -ForegroundColor Cyan Install-1CServer @splat Wait-Enter } catch { Write-Host $_ -ForegroundColor Red; Wait-Enter "Ошибка. Enter — назад" } } default { Write-Host "Неверный выбор" -ForegroundColor Yellow } } } } function Invoke-UpgradeMenu { while ($true) { Show-Header "Обновление сервера 1С" Write-Host "Подсказка: без параметров обновляется служба 'current' (порты 15*). В режиме с параметрами PortPrefix — необязателен." -ForegroundColor DarkGray Write-Host "1. Обновить current (по умолчанию, порты 15*)" -ForegroundColor Green Write-Host "2. Обновить с параметрами (SetupPath / PortPrefix; PortPrefix — необяз.)" -ForegroundColor Green Write-Host "r. Назад" -ForegroundColor Green $c = (Read-Host "Выбор").Trim() if (Is-Back $c) { break } switch ($c) { '1' { try { Write-Host "Запуск: Start-1CServerUpgrade" -ForegroundColor Cyan Start-1CServerUpgrade Wait-Enter } catch { Write-Host $_ -ForegroundColor Red; Wait-Enter "Ошибка. Enter — назад" } } '2' { $setup = Read-Host "SetupPath (UNC/локальный). Enter — пропустить" if (Is-Back $setup) { continue } $pp = Read-PortPrefixOptional $splat = @{} if ($setup) { $splat.SetupPath = $setup } if ($pp) { $splat.PortPrefix = $pp } try { Write-Host ("Start-1CServerUpgrade {0}" -f ((($splat.GetEnumerator() | ForEach-Object { "-{0} `"$($splat[$_])`"" -f $_.Key }) -join ' '))) -ForegroundColor Cyan Start-1CServerUpgrade @splat Wait-Enter } catch { Write-Host $_ -ForegroundColor Red; Wait-Enter "Ошибка. Enter — назад" } } default { Write-Host "Неверный выбор" -ForegroundColor Yellow } } } } function Invoke-AutoUpgradeTaskMenu { while ($true) { Show-Header "Задача авто-апгрейда сервера" Write-Host "1. Создать задачу для current" -ForegroundColor Green Write-Host "2. Создать задачу для currentXX (по PortPrefix)" -ForegroundColor Green Write-Host "r. Назад" -ForegroundColor Green $c = (Read-Host "Выбор").Trim() if (Is-Back $c) { break } switch ($c) { '1' { try { New-1CServerAutoUpgradeTask Wait-Enter } catch { Write-Host $_ -ForegroundColor Red; Wait-Enter "Ошибка. Enter — назад" } } '2' { $pp = Read-PortPrefixOptional $splat = @{} if ($pp) { $splat.PortPrefix = $pp } try { New-1CServerAutoUpgradeTask @splat Wait-Enter } catch { Write-Host $_ -ForegroundColor Red; Wait-Enter "Ошибка. Enter — назад" } } default { Write-Host "Неверный выбор" -ForegroundColor Yellow } } } } while ($true) { Show-Header "Меню обслуживания сервера 1С" Write-Host "0. Сжать журналы регистрации" -ForegroundColor Green Write-Host "1. Показать установленные версии" -ForegroundColor Green Write-Host "2. Проверить зависимости модуля" -ForegroundColor Green Write-Host "3. Установка сервера (подменю)" -ForegroundColor Green Write-Host "4. Обновление сервера (подменю)" -ForegroundColor Green Write-Host "5. Авто-апгрейд (задача)" -ForegroundColor Green Write-Host "6. Справка (README)" -ForegroundColor Green Write-Host "7. Обновить модуль 1CMgmt" -ForegroundColor Green Write-Host "q. Выход" -ForegroundColor Green $choice = (Read-Host "Выберите действие").Trim() if ($choice -match '^(?i:q|quit|exit)$') { return } switch ($choice) { '0' { try { Compress-1Clogs } catch { Write-Host $_ -ForegroundColor Red } } '1' { try { Get-1CInstalledVersion | Format-Table -AutoSize | Out-Host } catch { Write-Host $_ -ForegroundColor Red } } '2' { try { Test-1CModuleDependency | Out-Host } catch { Write-Host $_ -ForegroundColor Red } } '3' { Invoke-InstallMenu } '4' { Invoke-UpgradeMenu } '5' { Invoke-AutoUpgradeTaskMenu } '6' { try { Get-1CModuleHelp } catch { Write-Host $_ -ForegroundColor Red } } '7' { try { Update-Module1CMgmt } catch { Write-Host $_ -ForegroundColor Red } } default { Write-Host "Неверный выбор, попробуйте снова." -ForegroundColor Yellow } } } } |