iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Наваял функцию для вывода меню, потестируйте кому не лень. Код: function Menu { <# .SYNOPSIS Вывод экранного меню с запросом выбора одного из элементов меню .DESCRIPTION Функция выводит меню на экран для выбора одного из элементов. Функция принимает в качестве параметра: массив элементов которые будут отображены в меню начальный индекс с которого будут начинаться элементы меню одно из именованных свойств элемента массива, если элемент массива содержит свойства, именно оно и будет отображаться в качестве элемента меню цвет индекса цвет текста строка запроса скрипт блок, которому будет передан выбранный объект и который будет запущен после выбора в меню Получить список возможных цветов: [System.ConsoleColor].GetEnumNames() AUTHOR : iNNOKENTIY21 .EXAMPLE Menu .EXAMPLE [scriptblock] $script = { Param ($o) "Вы выбрали $($o.FullName)" } $params = @{ list = [IO.DirectoryInfo[]] (Get-ChildItem -Path "$env:SystemDrive\" -Directory) StartIndex = 10 property = 'Name' indexColor = [System.ConsoleColor]::Yellow textColor = "DarkGreen" prompt = "`nВыберете директорию введя соответствующую цифру" ScriptBlock = $script } Clear-Host $title = "ДЕМО" $description = "Меню выбора директории" Write-Host $title Write-Host ([string]::new('=', $title.Length)) Write-Host Write-Host $description Write-Host ([string]::new('—', $description.Length)) Menu @params #> param ( [array] $list = @("Апельсин", "Мандарин", "Персик", "Яблоко"), [int] $StartIndex = 1, [string] $property, [string] $indexColor = [System.ConsoleColor]::Cyan, [string] $textColor = [System.ConsoleColor]::DarkGreen, [string] $prompt = "`nВведите цифру", [scriptblock] $ScriptBlock = { Param ($o); "Вы выбрали $($o)" } ) $EndIndex = $StartIndex + $list.Count if ($property) { $str = { "$($list[$i-$StartIndex].$property)" } } else { $str = { "$($list[$i-$StartIndex])" } } for ($i = $StartIndex; $i -lt $EndIndex; $i++) { Write-Host " $i. " -ForegroundColor $indexColor -NoNewline Write-Host (& $str) -ForegroundColor $textColor } do { [int] $Index = Read-Host -Prompt $prompt } while (($Index -lt $StartIndex) -or ($Index -ge $EndIndex)) $ScriptBlock.Invoke($list[$Index - $StartIndex]) } |
|